本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
步骤 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 和对排序键 (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 |