Share
Embed
Transcript
14 slides
-
プロフィール 公私ともシステム開発にはDynamoDBを多用 最近はバックエンド(FastAPI)らへんが中心 実家は米農家。今年は3.5㌧収穫しました 採用活動もやってますので是非お声掛けください 証券系→銀行系 と 金融×IT なキャリアを歩んでいます (証券外務員一種)
米澤 拓也 Software Engineer Community Builder (Serverless) 2023~ Technology & Development Div. and Corporate Culture室 takuya_y0ne © 2026 Japan Digital Design, Inc. 2 -
私とDynamoDB 金融機関向けRAGシステムで 27のDynamoDBテーブル/環境 を運用中 (ステータス保存, マスタ管理, 履歴保存, ジョブキューなど用途は様々) © 2026
Japan Digital Design, Inc. 3 -
DynamoDBとは 1 めっちゃメンテナンスフリーな NoSQL AWSが提供するキーバリュー/ ドキュメント型のデータベース。 フルマネージド サーバー構築やパッチ適用、スケーリングはAWSにお任せ、 利用者はテーブルの設計に集中できる。 2
サーバーレス インスタンスの管理が不要。使った分だけ支払うオンデマンド課金も選べる。 私はオンデマンド派 3 高速で高可用 規模によらず1桁ミリ秒の応答を目指す設計。 データは複数AZに自動で冗長化される。Global Tableも。 4 DB管理コストが低い DBのバージョンアップ計画? そんなものはここ数年書いた記憶がありません RDBのようにDB内ユーザー権限や認証情報も管理する必要なし。 © 2026 Japan Digital Design, Inc. 4 -
RDBとの違い DynamoDBはJOINを前提とせず、アクセスパターンから逆算 観点 RDB DynamoDB 設計原則 データの正規化 アクセスパターン スキーマ テーブル作成時に固定
主キー以外は自由 なし。 結合(JOIN) SQLで柔軟に実行できる スケール 主に垂直(性能の引き上げ) 水平に自動で分散 運用 インスタンスの管理が必要 サーバー管理は不要 非正規化で対応する © 2026 Japan Digital Design, Inc. 5 -
キー設計の流れ アクセスパターン データをどの条件で 読み書きするかを整理 → キー設計 パーティションキー/ソートキー を決め均等に分散させる → インデックス追加
主キーで足りない検索を GSIやLSIで補う RDBと逆で、クエリパターン決めてからテーブルを設計する パーティションキーのハッシュ値でデータの保存先が決まるため、キー選びが性能と分散を左右する。 このへんの話はAWS Dev Day 2023の動画を見るのがおすすめ。 [GT-2] イラストで学ぶAmazon DynamoDB ~テーブル設計からパフォーマンスチューニングまで~ © 2026 Japan Digital Design, Inc. 6 -
読み取りの基本操作 覚えておく操作は3つ GetItem 1件取得 主キーを完全に指定して、1件だけを最短で取得する。最も軽い操作。 キーを指定する操作が基本。 全件走査は最後の手段にする。 なんやかんやScanでも捌けてしまうため、 意図しないScan実行に気づかないことも。 思い切ってSCPでScan禁止にするのもアリ。
これでデータ取れるのが一番良い。 Query 範囲取得 パーティションキーを指定し、ソートキーの条件で絞り込む。 関連データをまとめて読む用途に向く。 Scan 全件走査 テーブル全体を読み、後から条件で絞る。 データが増えるほど遅く高価になるため多用は避ける。 © 2026 Japan Digital Design, Inc. 7 -
ORMマッパー ORMマッパーの活用でDynamoDBをより扱いやすく PynamoDB(Python)とDynamoose(Node.js)なら、キーと属性を宣言的に書いて、読み書きまで一気通貫で実装できる。 両者ともデータ整合性検証が走るため、意図せぬプロパティを持ったデータのRead/Writeを食い止めることができる。 ライブラリの抽象化により、DB周りのロジックもシンプルに。 PynamoDB Dynamoose モデルクラスでキー、属性、GSIを宣言して読み書きできる Mongooseに近い書き味のスキーマ定義で、 読み書きを記述できる
© 2026 Japan Digital Design, Inc. 9 -
口に出して言いたい Sparse Indexs パターン(訳: まばらなインデックス) 「インデックスに指定したキー属性を持たないアイテムはインデックスに反映されない」という特性を応用する。 インデックス自体のデータ量が減るため、読み込み/書き込みコストが下がる。 ベーステーブル(全タスク) Sparse Index
userId(PK)と completedAt(SK) completedAt をソートキーに指定 プレゼン資料作成 プレゼン資料作成 completedAt あり → メール返信 completedAt なし AWS本を読む completedAt あり 「メール返信」は載らない AWS本を読む Case. 未完了のタスクのみを抽出したい © 2026 Japan Digital Design, Inc. 10 -
DynamoDB Streams と TTL 変更を記録するStreams、不要データを消すTTL RDBだとCDCやレコード定期削除、組むのは面倒ですよね。 え? ストアドプロシージャでできる? ようこそ沼へ。 Streams
TTL 項目の変更履歴を時系列で取得 期限切れ項目を自動で削除 INSERT / MODIFY / REMOVEを項目単位で記録 エポック秒の属性を指定し、期限後に自動削除 保持期間は24時間 書き込みキャパシティを消費せず無料 Lambda連携で変更をトリガーに処理 削除は期限後数日以内。それまでは読み取れる Case. レコード変更の監査ログ記録として利用 Case. データの無限増加によるパフォーマンス低下を防止 © 2026 Japan Digital Design, Inc. 11 -
安い!早い!最高!! とにかく安い! アラートもほぼ鳴らない! 27テーブル運用しているPrd環境のDynamoDBコスト。脅威のAve. $3 Aurora PostgreSQL Serverless(0.5ACU待機)も併用しているが、そっちは Ave. $120
© 2026 Japan Digital Design, Inc. 12 -
宣伝 今年もラスベガス現地でやります! 12/2(水) 21:00~ @ Venetian 既に満員ですが、参加希望の方はお声掛けください。がんばります © 2026 Japan
Digital Design, Inc. 13