步驟 6:建立資料查詢 - AWS 規範指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

步驟 6:建立資料查詢

定義存取模式並設計資料模型後,您可以在 DynamoDB 資料庫中查詢階層式資料。為了節省成本並協助確保效能的最佳作法,下列範例僅使用不含查詢作業的查詢作業Scan

  • 尋找元件的祖先。

    若要尋找 CM8 元件的上階 (父、祖父、曾祖父等),請使用 ComponentId = "CM8" 查詢基本資料表。此查詢會傳回下列記錄。

    若要減少結果資料的大小,您可以使用投射表達式以僅傳回 Path 屬性。

    ComponentId

    ParentId

    GraphId

    路徑

    CM8

    CM4

    CM1#1

    CM1|CM2|CM4|CM8

    路徑

    CM1|CM2|CM4|CM8

    現在,使用管道(「|」)拆分路徑,並採取第一個 N-1 組件以獲取祖先。

    查詢結果:CM8 的上階是 CM1、CM2、CM4。

  • 尋找元件的直接子系。

    若要取得 CM2 元件的所有直接子元件或單層下游元件,請使用查詢 GSI1。ParentId = "CM2"此查詢會傳回下列記錄。

    ParentId

    ComponentId

    CM2

    CM4

    CM5

  • 使用頂層元件尋找所有下游子元件。

    若要取得頂層元件 CM1 的所有子元件或下游元件,請使用和查詢 GSI2begins_with("Path", "CM1|")GraphId = "CM1#1"然後使用投影運算式與。ComponentId它將傳回與該樹狀目錄相關的所有元件。

    此範例具有單一樹狀目錄,其中 CM1 為頂端元件。實際上,您在相同表格中可能具有數百萬個頂層元件。

    GraphId

    ComponentId

     

    CM1#1

    CM2

    CM3

    CM4

    CM5

    CM8

    CM9

    CM10

    CM6

    CM7

  • 使用中層元件尋找所有下游子元件。

    若要以遞迴方式取得元件 CM2 的所有子元件或下游元件,您有兩個選項。您可以用遞迴方式逐層查詢,也可以查詢 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. 合併所有結果。

         

        結果 = [CM4,平方厘米 5] + [CM8,平方厘米 9] + [CM10]

                 = [立方厘米 4, 厘米 5, 平方厘米 8, 平方厘米 9, 厘米 10]

    • 查詢 GSI2,它儲存頂層元件 (汽車或 CM1) 的階層樹狀目錄。

      1. 首先,尋找頂層元件或頂級上階和 CM2 的 Path。為此,使用 ComponentId = "CM2" 查詢基本資料表,以尋找階層樹狀目錄中該元件的路徑。選取GraphIdPat h 屬性。此查詢會傳回下列記錄。

        GraphId

        路徑

        CM1#1

        CM1|CM2

      2. 使用來查詢 GSI2。GraphId = "CM1#1" AND BEGINS_WITH("Path", "CM1|CM2|")此查詢會傳回下列結果。

        GraphId

        路徑

        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. 選取 ComponentId 屬性,以傳回 CM2 的所有子元件。