本文へスキップ
BecomeCoder

AWS SAP(ソリューションアーキテクト プロフェッショナル)コース · 第6章 新規ソリューションの設計②:データストアとデータベース · レッスン32

DynamoDB の設計

導入

DynamoDBは「速い」で終わらせず、パーティションキーの選び方1つで性能もコストも大きく変わるサービスです。SAPでは、既存のDynamoDB設計の何が悪いかを見抜かせる問題が頻出します。

説明

DynamoDBはデータを複数のパーティションに分散して保存します。パーティションキー(Partition Key)の値によってどのパーティションに保存されるかが決まるため、**特定のキー値にアクセスが集中すると、そのパーティションだけが過負荷になる(ホットパーティション)**という問題が起きます。

flowchart TD
    BAD["悪い設計<br/>キー = 日付のみ"] --> P1["今日のパーティションに<br/>全アクセスが集中"]
    GOOD["良い設計<br/>キー = ユーザーID + 日付"] --> P2["多数のパーティションに<br/>均等に分散"]
概念役割
パーティションキー(PK)データの分散先を決める。値の種類(カーディナリティ)が高いものを選ぶ
ソートキー(SK)同じPK内でのデータの並び順・範囲検索を可能にする
GSI(グローバルセカンダリインデックスPK/SKと異なる列の組み合わせで別の検索経路を追加(別テーブル相当の容量・スループットを持つ)
LSI(ローカルセカンダリインデックス)同じPKで異なるソート順を追加。テーブル作成時にしか追加できない

読み書きのキャパシティモードも要件に応じて選びます。

モード特徴向いている状況
オンデマンドトラフィックに応じて自動スケール、使った分だけ課金負荷が予測できない、立ち上げ初期
プロビジョンド事前にキャパシティを確保、Auto Scalingと併用可負荷パターンが安定していてコストを最適化したい

グローバルにユーザーを持つサービスでは、DynamoDB Global Tables で複数リージョンにテーブルを複製し、どのリージョンからでも低レイテンシーで読み書きできるようにします(マルチリージョンでのマルチアクティブ書き込みに対応)。

読んでみよう

「特定のパーティションだけスロットリングが発生している」という記述を見たら、**パーティションキーの設計ミス(カーディナリティ不足)**を疑いましょう。SAPでは「PKを見直してアクセスを分散させる」という改善提案が正解になる典型パターンです。