Instiq
第1章 · データモデルとパーティション設計·v1.0.0·更新 2026/6/28·読了目安 約14分

変更要約: DP-420 第1章を新規作成(ドメイン1前半: 非リレーショナルモデリング(embed vs reference/非正規化/id・パーティションキー・一意キー/既定 TTL/バージョニング)、パーティション設計(キー選定/ホットパーティション・429/クロスパーティションコスト/データ・スループット分散/合成キー/階層パーティションキー/同一論理パーティション内トランザクション)、サイジングとスケーリング(RU/s/サーバーレス vs プロビジョニング vs Free/オートスケール/データベースレベルスループット/グローバル分散コスト))。

1.2パーティション設計

この節の要点

パーティションキーの選定、ワークロード別戦略、クロスパーティションクエリのコスト、データ/スループット分散の評価、合成パーティションキーと階層パーティションキーを理解します。

Cosmos DB はデータを 論理パーティション に分けて水平スケールします。パーティションキーの選定はスケーラビリティと性能を左右する最重要設計で、いったん設定すると変更できません。

1.2.1キー選定と分散の評価

良いパーティションキーは カーディナリティが高く(値の種類が多い)データ分散とリクエスト(スループット)分散の両方を均す。特定の値にアクセスが集中すると ホットパーティション(RU と容量の偏り)になり 429 を招く。キー選定では「どのクエリが頻繁か」「どのキーで絞り込むか」を見て、クロスパーティションクエリ(全パーティションを跨ぐ・RU コスト増・ファンアウト)を避けられる値を選ぶ。トランザクション(Transactional Batch・ストアドプロシージャ)は同一論理パーティション内に限られるため、トランザクション境界もキー選定に影響する。

1.2.2合成キーと階層パーティションキー

単一フィールドでは分散が偏る場合、合成パーティションキー(synthetic) として複数フィールドを連結(例 tenantId-date)した値や、ランダムサフィックスを付けてカーディナリティを上げる。複数のレベルで分割したいワークロード(例 テナント→ユーザー→セッション)には 階層パーティションキー(hierarchical partition key) を使い、最大 3 階層のキーで論理パーティションあたり 20GB の制限を超えてスケールしつつ、上位プレフィックスでの効率的なクエリを可能にする。「単一キーで偏る/上限に当たる」=合成 or 階層を検討、が定石。

試験ポイント

決め手:「データ+スループットを均す高カーディナリティ」=良いキー。「一値に集中」=ホットパーティション/429。「全パーティション跨ぎ=RU 増」=クロスパーティションクエリ。「単一で偏る→連結/サフィックス」=合成キー。「多レベル+20GB 超え」=階層パーティションキー。トランザクションは同一論理パーティション内のみ。

注意

混同に注意:
①パーティションキーはコンテナ作成後に変更不可=設計をやり直すには再作成/移行が要る。
②合成キー(カーディナリティ向上)と階層キー(多レベル・20GB 超え)は目的が異なる。
③クロスパーティションクエリは可能だが RU が増える=設計で減らす。
④論理パーティションの 20GB 上限を意識する。

良いパーティションキー=高カーディナリティでデータ/スループットを均す、偏ると hot partition で 429、クロスパーティションクエリは RU 増、単一で偏るなら合成キー、多レベル+20GB 超えは階層パーティションキーを示す図。
均して 429 を避ける

1.2.3この節のまとめ

  • 良いキー=高カーディナリティでデータ/スループットを均す・ホットパーティションと 429 を避ける
  • クロスパーティションクエリは RU 増=頻繁なクエリで絞れるキーを選ぶ
  • 合成キー=カーディナリティ向上、階層パーティションキー=多レベル・20GB 超えのスケール

進捗の記録にはログインが必要です。

理解度チェック

(軽い確認用)

Q1. 特定のパーティションキー値にアクセスが集中し RU が偏って 429 が頻発している。最も適切な対処はどれですか?

Q2. 単一フィールドではカーディナリティが低く偏る。分散を改善する手法はどれですか?

Q3. マルチテナントで「テナント→ユーザー→セッション」の階層で分割し、論理パーティション 20GB を超えてスケールしたい。最適なのはどれですか?

Q4. クロスパーティションクエリについて正しいのはどれですか?

Q5. Cosmos DB のトランザクション(Transactional Batch やストアドプロシージャ)が動作する範囲として正しいのはどれですか?

理解度を確認第1章「データモデルとパーティション設計」の問題を解く