データベース ・
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 タイプ
| タイプ | 構成 | 例 |
|---|---|---|
| シンプル PK | PK のみ | UserId |
| 複合キー | PK + SK | UserId(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. 関連用語
- DynamoDB — PK の基盤
- DynamoDB-Streams — 変更ストリーム
- DAX — クエリキャッシュ
7. 関連サイト
AWS 公式
参考
🎓 試験での出題傾向
| 試験 | 重要度 | 主な出題パターン |
|---|---|---|
| CLF | 低 | 出題稀 |
| SAA | 高 | 設計問題(頻出)、ホットパーティション対策 |
| DVA | 高 | PK/SK/GSI/LSI 設計(最頻出) |
| SOA | 中 | パフォーマンス監視 |