書き込みと運用

DynamoDB が SQL のユニークインデックスのように一意性を強制すると想定し、 条件式なしでデプロイし、本番で重複アカウントを発見する。属性横断の制約はない — 自分で設計するアトミックな書き込みだけだ。

書き込みはアイテム単位で、硬い上限付きでバッチされ、ホットなパーティションキー 横断で増幅しやすい。ALTER TABLE がないので移行はアプリケーションレベルだ。 このセクションはバッチ API、戻り値、カウンター、一意性パターン、オンラインの 形変え、そして 1 つのパーティションキーがトラフィックを吸いすぎるときの運用の 傷跡を扱う。

読み終えたらできること

  • 25 アイテム/16 MB の上限内で BatchWriteItem とバッチ削除を、黙った部分失敗なしに 使える。
  • 条件付き書き込みでアトミックカウンターと複数属性の一意性を実装できる。
  • デュアルライトまたはバックフィルパターンでゼロダウンタイム移行を計画できる。
  • スロットリングの前に、書き込み分布とキー選択からホットパーティションを見つけられる。

読む順番

  1. バッチ操作BatchWriteItem の上限、 未処理キー、バッチがトランザクションではない理由。
  2. 複数アイテムの削除 — ツールでの バッチ削除対ステージ済み削除。削除アイテムあたりのキャパシティ。
  3. ReturnValuesALL_OLDUPDATED_NEW、 2 回目の読み取りなしで何が返るか。
  4. アトミックカウンターADD 更新と、 なぜ読み取り・変更・書き込みが並行下で負けるか。
  5. 複数属性の一意性 — 一意性 アイテムと重複を拒否する条件付き put。
  6. 移行 — トラフィックが生きているあいだに キーと GSI を形変える。スキーマ移行ボタンはない。
  7. ホットパーティション — 偏ったキー、 書き込みスパイク、設計上の修正。
8 件中 0 件読了クイズ
DynamoDBのバッチ操作
DynamoDB のバッチ操作 — BatchGetItem は 1 回で 100 件を読み、BatchWriteItem は 25 件を書く。バッチがトランザクションでない理由と、未処理分の再試行。
中級読了 7 分
DynamoDBで複数のアイテムを削除する方法
DynamoDBで複数のアイテムを削除する方法 — BatchWriteItem、TransactWriteItems、PartiQLバッチ、TTL — そしてDELETE ... WHERE文が存在しない理由。
初級読了 7 分
DynamoDBのReturnValues:古いまたは新しいアイテムを取得する
DynamoDBのReturnValuesは、PutItem、UpdateItem、DeleteItemから2回目の読み取りなしで古いまたは新しいアイテムを返す — 5つの選択肢と、それぞれが役立つ場面。
中級読了 5 分
DynamoDB のアトミックカウンター:ADD の仕組みと限界
DynamoDBのアトミックカウンターがADD更新式でどう動くか、なぜ冪等でないのか、そしていつ代わりに条件付き更新に手を伸ばすべきか。
中級読了 5 分
DynamoDB で複数の属性に一意性を課す
DynamoDB で複数の属性に一意制約を課す方法 — メール AND ユーザー名の一意性を、マーカー項目と条件付きの TransactWriteItems で保証する。
上級読了 6 分
ダウンタイムなしの DynamoDB 移行
ダウンタイムなしの DynamoDB 移行 — 遅延バックフィル、オンライン GSI、デュアルライトで、稼働中のテーブルへ新しいエンティティ型とアクセスパターンを追加する方法。
上級読了 5 分
DynamoDB のホットパーティション:見つけ方と直し方
DynamoDB のホットパーティションとは、1 つのパーティションキーが偏ったトラフィックを吸収してスロットルすること。見つけ方と、設計での回避方法を解説します。
中級読了 9 分
理解度チェッククイズに挑戦
このセクションで学んだ内容を確認しましょう。

TransactWriteItems は最大 10 アイテムにまたがる最大 25 アクションを受け付け、 トランザクションペイロード上限は 4 MB。キャンセル理由には ConditionalCheckFailedTransactionConflictTransactionInProgress があり — それぞれ別のリトライ戦略に対応する。BatchWriteItem も 25 アイテム上限だが、 失敗時に兄弟をロールバックしない — アプリコードで UnprocessedItems を扱う。

ReturnValues は後続の GetItem なしに compare-and-swap を実装できる。アトミック カウンターは数値属性への ADD を使う。属性横断の一意性は通常、一意値ごとの 別「ロック」アイテムと、本行への条件付き put が要る。ホットな USER#popular パーティション上でソートキーを書き換える移行は、そのキーの物理パーティションを 共有するすべてのユーザーの書き込みをスロットルしうる — レート制限付きで バックフィルをスケジュールし、カットオーバー前にテーブルの概要で偏りを見る。

Workbench の手順

有料トライアル付きで DynoTable をダウンロードし、書き込みを ステージする。アイテムを編集し、diff を見直し、コミット — put/update/delete の デフォルト経路。⌘⇧⌫ 経由のバッチ削除は直接コミットし、⌘⌫ は先にステージする。 PartiQL INSERT/UPDATE/DELETE は警告トースト付きで即実行するので、PartiQL DML は 直接書き込みパスとして扱う。

テーブルの概要はテーブルごとのアイテム数とサイズ見積もりを示し、移行前に成長が 見える。料金計算機 は、デュアルライト中に 移行が書き込みトラフィックを倍にするときの書き込み増幅をモデル化する。

無料の読み取り専用プランはクエリとエクスポートをカバーする。ステージングと コミットには有効なライセンスまたはトライアルが必要。