第 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 用作排序键。使用 GraphId 并对排序键 (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 |