ある企業が、Amazon DynamoDB を使ったアプリケーションを運用している。特定のパーティションキーに対するリクエストが集中する「ホットパーティション」問題が発生し、スロットリングエラーが増加している。テーブルの設計変更は最小限に抑えながら、この問題を解決したい。最も適切なソリューションはどれか。
- A. DynamoDB テーブルの読み取り・書き込みキャパシティユニット(RCU/WCU)をオンデマンドモードに変更し、自動的にキャパシティを調整する。
- B. DynamoDB Accelerator(DAX)をクラスター構成でデプロイし、読み取りリクエストをキャッシュから応答させる。
- C. アプリケーション側でパーティションキーにランダムサフィックス(例:1〜10 のランダム数値)を付加する「書き込みシャーディング」を実装し、アイテムを複数のパーティションに分散させる。読み取り時は全サフィックスをクエリしてアグリゲーションする。
- D. DynamoDB Global Tables を有効化して複数リージョンにデータを分散させ、各リージョンでの負荷を軽減する。
解答と解説を見る
正解: A
ホットパーティション問題の根本原因は、特定のパーティションキーへのリクエスト集中にあり、根本解決はパーティションキー設計の見直し(書き込みシャーディング)である点に注意したい。実際、DynamoDB はオンデマンドモードであっても 1 パーティションあたり約 3,000 RCU・1,000 WCU という物理上限があり、単一キーへの極端な集中はオンデマンドでもスロットリングを起こしうる。ただし本問の制約は「テーブルの設計変更を最小限に抑える」ことであり、プロビジョニングのキャパシティ不足が一因のケースでは、オンデマンドモードへの切り替えがコード・スキーマ変更なしにアダプティブキャパシティを最大限活かせる最も現実的な選択肢となる。よってこの制約下では選択肢Aが最適となる。選択肢Cの書き込みシャーディングは根本的かつ恒久的な解決策だが、サフィックス付加と読み取り時のアグリゲーションが必要でアプリケーション側の変更が大きく、「最小限の設計変更」という制約に反する。選択肢DのGlobal Tables はリージョン間の冗長化・低レイテンシーアクセスのためのもので、同一リージョン内のホットパーティションは解決しない。選択肢BのDAX は読み取りキャッシュとして有効だが、書き込みのホットパーティションには対処できない。
📚 関連サービスの解説: Amazon DynamoDB