ある EC サイトが、ユーザーのショッピングカート情報(ユーザー ID、商品 ID、数量)を Azure Table Storage に保存している。このデータモデルにおいて「パーティションキー」として最も適切な値はどれか。
- A. 注文番号 — 注文単位でのクエリを効率化できる
- B. 商品 ID — 商品ごとにカートデータをまとめて管理できる
- C. タイムスタンプ — 時系列でデータを分散させてスループットを向上できる
- D. ユーザー ID — 同一ユーザーのカートアイテムを同一パーティションに集約できる
解答と解説を見る
正解: D
Azure Table Storage のパーティションキーは、関連するエンティティを同一パーティションにまとめるために使用される。ショッピングカートの場合、「あるユーザーのカート内全アイテムを取得する」クエリが最も頻繁に実行されるため、ユーザー ID をパーティションキーにすることで、そのクエリを効率的なパーティションスキャンで処理できる。選択肢 B の商品 ID をパーティションキーにすると、「ある商品を購入しているユーザー全員」を取得する場合には有利だが、EC サイトの主要クエリ(特定ユーザーのカート取得)には不向きである。選択肢 A の注文番号はカートの段階ではまだ存在しない情報であり、パーティションキーとして不適切である。選択肢 C のタイムスタンプをパーティションキーにすると、時刻順にパーティションが作成されてホットパーティション問題が発生しやすく、特定ユーザーのカート取得も非効率になる。