本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
步驟 5:建立 DynamoDB 資料模型
定義基底資料表和全域次要索引 (GSI) 的分割區索引鍵:
-
遵循關鍵設計最佳實務,在此範例中用
ComponentId
作基底資料表的分割索引鍵。因為它是獨一無二的,所ComponentId
以可以提供粒度。DynamoDB 使用分割區索引鍵的雜湊值來決定實際儲存資料的分割區。唯一元件 ID 會產生不同的雜湊值,可加速分佈資料表內的資料。您可以使用ComponentId
分區索引鍵來查詢基底資料表。 -
若要尋找元件的直接子系,請建立 GSI,其中
ParentId
是分割索引鍵,並且ComponentId
是排序索引鍵。您可以使用ParentId
做為分割區索引鍵來查詢此 GSI。 -
若要尋找元件的所有遞迴子項,請建立 GSI,其中
GraphId
是分割區索引鍵,Path
是排序索引鍵。您可以使用GraphId
作為分割區索引鍵並在排序索引鍵上使用BEGINS_WITH(Path, "$path")
運算子來查詢此 GSI。
分割區索引鍵 |
排序鍵 |
映射屬性 |
|
基底資料表 |
|
|
|
GSI1 |
|
|
|
GSI2 |
|
|
|
將元件儲存在資料表中
下一步是將每個元件儲存在 DynamoDB 基本資料表中。從範例樹中插入所有元件之後,您會取得下列基底資料表。
ComponentId |
ParentId |
GraphId |
路徑 |
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 和 sort 鍵 (Path
) 上的begins_with
操作,您可以在樹中找到組件的完整歷程。
GraphId |
路徑 |
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 |