あるゲーム会社がグローバルなオンラインゲームのバックエンドを AWS に構築しています。ゲームのセッションデータ(プレイヤーの位置、スコア、ゲーム状態)はミリ秒単位で更新され、同じゲームルームの全プレイヤー間でリアルタイムに同期する必要があります。1 ゲームルームあたり最大 100 プレイヤー、同時進行するゲームルーム数は最大 10 万室です。最もこの要件に適したデータベース設計はどれですか?
- A. Amazon DocumentDB でゲームセッションを JSON ドキュメントとして管理し、Change Streams でリアルタイム同期を実現する
- B. Amazon ElastiCache for Redis をゲームセッション状態の主データストアとして使用し、Redis Pub/Sub でルームメンバーへのリアルタイム更新配信を実現する。ゲーム終了後に最終スコアを DynamoDB に永続化する
- C. Amazon DynamoDB でゲームセッションデータを管理し、DynamoDB Streams で変更を検知して Lambda でプレイヤーに通知する
- D. Amazon RDS Aurora Multi-AZ でゲームセッションデータを管理し、ElastiCache Redis クラスターで最新状態をキャッシュする
解答と解説を見る
正解: B
ElastiCache Redis はインメモリデータストアとしてミリ秒以下のレイテンシーを提供し、10 万ルームの 100 万プレイヤーのリアルタイム状態更新に対応できます。Redis Pub/Sub でルームチャネルに参加するプレイヤーに即座にゲーム状態変更を配信できます。ゲームが一時的なデータであるためインメモリストアが適切で、ゲーム終了後のみ DynamoDB に永続化することでコストも最適化できます。 D: Aurora Multi-AZ + ElastiCache は機能しますが、Aurora への書き込みはミリ秒以下のゲームセッション更新には不要なオーバーヘッドです。Redis が主データストアである方が設計がシンプルです。 C: DynamoDB Streams + Lambda はミリ秒単位のリアルタイム同期には遅延が大きくなる可能性があります。Lambda のオーバーヘッドとコールドスタートがゲームの応答性に影響します。 A: DocumentDB は MongoDB API 互換のドキュメントデータベースで、ミリ秒単位の高頻度更新とリアルタイム Pub/Sub 配信には ElastiCache Redis の方が適しています。
📚 関連サービスの解説: Amazon ElastiCache ・ Amazon DynamoDB