データベース

DynamoDB パーティションキー設計の鉄則とホットパーティション対策

パーティションキー(PK)は DynamoDB のアイテムを物理パーティションに振り分けるキー。均等な分散 が性能の鍵で、特定 PK にアクセスが集中(ホットパーティション)すると性能が大幅劣化する。SK(ソートキー)と組み合わせる「複合キー」設計も重要。 ---

DynamoDB のテーブルを物理分散する基準キー。設計次第で性能が天と地ほど変わる重要要素。


1. 概要(端的に)

パーティションキー(PK)は DynamoDB のアイテムを物理パーティションに振り分けるキー均等な分散 が性能の鍵で、特定 PK にアクセスが集中(ホットパーティション)すると性能が大幅劣化する。SK(ソートキー)と組み合わせる「複合キー」設計も重要。


2. 何ができるか

  • テーブルの物理分散:PK ハッシュで自動分散
  • 複合キー:PK + SK でグループ内ソート
  • GSI(Global Secondary Index):別 PK/SK で検索
  • LSI(Local Secondary Index):同じ PK + 別 SK
  • クエリ機能:PK 単位、SK 範囲指定

主キーの 2 タイプ

タイプ構成
シンプル PKPK のみUserId
複合キーPK + SKUserId(PK)+ Timestamp(SK)

3. 特徴

観点特徴
PK の選定均等分散になる属性を選ぶ
アンチパターン特定 PK へのアクセス集中(ホットパーティション)
GSI検索用のセカンダリインデックス(別 PK 可)
LSIテーブル作成時のみ追加可(同じ PK)
クエリ操作Query(PK 指定)/ Scan(全スキャン)
書き込み単価小さい PK は分散効率良

ホットパーティション問題

悪い例:PK = "Date"(同日のアクセスが 1 パーティションに集中)
  → 1 日のアクセス全てが 1 パーティションに → 性能制限

良い例:PK = "UserId"(ユーザー単位で分散)
  → アクセスが多数パーティションに分散

Adaptive Capacity

  • 偶発的なホット PK には AWS が自動対処
  • ただし 設計上の偏りは利用者責任

4. 仕組み

DynamoDB は PK のハッシュ値からパーティションを決定する。1 パーティションあたり最大 3,000 RCU / 1,000 WCU / 10 GB の制限がある。

パーティション分散

PK ハッシュ → 0x000... 〜 0xfff... の範囲
  ├ パーティション 1(0x000-0x3ff)
  ├ パーティション 2(0x400-0x7ff)
  ├ パーティション 3(0x800-0xbff)
  └ パーティション 4(0xc00-0xfff)

Query vs Scan

操作コスト用途
Query(PK 指定)特定アイテム取得(推奨)
Scan(全スキャン)超高テーブル全件参照(本番非推奨)

GSI(Global Secondary Index)

  • 別の PK/SK で検索可能なインデックス
  • 元テーブルとは独立したストレージ・キャパシティ
  • 結果整合性のみ
  • 数:最大 20 個/テーブル

LSI(Local Secondary Index)

  • 同じ PK + 別 SK
  • テーブル作成時のみ追加可(後付け不可)
  • 強整合性も可
  • 数:最大 5 個/テーブル

5. ユースケース

ユースケース 1:ユーザー別データ

PK = UserId、SK = Timestamp → ユーザー X の最新 10 件を高速取得。

ユースケース 2:イベントログ

PK = EventType + Date(パーティション分散)、SK = Timestamp。

ユースケース 3:商品カテゴリ

PK = CategoryId、SK = ProductId → カテゴリ別商品リスト。

ユースケース 4:チャット

PK = RoomId、SK = MessageId → ルーム別メッセージ履歴。


6. 関連用語


7. 関連サイト

AWS 公式

参考


🎓 試験での出題傾向

試験重要度主な出題パターン
CLF出題稀
SAA設計問題(頻出)、ホットパーティション対策
DVAPK/SK/GSI/LSI 設計(最頻出
SOAパフォーマンス監視