Upgrade to Pro — share decks privately, control downloads, hide ads and more …

札幌IT石狩鍋_1.pdf

Nakagawa Shota
February 19, 2025
280

 札幌IT石狩鍋_1.pdf

Nakagawa Shota

February 19, 2025
Tweet

Transcript

  1. Amazon Aurora DSQL とは • PostgreSQL 互換の分散 SQL DB(いわゆる NewSQL)

    • インフラストラクチャの管理なし • 事実上無制限にスケール ◦ クエリ処理, コミット, ストレージの各層で独⽴してスケールする • マルチリージョンで Active/Active 可能で99.999%の⾼可⽤性 ◦ 単⼀リージョンも可能 • 楽観的同時実⾏制御を採⽤ • ユースケース ◦ 規模の⼤⼩関係なく様々なワークロードから使⽤可能 ◦ VPCを必要としないのでLambdaなどサーバレス利⽤と相性いい • 2025年2⽉17⽇時点でプレビュー • プレビュー期間中は無料で利⽤可能
  2. ケース1. 在庫管理システムで購⼊処理が競合 • 何が起きた? ◦ 購⼊者A, Bのトランザクションが同時に在庫データを読み取り、Bが先に UPDATEをコミットすることで在庫を0に更新 ◦ 購⼊者Aのトランザクションが更新を試みた際、⾃⾝が読み取った時点

    のデータが変更されていることを検知し、OCC例外が発⽣ • どうするべきか? ◦ 書き込みトランザクションは失敗する可能性がある前提に設計 ▪ リトライできるように ▪ 多い場合は間隔をランダムに(Exponential Backoff and Jitter) ▪ 最⼤クエリ時間を考慮したタイムアウトを実装 ◦ データモデリングを⾒直す ▪ 競合が起きやすい箇所(ホットスポット)を避ける設計 ▪ 例)購⼊記録を追加するDB、在庫管理は集計する
  3. ケース2:病院の当直管理でシフトのキャンセルが重なった FOR UPDATE FOR UPDATE • 医師A, Bが同時に当直医師数を確認し、異 なるシフトレコードを更新した結果、個々 の更新は成功するものの、意図せず最低必

    要⼈数を下回ってしまう状態となった(ラ イトスキュー)。 • 参照時点で関連データ全体をロック (SELECT FOR UPDATE)することで、2つ ⽬のトランザクションを早期に失敗させ、 意図しない更新を防ぐ。
  4. 参考URL • Amazon Aurora DSQL • Concurrency control in Amazon

    Aurora DSQL • Introducing Amazon Aurora DSQL • DSQL Vignette: Transactions and Durability • AWS re:Invent ふりかえり勉強会「クラスメソッド re:Growth 2024 東京」 で Aurora DSQL を話してきました! • Aurora DSQLの楽観同時実⾏制御を⼿を動かして学ぶ • Amazon Aurora DSQLの主キーで気をつけるべきこと • NewSQLなんも分からん⼈がゼロからAmazon Aurora DSQLを理解する(前 編) • NewSQLなんも分からん⼈がゼロからAmazon Aurora DSQLを理解する(後 編)