無限ノック › DVA 練習問題一覧 › 問題
DVAAWSのサービスを使用した開発

eコマースアプリケーションで購入フローを実装しています。購入処理では「在庫テーブルの数量を1減らす(在庫が1以上の場合のみ)」と「注文テーブルに注文レコードを新規作成する」の2つの操作が必要です。在庫が0の場合は両方の操作をキャンセルし、在庫がある場合は必ず両方の操作が成功しなければなりません。この要件を最も適切に実装するDynamoDBオペレーションはどれですか?

A
`BatchWriteItem` を使用して在庫テーブルの更新と注文テーブルへの書き込みを1回のAPIコールで実行し、部分的な失敗が発生した場合はアプリケーション側でロールバック処理を実装する
BatchWriteItemはトランザクションを保証しないAPIで、複数アイテムの書き込みの一部が失敗しても残りの書き込みは完了します。アトミック性が要件の購入フローでは在庫の不整合が発生するリスクがあり、要件を満たせません。
B
`TransactWriteItems` を使用し、ConditionExpression で在庫数量チェック(quantity > 0)を含む複数テーブルへの書き込みを単一のアトミックトランザクションとして実行する
✓ 正解
TransactWriteItemsはDynamoDBのACIDトランザクションAPIで、ConditionExpressionによる在庫チェックと複数テーブルへの書き込みを単一のアトミック操作として実行します。条件不成立の場合はトランザクション全体がロールバックされるため要件を満たします。
C
`UpdateItem` と `PutItem` を連続して実行し、DynamoDB Streams でいずれかの障害を検知した場合にLambdaから補償トランザクションを発行してデータ整合性を回復する
UpdateItemとPutItemの連続実行はアトミックではなく、操作間の障害でデータ不整合が発生します。DynamoDB Streams経由の補償トランザクションは非同期処理のため整合性回復に遅延が生じ、即時整合性を保証できません。
D
各テーブルにバージョン番号属性を追加して ConditionExpression で楽観的ロックを実装するが、複数テーブルをまたがるアトミック性の保証とロールバック処理はアプリケーション層で別途実装する
楽観的ロックは単一テーブル内での同時更新制御には有効ですが、複数テーブルにまたがるアトミック操作の保証はできません。アプリケーション層でのクロステーブル整合性管理は競合状態への対処が複雑になります。

解説

TransactWriteItemsはDynamoDBのACIDトランザクションAPIで、ConditionExpressionを含む複数テーブルへの書き込みをアトミックに実行します。在庫数量の条件チェックと在庫更新・注文作成を一括処理でき、条件不成立時はトランザクション全体がロールバックされます。 選択肢AのBatchWriteItemはトランザクションを保証せず、一部の書き込みが失敗しても他は完了するため在庫不整合のリスクがある。 選択肢CのUpdateItem/PutItem逐次実行は操作間の障害でデータ不整合が生じ、Streams経由の補償は非同期のため即時整合性を保証できない。 選択肢Dの楽観的ロックは複数テーブルにまたがるアトミック操作を保証せず、アプリ側の整合性管理は競合状態の対処が複雑になる。

ドメイン別正答率・予想スコアでリアルタイムに実力把握

無限ノックでDVAを徹底対策。全問AI生成のオリジナル問題。

無料で演習を始める →
← DVA の問題一覧に戻る