本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
步驟 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 的所有子元件或下游元件,請使用和查詢 GSI2
begins_with("Path", "CM1|")
,GraphId = "CM1#1"
然後使用投影運算式與。ComponentId
它將傳回與該樹狀目錄相關的所有元件。此範例具有單一樹狀目錄,其中 CM1 為頂端元件。實際上,您在相同表格中可能具有數百萬個頂層元件。
GraphId
ComponentId
CM1#1
CM2
CM3
CM4
CM5
CM8
CM9
CM10
CM6
CM7
-
使用中層元件尋找所有下游子元件。
若要以遞迴方式取得元件 CM2 的所有子元件或下游元件,您有兩個選項。您可以用遞迴方式逐層查詢,也可以查詢 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
-
合併所有結果。
結果 = [CM4,平方厘米 5] + [CM8,平方厘米 9] + [CM10]
= [立方厘米 4, 厘米 5, 平方厘米 8, 平方厘米 9, 厘米 10]
-
-
查詢 GSI2,它儲存頂層元件 (汽車或 CM1) 的階層樹狀目錄。
-
首先,尋找頂層元件或頂級上階和 CM2 的
Path
。為此,使用ComponentId = "CM2"
查詢基本資料表,以尋找階層樹狀目錄中該元件的路徑。選取GraphId
和Pat
h 屬性。此查詢會傳回下列記錄。GraphId
路徑
CM1#1
CM1|CM2
-
使用來查詢 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
-
選取
ComponentId
屬性,以傳回 CM2 的所有子元件。
-
-