eコマースアプリケーションで購入フローを実装しています。購入処理では「在庫テーブルの数量を1減らす(在庫が1以上の場合のみ)」と「注文テーブルに注文レコードを新規作成する」の2つの操作が必要です。在庫が0の場合は両方の操作をキャンセルし、在庫がある場合は必ず両方の操作が成功しなければなりません。この要件を最も適切に実装するDynamoDBオペレーションはどれですか?
TransactWriteItemsはDynamoDBのACIDトランザクションAPIで、ConditionExpressionを含む複数テーブルへの書き込みをアトミックに実行します。在庫数量の条件チェックと在庫更新・注文作成を一括処理でき、条件不成立時はトランザクション全体がロールバックされます。 選択肢AのBatchWriteItemはトランザクションを保証せず、一部の書き込みが失敗しても他は完了するため在庫不整合のリスクがある。 選択肢CのUpdateItem/PutItem逐次実行は操作間の障害でデータ不整合が生じ、Streams経由の補償は非同期のため即時整合性を保証できない。 選択肢Dの楽観的ロックは複数テーブルにまたがるアトミック操作を保証せず、アプリ側の整合性管理は競合状態の対処が複雑になる。