翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ステップ 6: データクエリを作成する
アクセスパターンを定義し、データモデルを設計したら、DynamoDB データベース内の階層データをクエリできます。コストを節約し、パフォーマンスを確保するためのベストプラクティスとして、次の例では、 を使用しないクエリオペレーションのみを使用しますScan
。
-
コンポーネントの祖先を検索します。
CM8 コンポーネントの祖先 (親、祖父母、曽祖父母など) を見つけるには、
ComponentId = "CM8"
を使用してベーステーブルをクエリします。クエリは次のレコードを返します。結果データのサイズを小さくするには、プロジェクション式を使用して
Path
属性だけを返すことができます。ComponentId
ParentId
GraphId
[Path] (パス)
CM8
CM4
CM1#1
CM1|CM2|CM4|CM8
[Path] (パス)
CM1|CM2|CM4|CM8
次に、パイプ (「|」) を使用してパスを分割し、最初の N-1 コンポーネントを使用して祖先を取得します。
クエリ結果: CM8 の祖先は CM1、CM2、CM4 です。
-
コンポーネントの直接の子を検索します。
CM2 コンポーネントの直接の子コンポーネントまたは 1 レベルのダウンストリームコンポーネントをすべて取得するには、 を使用して GSI1 をクエリします
ParentId = "CM2"
。クエリは次のレコードを返します。ParentId
ComponentId
CM2
CM4
CM5
-
最上位コンポーネントを使用して、すべての下流の子コンポーネントを検索します。
最上位コンポーネント CM1 のすべての子コンポーネントまたはダウンストリームコンポーネントを取得するには、
GraphId = "CM1#1"
と を使用して GSI2 をクエリしbegins_with("Path", "CM1|")
、 でプロジェクション式を使用しますComponentId
。すると、そのツリーに関連するすべてのコンポーネントが返されます。この例では、CM1 を最上位コンポーネントとするツリーが 1 つありますが、実際には、同じテーブルに数百万もの最上位コンポーネントがある可能性があります。
GraphId
ComponentId
CM1#1
CM2
CM3
CM4
CM5
CM8
CM9
CM10
CM6
CM7
-
中間レベルのコンポーネントを使用して、すべてのダウンストリームの子コンポーネントを検索します。
コンポーネント CM2 のすべての子コンポーネントまたはダウンストリームコンポーネントを再帰的に取得するには、2 つのオプションがあります。レベルごとに再帰的にクエリを実行するか、GSI2 インデックスにクエリを実行することができます。
-
子コンポーネントの最後のレベルに達するまで、GSI1 をレベルごとに再帰的にクエリします。
-
ParentId = "CM2"
を使用して GSI1 にクエリを実行すると、次のようなレコードが返ってきます。ParentId
ComponentId
CM2
CM4
CM5
-
再度、
ParentId = "CM4"
を使用して GSI1 にクエリを実行します。次のようなレコードが返ってきます。ParentId
ComponentId
CM4
CM8
CM9
-
再度、
ParentId = "CM5"
を使用して GSI1 にクエリを実行します。次のようなレコードが返ってきます。これを繰り返します。最後のレベルに到達するまで、それぞれの
ComponentId
に対してクエリを実行します。ParentId = "<ComponentId>"
を使用したクエリに結果が返されなくなったら、前の結果がツリーの最後のレベルからの結果となります。ParentId
ComponentId
CM5
CM10
-
すべての結果をマージします。
result=[CM4, CM5] + [CM8, CM9] + [CM10]
=[CM4, CM5, CM8, CM9, CM10]
-
-
最上位コンポーネント (自動車、または CM1) の階層ツリーを格納する GSI2 をクエリします。
-
まず、最上位のコンポーネントまたは上位の祖先、および CM2 の
Path
を検索します。検索方法は、ComponentId = "CM2"
を使用してベーステーブルにクエリを実行し、階層ツリー内のそのコンポーネントのパスを検索します。GraphId
およびPat
h 属性を選択します。クエリは次のレコードを返します。GraphId
[Path] (パス)
CM1#1
CM1|CM2
-
を使用して GSI2 をクエリします
GraphId = "CM1#1" AND BEGINS_WITH("Path", "CM1|CM2|")
。クエリは次の結果を返します。GraphId
[Path] (パス)
ComponentId
CM1#1
CM1|CM2|CM4
CM1|CM2|CM5
CM1|CM2|CM4|CM8
CM1|CM2|CM4|CM9
CM1|CM2|CM5|CM10
CM4
CM5
CM8
CM9
CM10
-
CM2 のすべての子コンポーネントを返すには、
ComponentId
属性を選択します。
-
-