AWS認定資格 WEB問題集&徹底解説
デベロッパー–アソシエイト
合格に向けて、もっと深く学習する
豊富な問題と詳細なAWSサービス解説を、24時間無料でお試しいただけます
問題文と選択肢
あるオンラインゲーム会社では、Amazon DynamoDB を使用してプレイヤーのリアルタイムスコアを管理しています。複数のゲームサーバーが同時に同じプレイヤーのスコアアイテムを更新する可能性があり、アプリケーションは常に最新の確定済みスコアを読み取る必要があります。この要件を満たすために最も適切な操作はどれですか?
- GetItem 操作において ConsistentRead = false を指定して読み取りを行う
- GetItem 操作において ConsistentRead = true を指定して強整合性読み取りを行う
- UpdateItem 操作において ConsistentRead = true を指定して書き込みを行う
- PutItem 操作において ConsistentRead = true を指定して書き込みを行う
解説
頻出度★★★★★
この問題は、「常に最新の確定済みデータを読む」という要件で、読み取り操作(GetItem)に ConsistentRead = true を指定する=強整合性読み取りを選べるかがポイント
A. GetItem 操作において ConsistentRead = false を指定して読み取りを行う
ConsistentRead = false は結果整合性読み取り(Eventually Consistent Read)で、DynamoDB のデフォルト動作。
直前の書き込みがすべてのレプリカに伝播する前に読むと古い値が返る可能性があるため、「常に最新の確定済みスコアを読む」という要件を満たさない。RCU が半分で済む代わりに鮮度を犠牲にする設定。
正解
B. GetItem 操作において ConsistentRead = true を指定して強整合性読み取りを行う
GetItem に ConsistentRead = true を指定すると強整合性読み取り(Strongly Consistent Read)となり、その読み取り以前に成功したすべての書き込みを反映した結果が返る。
複数のゲームサーバーが同じアイテムを同時更新する状況でも、常に確定済みの最新スコアを取得できるため要件を満たす。読み取りコストは結果整合性の 2 倍(1 項目 4KB あたり 1 RCU)になる点も併せて押さえておく。
C. UpdateItem 操作において ConsistentRead = true を指定して書き込みを行う
UpdateItem は書き込み操作であり、ConsistentRead パラメータは存在しない。API の仕様として成立しない選択肢。
なお DynamoDB の書き込みはそもそも強整合であり、同時更新の競合を制御したい場合は 条件式(条件付き書き込み)や UpdateExpression の ADD による原子的カウンタを使う。
D. PutItem 操作において ConsistentRead = true を指定して書き込みを行う
PutItem も書き込み操作で、ConsistentRead パラメータは受け付けない。
加えて PutItem はアイテム全体を上書きするため、複数サーバーが同時にスコアを更新する場面では他サーバーの更新を消してしまうリスクもある。読み取りの整合性を求める本問の要件とは無関係。
これだけ覚える(記憶フック)
ConsistentRead は「読み取り」専用のパラメータ。最新値が要るなら GetItem に true。書き込み(Put/Update)には存在しない。
ConsistentRead は「読み取り」専用のパラメータ。最新値が要るなら GetItem に true。書き込み(Put/Update)には存在しない。
正解への思考ルート
問題文から要件を抽出し、選択肢の適否を判断するのがポイントです。| 要件 | 判断ポイント |
|---|---|
| 常に最新の「確定済み」スコアを読み取る必要がある | 強整合性読み取り=読み取り時点までの全書き込みを反映。デフォルトの結果整合性では古い値が返り得る →選択肢(A)を消す |
| ConsistentRead を指定できる API はどれか | GetItem・Query・Scan など読み取り操作のみ。書き込み API には存在しないパラメータ →選択肢(C・D)を消す |
| 複数サーバーが同じアイテムを同時更新する | 読み取りの鮮度は ConsistentRead = true で担保。読み取りコストは結果整合性の 2 倍 →選択肢(B)が正解 |
| 求められているのは「読み取り」の操作 | PutItem / UpdateItem は書き込み。設問の要件(読み取りの整合性)に対する答えにならない →選択肢(C・D)を消す |
ひっかけポイント
- 選択肢 C・D は「ConsistentRead = true」という正しそうな文字列が入っているだけで、書き込み API には存在しないパラメータ。API とパラメータの組み合わせを見る
- DynamoDB のデフォルトは結果整合性読み取り。「何もしなければ最新が読める」と思い込まないこと
- 強整合性読み取りはグローバルセカンダリインデックス(GSI)では使えない(LSI は可)。「GSI から最新を読む」という選択肢が出たら誤り
- 強整合性読み取りは RCU を 2 倍消費し、レイテンシも上がる。コスト最適化を問う問題では逆に結果整合性が正解になる
出題バリエーション
同じ知識が本番では条件を変えて出題されます。| 問題文がこう変わったら | 正解はこう変わる |
|---|---|
| 「多少古いデータでも構わないので読み取りコストを下げたい」 | 結果整合性読み取り(ConsistentRead = false)が正解に。RCU は半分。 |
| 「同時更新による上書き(ロストアップデート)を防ぎたい」 | 条件付き書き込み(ConditionExpression)+楽観的ロック(バージョン番号)が正解軸に。 |
| 「スコアの加算をアトミックに行いたい」 | UpdateItem の ADD / SET x = x + :v(アトミックカウンタ)が正解軸に。 |
| 「読み取りが極端に多く、ミリ秒未満の応答が必要」 | DynamoDB Accelerator(DAX)が正解軸に(ただし DAX 経由は結果整合性)。 |
+ 質問 / コメント
解答・解説に疑問がある場合や、よりよい解説がある場合など、お気軽にコメントください。ただし、短文コメントは表示されません。また、中傷などコメントの内容によっては、会員機能を停止させて頂きます。教え学び合える場になれば嬉しいです。(コメント投稿にはログインが必要です)
正答率 79%
No.15 解説
あるオンラインゲーム会社では、Amazon DynamoDB を使用してプレイヤーのリアルタイムスコアを管理しています。複数のゲームサーバーが同時に同じプレイヤーのスコアアイテムを更新する可能性があり、アプリケーションは常に最新の確定済みスコアを読み取る必要があります。この要件を満たすために最も適切な操作はどれですか?
- GetItem 操作において ConsistentRead = false を指定して読み取りを行う
- GetItem 操作において ConsistentRead = true を指定して強整合性読み取りを行う
- UpdateItem 操作において ConsistentRead = true を指定して書き込みを行う
- PutItem 操作において ConsistentRead = true を指定して書き込みを行う