ステップ 6: データクエリを作成する - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ステップ 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 をレベルごとに再帰的にクエリします。

      1. ParentId = "CM2" を使用して GSI1 にクエリを実行すると、次のようなレコードが返ってきます。

        ParentId

        ComponentId

        CM2

        CM4

        CM5

      2. 再度、ParentId = "CM4" を使用して GSI1 にクエリを実行します。次のようなレコードが返ってきます。

        ParentId

        ComponentId

        CM4

        CM8

        CM9

      3. 再度、ParentId = "CM5" を使用して GSI1 にクエリを実行します。次のようなレコードが返ってきます。

        これを繰り返します。最後のレベルに到達するまで、それぞれの ComponentId に対してクエリを実行します。ParentId = "<ComponentId>" を使用したクエリに結果が返されなくなったら、前の結果がツリーの最後のレベルからの結果となります。

        ParentId

        ComponentId

        CM5

        CM10

      4. すべての結果をマージします。

         

        result=[CM4, CM5] + [CM8, CM9] + [CM10]

                 =[CM4, CM5, CM8, CM9, CM10]

    • 最上位コンポーネント (自動車、または CM1) の階層ツリーを格納する GSI2 をクエリします。

      1. まず、最上位のコンポーネントまたは上位の祖先、および CM2 の Path を検索します。検索方法は、ComponentId = "CM2" を使用してベーステーブルにクエリを実行し、階層ツリー内のそのコンポーネントのパスを検索します。GraphId および Path 属性を選択します。クエリは次のレコードを返します。

        GraphId

        [Path] (パス)

        CM1#1

        CM1|CM2

      2. を使用して 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

      3. CM2 のすべての子コンポーネントを返すには、ComponentId 属性を選択します。