Amazon DynamoDB のテーブル設計パターン - シングルテーブル設計と GSI の活用
DynamoDB のパーティションキー設計、シングルテーブルデザイン、GSI によるアクセスパターンの実現を解説します。
DynamoDB の概要
DynamoDB はミリ秒レベルのレイテンシを提供するフルマネージド NoSQL データベースです。RDS と異なりスキーマレスで、パーティションキーとソートキーの組み合わせでデータにアクセスします。サーバーレスアーキテクチャの標準的なデータストアとして、Lambda や API Gateway と組み合わせて使用されます。オンデマンドとプロビジョンドの 2 つのキャパシティモードを提供します。
テーブル設計
パーティションキーはデータの分散に直結するため、カーディナリティの高い属性 (ユーザー ID、注文 ID) を選択します。シングルテーブルデザインでは PK に「USER#123」「ORDER#456」のようなプレフィックスを付与し、SK でエンティティの種類とリレーションを表現します。Query で PK を指定すると、ユーザー情報と注文履歴を 1 回のクエリで取得できます。GSI は異なるアクセスパターン (メールアドレスでユーザーを検索、日付範囲で注文を検索) に対応し、テーブルあたり最大 20 個作成できます。
GSI と単一テーブル設計
グローバルセカンダリインデックス (GSI) はメインテーブルとは異なるパーティションキーとソートキーでクエリを実行します。単一テーブル設計では、複数のエンティティ (ユーザー、注文、商品) を 1 つのテーブルに格納し、 GSI のオーバーロードで多様なアクセスパターンに対応します。 PK に 'USER#123'、 SK に 'ORDER#456' のようなプレフィックスを付与し、 begins_with 条件でエンティティを絞り込みます。スパースインデックスは特定の属性を持つアイテムのみをインデックスに含め、インデックスのサイズとコストを削減します。 NoSQL の設計パターンを深く理解するには、専門書籍 (Amazon)が役立ちます。
DynamoDB の料金最適化
DynamoDB のオンデマンドモードは読み取り (1 RRU あたり約 0.25 ドル/100 万) と書き込み (1 WRU あたり約 1.25 ドル/100 万) の従量課金です。プロビジョンドモードは WCU/RCU の時間課金で、安定したワークロードでは Auto Scaling と組み合わせてコスト効率が向上します。リザーブドキャパシティで最大 77% の割引が適用されます。GSI は独自のキャパシティを消費するため、不要な GSI を削除し、プロジェクション属性を最小限にしてストレージコストを削減します。TTL で期限切れデータを自動削除し、ストレージコストを抑えます。
まとめ
DynamoDB はパーティションキーとソートキーの設計でミリ秒単位のレイテンシを実現する NoSQL データベースです。GSI のオーバーロードと単一テーブル設計で多様なアクセスパターンに対応し、スパースインデックスでインデックスコストを最適化します。オンデマンドとプロビジョンドモードの使い分けと TTL によるデータ自動削除で、コストを効率的に管理します。