Azure

Cosmos DB Partition Key 設計集|Synthetic Key・Hierarchical Partition Key・Hot Partition 対策

2026-05-24
NicheeLab編集部

Cosmos DB の Partition Key 設計は、Cosmos DB のパフォーマンス・スケーラビリティ・コストすべてに影響する最重要設計判断です。 Partition Key は後から変更不可 (Container 再作成が必要) で、初期設計の質が運用全体を左右します。 本記事では、良い Partition Key の条件・Synthetic Key パターン・Hierarchical Partition Key・Hot Partition 対策・RU/s モード選定を網羅的に整理します。

Partition Key の基本

Cosmos DB の Container 内のドキュメントを論理パーティションに分散させる JSON プロパティが Partition Key です。

  • Cosmos DB は物理的に複数のパーティション (Physical Partition、最大 20 GB / 10,000 RU/s) に分散保存
  • Partition Key の値ハッシュで物理パーティションが決定される
  • 同じ Partition Key 値を持つドキュメントは同じ Physical Partition に集約
  • 後から変更不可 (Container 再作成が必要)

良い Partition Key の 4 条件

4 つの条件すべてを満たすことが理想です。

  1. カーディナリティが高い: 値のバリエーションが多い、最低 1,000 種類以上推奨
  2. アクセスパターンが分散される: Hot Partition を避ける、特定の少数値に集中しない
  3. クエリで頻繁にフィルタされる: Cross-partition Query を避ける、WHERE 句に含まれる
  4. 書き込みが分散される: Throttling を避ける、書き込み集中するキーは Hot Write Partition の原因

アンチパターン

選定例問題
固定値 (例: "constant")全データが 1 Partition に集中、20 GB / 10,000 RU 制約に直撃
連番 ID (例: orderId 1, 2, 3...)書き込みが Latest Partition に集中、Hot Write
日付 (例: yyyymmdd)当日 Partition に書き込み集中、Hot Write
少数のテナント ID (例: tenant 5 個のみ)カーディナリティ不足、特定大手テナントで Hot Partition
クエリで使わないプロパティすべて Cross-partition Query、コスト数倍

適切な Partition Key 選定例

ユースケース推奨 Partition Key理由
マルチテナント SaaStenantIdテナント単位クエリ多発・分散書き込み
IoT センサーデータdeviceIdデバイス単位読み取り・書き込み分散
ユーザープロファイルuserIdユーザー単位アクセス・高カーディナリティ
Eコマース注文履歴customerId顧客単位履歴クエリ・分散書き込み
ゲームプレイヤーセッションgameId + playerIdゲーム別 + プレイヤー別のアクセス

Synthetic Partition Key

Synthetic Partition Key は、複数のプロパティを連結して人工的にカーディナリティを高める手法。

パターン例

  • tenantId_yyyymm: テナント ID + 年月で月別パーティション
  • userId_random0-99: ユーザー ID + ランダム 0-99 で 100 倍分散
  • deviceId_yyyymmdd: デバイス ID + 日付で日別分散
  • categoryId_year: カテゴリ + 年で履歴分散

実装パターン

  • 書き込みアプリケーションで合成キーを構築 (例: doc.partitionKey = `${doc.tenantId}_${getCurrentMonth()}`)
  • 新規プロパティ partitionKey を Container の Partition Key に指定
  • 読み取りクエリでも合成キーを再構築してフィルタ

トレードオフ

  • 書き込みアプリケーションの修正が必要
  • 特定キー範囲のクエリで Cross-partition になる可能性
  • マルチテナント SaaS で大手・小規模テナント混在時の Hot Partition 回避策として有効

Hierarchical Partition Key (2023 GA)

Hierarchical Partition Key は 2023 GA の機能で、最大 3 階層の Partition Key を指定可能です。

例: TenantId / UserId / SessionId

  • TenantId だけでフィルタ → 全 User・Session 横断クエリ (Cross-partition だが範囲限定)
  • TenantId + UserId でフィルタ → User の全 Session
  • TenantId + UserId + SessionId → 完全 In-partition クエリ

従来は Synthetic Key で実現していた階層分散を、宣言的・効率的に実装可能。 マルチテナント SaaS で『テナント単位の集計・ユーザー単位の操作・セッション単位の詳細』のような多階層クエリパターンに最適。新規プロジェクトでこの階層パターンに該当するなら Hierarchical Partition Key を採用するのが現代的なベストプラクティスです。

Cross-partition Query の対策

Cross-partition Query は全 Physical Partition に分散してクエリを実行 (Fan-out)、コスト数倍・レイテンシ大幅増。

対策

  1. 頻度高いユーザー向けクエリは In-partition に設計 (Partition Key を必須フィルタに)
  2. 低頻度な管理者ダッシュボードは Cross-partition でも許容
  3. Cross-partition 集計クエリは Synapse Link で別途実行 (Cosmos DB の負荷を回避)
  4. x-ms-request-charge ヘッダで実 RU を計測、想定外の Cross-partition を早期発見
  5. 必要に応じて Materialized View や Cosmos DB Change Feed で派生データセット作成

20 GB / 10,000 RU の制約

Cosmos DB の物理パーティションは 1 個あたり最大 20 GB データ・10,000 RU/s スループットの制約があります。

  • 論理パーティションが Hot Spot 化して 10,000 RU/s に達すると Throttling (429 エラー)
  • データが 20 GB に近づくと自動的に新規物理パーティションに分割 (Split)
  • 分割中もダウンタイムなし、ただしクエリの一時的パフォーマンス低下

Hot Partition 対策

  1. Partition Key 設計を見直して分散
  2. Synthetic Key で人工分散
  3. Read 中心なら追加 RU プロビジョニング (上限まで)
  4. Write 集中ならアプリ側でバッチ処理・キュー化
  5. Cosmos DB Insights で Partition 利用率を継続監視、80% 超で設計見直し

RU/s 課金モードの選定

モード料金適用シーン制約
Manual Provisioned固定 RU/s 月額定常負荷最低 400 RU/s
Autoscale Provisioned最大 RU/s × 1.5変動負荷 (30%+)10-100% で自動スケール
Serverless実消費のみ開発・低トラフィック5,000 RU/s 程度・1 TB データ

本番運用では Reserved Capacity (1-3 年契約) で 20-65% 割引可能、コスト最適化に活用すべきです。

運用監視のポイント

  1. Cosmos DB Insights: Throttled Requests・Storage Usage・Partition の利用率を継続監視
  2. x-ms-request-charge レスポンスヘッダ: 各クエリの実 RU 消費を Application Insights に送信
  3. Hot Partition アラート: 80% 利用率超で Slack / Teams 通知
  4. Cross-partition Query の検出: Diagnostic Logs で High RU クエリを定期分析
  5. Capacity Planning: 月次でデータ増加トレンドを確認、Partition 戦略の妥当性レビュー

関連認定試験

よくある質問

Partition Key とは何ですか?

Partition Key は Cosmos DB の Container (テーブル相当) 内のドキュメントを論理パーティションに分散させる JSON プロパティ。Cosmos DB は物理的に複数のパーティション (Physical Partition、最大 20 GB / 10,000 RU/s) に分散保存し、Partition Key の値ハッシュで物理パーティションが決定される。Partition Key の選定は Cosmos DB のパフォーマンス・スケーラビリティ・コストすべてに影響する最重要設計判断で、後から変更不可 (Container 再作成が必要)。良い Partition Key は: 1) 高カーディナリティ (値のバリエーション 1,000+ 推奨)、2) アクセスパターン分散 (Hot Partition 回避)、3) クエリで頻繁にフィルタされる (Cross-partition Query 回避)、4) 書き込み分散 (Throttling 回避)。

良い Partition Key の条件は?

4 つの条件すべてを満たすことが理想: 1) カーディナリティが高い (値のバリエーションが多い、最低 1,000 種類以上推奨)、2) アクセスパターンが分散される (Hot Partition を避ける、特定の少数値に集中しない)、3) クエリで頻繁にフィルタされる (Cross-partition Query を避ける、WHERE 句に含まれる)、4) 書き込みが分散される (Throttling を避ける、書き込み集中するキーは Hot Write Partition の原因)。例えばマルチテナント SaaS で tenantId を Partition Key にすると、特定大手テナント (10x のトラフィック) で Hot Partition 発生する場合、tenantId + bucketId のような合成キー (Synthetic Partition Key) が必要。設計初期で 4 条件を満たすキーが見つからない場合は、Hierarchical Partition Key (3 階層) や Synthetic Key の検討が必須です。

Synthetic Partition Key とは?

Synthetic Partition Key は、複数のプロパティを連結して人工的にカーディナリティを高める手法。例: tenantId_yyyymm (テナント ID + 年月) で月別パーティション、userId_random0-99 (ユーザー ID + ランダム 0-99) で 100 倍分散、deviceId_yyyymmdd (デバイス ID + 日付) で日別分散。書き込みパターン: 元プロパティから JavaScript で連結して新規プロパティとして保存し、それを Partition Key に指定。読み取りパターン: クエリでも合成キーを再構築してフィルタ。トレードオフ: 書き込みアプリケーションの修正が必要・特定キー範囲のクエリで Cross-partition になる可能性。マルチテナント SaaS で大手テナント・小規模テナントが混在する場合の Hot Partition 回避策として有効です。

Hierarchical Partition Key とは?

Hierarchical Partition Key は 2023 GA の機能で、最大 3 階層の Partition Key を指定可能。例: TenantId / UserId / SessionId の 3 階層を指定すると、(1) TenantId だけでフィルタすると全 User・Session 横断クエリ (Cross-partition だが範囲限定)、(2) TenantId + UserId でフィルタすると User の全 Session、(3) TenantId + UserId + SessionId で完全 In-partition クエリ。従来は Synthetic Key で実現していた階層分散を、宣言的・効率的に実装可能。マルチテナント SaaS で『テナント単位の集計・ユーザー単位の操作・セッション単位の詳細』のような多階層クエリパターンに最適。新規プロジェクトでこの階層パターンに該当するなら Hierarchical Partition Key を採用するのが現代的なベストプラクティスです。

Cross-partition Query は避けるべきですか?

コスト・レイテンシ観点で避けるべきですが、すべて避けるのは現実的でないため『頻度の高いクエリで避ける』が原則。Cross-partition Query は全 Physical Partition に分散してクエリを実行 (Fan-out)、コスト数倍・レイテンシ大幅増。一方、In-partition Query (WHERE 句に Partition Key 含む) は単一 Physical Partition のみで完結、低コスト・低レイテンシ。実装パターン: 頻度高いユーザー向けクエリは In-partition に設計 (Partition Key を必須フィルタにする)、低頻度な管理者ダッシュボードは Cross-partition でも許容、Cross-partition 集計クエリは Synapse Link で別途実行 (Cosmos DB の負荷を回避)。x-ms-request-charge レスポンスヘッダで実 RU を計測し、想定外の Cross-partition クエリを早期発見することが運用上重要です。

20 GB / 10,000 RU の制約とは?

Cosmos DB の物理パーティションは 1 個あたり最大 20 GB データ・10,000 RU/s スループットの制約があります。Partition Key の値で論理パーティションが決まり、複数論理パーティションが 1 物理パーティションにマップ。論理パーティションが Hot Spot 化して 10,000 RU/s に達すると Throttling (429 エラー) が発生。データが 20 GB に近づくと自動的に新規物理パーティションに分割 (Split)。Hot Partition 対策: 1) Partition Key 設計を見直して分散、2) Synthetic Key で人工分散、3) Read 中心なら追加 RU プロビジョニング (上限まで)、4) Write 集中ならアプリ側でバッチ処理・キュー化。本番運用では Cosmos DB Insights で Partition 利用率を継続監視し、80% 超えで設計見直しが必要です。

RU/s 課金モードはどう選びますか?

Cosmos DB の Throughput モード: 1) Manual Provisioned: 固定 RU/s 割り当て、最も予測可能なコスト、定常負荷向け。最低 400 RU/s から。2) Autoscale Provisioned: 最大 RU/s 指定 (例: 10,000)、10% (1,000) ~ 最大 (10,000) で自動スケール、変動負荷向け。月額は最大 RU の 1.5 倍上限。3) Serverless: 実消費のみ課金、開発・テスト・低トラフィック向け、Throughput 上限なし (5,000 RU/s 程度まで)、最大 1 TB データ。判断: 定常負荷 → Manual、変動 30%+ → Autoscale、低トラフィック・開発 → Serverless。本番運用では Reserved Capacity (1-3 年契約) で 20-65% 割引可能、コスト最適化に活用すべきです。

関連認定試験は?

DP-420 (Cosmos DB Developer Specialty) で Partition Key 設計が深く問われる、本領域の本命認定。AZ-204 (Developer Associate、2026-07 リタイア注意) のドメイン 2 (Storage 15-20%) で Cosmos DB SDK 経由の操作、AZ-305 (Solutions Architect Expert) のドメイン 2 でデータストレージ選定 (Cosmos DB の API 選定・Consistency Level)、DP-700 (Fabric Data Engineer) で Synapse Link 経由のリアルタイム分析統合、AI-103 (2026-06 GA) で Cosmos DB を生成 AI / RAG 基盤として活用するパターン。Cosmos DB は Azure の主力 NoSQL データベースで、すべての関連エンジニアにとって Partition Key 設計の理解は必須スキルです。

関連記事・技術深掘り

Azure AI エンジニア キャリアロードマップ|AI-901 → AI-103 → 生成 AI アーキテクトへの道【2026 年版】

Azure AI エンジニアになるための認定取得ロードマップ完全版。AI-901 (2026-06 GA、AI-900 後継) → AI-103 (2026-06 GA、AI-102 後継) の最新ルート、Azure AI Foundry / Agent Service / OpenAI 中心の生成 AI 時代の構成、Databricks GenAI / OpenAI Direct との二刀流戦略、年収レンジまで日本語で網羅。

DP-420 完全ガイド|Microsoft Cosmos DB Developer Specialty 出題範囲・学習リソース・合格戦略【2026 年版】

Microsoft Certified: Cosmos DB Developer Specialty (DP-420) の完全ガイド。5 ドメインの出題範囲、Cosmos DB for NoSQL の Partition Key 設計、Consistency Level、RU/s 最適化、Change Feed、Synapse Link 統合、3 ヶ月の合格ロードマップ、AZ-305 / AI-103 への展開ルートを日本語で網羅。

AI-103 完全ガイド|Developing AI Apps and Agents on Azure【2026 年 6 月 GA・AI-102 後継】

Microsoft Certified: Developing AI Apps and Agents on Azure (AI-103) の完全ガイド。AI-102 の後継として 2026 年 6 月 30 日 GA。Azure AI Foundry / Agent Service / OpenAI / AI Search を中心に、RAG パターン・Agent オーケストレーション・Responsible AI・Semantic Kernel SDK の実装スキル、3-4 ヶ月の合格ロードマップを日本語で網羅。

Azure データエンジニア キャリアロードマップ|DP-900 → DP-700 → AI-103 シニアデータエンジニアへの道【2026 年版】

Azure データエンジニアになるための認定取得ロードマップ完全版。DP-900 → DP-700 → DP-600 / DP-300 の Fabric 時代の王道ルート、Databricks 認定との二刀流、AI-103 統合戦略、DP-203 リタイア後の選択、12-18 ヶ月の学習プラン、年収レンジまで日本語で網羅。

本記事の技術情報は Azure Cosmos DB Partitioning Documentation に基づいています。 本記事は Microsoft Corporation の公式商品ではなく、いかなる提携・後援関係もありません。 Microsoft、Azure、Azure Cosmos DB は Microsoft group of companies の商標です。 情報は 2026 年 5 月 24 日時点の公式公開資料に基づきます。最新情報は必ず公式ページをご確認ください。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

Azure 試験対策ページを見る
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Azure

AZ-900 完全ガイド|Microsoft Azure Fundamentals 出題範囲・学習リソース・合格戦略

Microsoft Azure Fundamentals (AZ-900) の 2026 年 1 月 14 日改訂版に対...

Azure

Azure 認定資格ロードマップ 2026 完全版|全 26 試験の体系と大型再編 (AI-901/AI-103/SC-500)

Microsoft Azure 認定資格 全 26 試験 (現行 23 + 退役 3) の 2026 年版ロードマップ。...

Azure

AI-901 完全ガイド|Azure AI Fundamentals 新試験

Microsoft Certified: Azure AI Fundamentals (AI-901) の出題範囲・Mi...

Azure

Microsoft Entra ID 入門|旧 Azure AD から学ぶ ID 管理 (AZ-900/SC-900/AZ-104 必須知識)

Microsoft Entra ID (旧 Azure Active Directory) の入門解説。2023 年 7...

Azure

DP-900 完全ガイド|Azure Data Fundamentals 出題範囲・学習リソース・合格戦略

Microsoft Azure Data Fundamentals (DP-900) の完全ガイド。4 ドメインの出題範...

Azureの記事一覧 (103件)
© 2026 NicheeLab All rights reserved.