翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ステップ 5: DynamoDB データモデルを作成する
ベーステーブルとグローバルセカンダリインデックス (GSIsのパーティションキーを定義します。
-
キー設計のベストプラクティスに従って、この例のベーステーブルのパーティションキー
ComponentId
として を使用します。一意であるため、 は詳細度を提供ComponentId
できます。DynamoDB は、パーティションキーのハッシュ値を使用して、データが物理的に保存されるパーティションを決定します。一意のコンポーネント ID を使用することで、異なるハッシュ値が生成されるため、テーブル内でデータの分散が容易になります。ComponentId
パーティションキーを使用してベーステーブルにクエリを実行できます。 -
コンポーネントの直接の子を検索するには、 がパーティションキー、
ParentId
がソートキーである GSIComponentId
を作成します。パーティションキーParentId
として を使用することで、この GSI にクエリを実行できます。 -
コンポーネントの再帰的な子をすべて検索するには、
GraphId
がパーティションキーで、Path
がソートキーの GSI を作成します。この GSI に対してクエリを実行するには、パーティションキーのGraphId
とソートキーのBEGINS_WITH(Path, "$path")
演算子を使用することで実行できます。
パーティションキー |
ソートキー |
マッピング属性 |
|
ベーステーブル |
|
|
|
GSI1 |
|
|
|
GSI2 |
|
|
|
コンポーネントをテーブルに格納
次に、DynamoDB ベーステーブルに各コンポーネントを格納します。サンプルツリーからすべてのコンポーネントを挿入すると、次のベーステーブルが表示されます。
ComponentId |
ParentId |
GraphId |
[Path] (パス) |
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
d とソートキー (Path
) の begins_with
オペレーションを使用すると、コンポーネントの完全な系統をツリーで確認できます。
GraphId |
[Path] (パス) |
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 |