データモデリング

ここが DynamoDB と SQL が最も大きく分かれる部分です。エンティティごとに 1 テーブルへ正規化するのではなく、アクセスパターンから出発し、それに応えるキーを設計します。多くの場合、すべてのエンティティを 1 つのテーブルに詰め込みます。正しくやれば、親とその子を 1 回の Query で取得でき、JOIN は不要です。

間違えると、Query できないテーブルと、実行できないマイグレーションができあがります。だからトレードオフが重要であり、このセクションではシングルテーブル設計が誤った選択になるケースを正直に扱います。

7 件中 0 件読了クイズ
DynamoDB のシングルテーブル設計
DynamoDB のシングルテーブル設計は、オーバーロードしたキープレフィックスの下にすべてのエンティティを 1 つのテーブルへ格納し、親と子を 1 回の Query で返します。
中級読了 4 分
DynamoDB でデータをモデル化する方法
DynamoDB でアクセスパターンファーストにデータをモデル化する方法。4 つの問いをパーティションキー、ソートキー、GSI に落とし込む、ゲームのリーダーボードの解説。
中級読了 8 分
DynamoDB でシングルテーブル設計を使うべきでないとき
DynamoDB でシングルテーブル設計を使うべきでないとき — 重い分析、無関係なエンティティに対する単純な CRUD、そして独立してスケールしたり障害したりするエンティティ。
中級読了 6 分
DynamoDB の Type 属性
DynamoDB の Type 属性 — すべての項目にエンティティ型を刻み込むことで、行を識別し、GSI を 1 つのエンティティに絞り込み、将来のマイグレーションを乗り切る理由。
中級読了 7 分
DynamoDB の非正規化
DynamoDB の非正規化 — 結合する代わりにデータを複製する理由を、ブログの著者名の例、古びる(staleness)という地雷、そして埋め込みか複製かの使い分けとともに解説。
中級読了 6 分
DynamoDB のシングルトンアイテム
DynamoDB のシングルトンアイテム — 機能フラグや設定のようなグローバルな状態を保持する固定キーの 1 行を、GetItem で読み、条件式で更新する。
中級読了 8 分
理解度チェッククイズに挑戦
このセクションで学んだ内容を確認しましょう。

シングルテーブル設計から始めてください。その後のすべてはこのメンタルモデルを前提とします。

構築する前に、無料のシングルテーブル設計ツールでスキーマの下書きをしましょう — アクセスパターンのリストを PK/SK/GSI プランに変換してくれます。それから DynoTable を試すと、これらのレイアウトをライブのテーブルに対してモデリングし、ブラウズできます — キーが応えられないアドホックな問いには、その SQL WorkbenchJOINGROUP BY、集計をクライアントサイドで実行します。