DVA-C02開発MEDIUM単一選択

あるオンラインゲーム企業が、プレイヤーランキングをDynamoDBで管理している。パーティションキーはgameIdで、ソートキーはscoreDescending(スコア降順連番)である。毎分数十万件のスコア更新が発生し、特定のgameIdへの書き込みが集中してスロットリングエラーが頻発している。最もコスト効率よくスロットリングを解消する方法はどれか。

  1. A. DynamoDBのプロビジョンドキャパシティを10倍に増やし、Auto Scalingを有効にする
  2. B. テーブルをDynamoDB Global Tablesに変換し、複数リージョンに書き込みを分散させる
  3. C. DynamoDB Accelerator(DAX)を導入してキャッシュ層を追加し、読み取り負荷を軽減する
  4. D. パーティションキーをgameId#シャードID(0〜9のランダムサフィックス)に変更し、書き込みを10シャードに分散させる(シャードアグリゲーションはクエリ時にアプリで実行)
解答と解説を見る

正解: D

DynamoDBのスロットリングはホットパーティション問題であり、単一のパーティションキー値に書き込みが集中することで発生する。シャーディング(パーティションキーにランダムサフィックスを付加して複数パーティションに分散)が根本的な解決策である。スコアのTOP10取得時はgameId#0〜gameId#9のすべてのシャードをクエリして結果をマージする追加コードが必要だが、スロットリング解消の効果が最も高い。Aのキャパシティ増加は読み書き両方に課金され、ホットパーティション問題(1つのパーティションが1000RCU/WCU以上消費できない制約)は解決しないため根本対策にならない。CのDAXは読み取りキャッシュであり、書き込みスロットリングには効果がない。BのGlobal Tablesはマルチリージョンのディザスタリカバリ用途であり、同一gameIdへの書き込み集中を分散させる機能ではなく、コストも大幅に増加する。

▸ この試験を本気で演習する(全150問・無料)