ステップ 5: DynamoDB のデータモデルを作成する - AWS 規範ガイダンス

ステップ 5: DynamoDB のデータモデルを作成する

ベーステーブルとグローバルセカンダリインデックス (GSI) のパーティションキーを定義します。

  • 主要な設計上のベストプラクティスに従い、この例ではベーステーブルのパーティションキーとして ComponentId を使用してください。一意の ID であるため、ComponentId できめ細かく定義を実現できます。DynamoDB は、パーティションキーのハッシュ値を使用して、データが物理的に保存されるパーティションを決定します。一意のコンポーネント ID を使用することで、異なるハッシュ値が生成されるため、テーブル内でデータの分散が容易になります。ComponentId パーティションキーを使用して、ベーステーブルにクエリを実行できます。

  • コンポーネントの直接の子を検索するには、ParentId がパーティションキーで、ComponentId がソートキーである GSI を作成します。ParentId をパーティションキーとして使用することで、この GSI のクエリを実行できます。

  • コンポーネントの再帰的な子をすべて検索するには、GraphId がパーティションキーで、Path がソートキーの GSI を作成します。この GSI に対してクエリを実行するには、パーティションキーの GraphId とソートキーの BEGINS_WITH(Path, "$path") 演算子を使用することで実行できます。

パーティションキー

ソートキー

マッピング属性

ベーステーブル

ComponentId

ParentId, GraphId, Path

GSI1

ParentId

ComponentId

GSI2

GraphId

Path

ComponentId

コンポーネントをテーブルに格納

次に、DynamoDB ベーステーブルに各コンポーネントを格納します。サンプルツリーからすべてのコンポーネントを挿入すると、次のベーステーブルが作成されます。

ComponentId

ParentId

GraphId

パス

 

CM1

 

CM1#1

 

CM1

 

CM2

 

CM1

 

CM1#1

 

CM1|CM2

 

CM3

 

CM1

 

CM1#1

 

CM1|CM3

 

CM4

 

CM2

 

CM1#1

 

CM1|CM2|CM4

 

CM5

 

CM2

 

CM1#1

 

CM1|CM2|CM5

 

CM6

 

CM3

 

CM1#1

 

CM1|CM3|CM6

 

CM7

 

CM3

 

CM1#1

 

CM1|CM3|CM7

 

CM8

 

CM4

 

CM1#1

 

CM1|CM2|CM4|CM8

 

CM9

 

CM4

 

CM1#1

 

CM1|CM2|CM4|CM9

 

CM10

 

CM5

 

CM1#1

 

CM1|CM2|CM5|CM10

GSI1 インデックス

コンポーネントの直接の子をすべてチェックするには、パーティションキーとして ParentId を使用、ソートキーとして ComponentId を使用してインデックスを作成します。次のピボットテーブルは、GSI1 インデックスを表しています。このインデックスを使用すれば、親コンポーネント ID を使って、直接の子コンポーネントをすべて取得できます。例えば、自動車に搭載されているバッテリーの数 (CM1) や、モジュールに搭載されているセル (CM4) を調べることができます。

ParentId

ComponentId

CM1

CM2

CM3

CM2

CM4

CM5

CM3

CM6

CM7

CM4

CM8

CM9

CM5

CM10

GSI2 インデックス

次のピボットテーブルは、GSI2 インデックスを表しています。パーティションキーとして GraphId を使用、ソートキーとして Path を使用して構成されています。GraphI とソートキー (Path) の begins_with 演算子を使うと、コンポーネントの全系統をツリーで見ることができます。

GraphId

パス

ComponentId

CM1#1

CM1

CM1|CM2

CM1|CM3

CM1|CM2|CM4

CM1|CM2|CM5

CM1|CM2|CM4|CM8

CM1|CM2|CM4|CM9

CM1|CM2|CM5|CM10

CM1|CM3|CM6

CM1|CM3|CM7

CM1

CM2

CM3

CM4

CM5

CM8

CM9

CM10

CM6

CM7