第 5 步:创建 DynamoDB 数据模型 - AWS Prescriptive Guidance

第 5 步:创建 DynamoDB 数据模型

为基表和全局二级索引(GSI)定义分区键:

  • 遵循键设计最佳实践,在本例中将 ComponentId 用作基表的分区键。ComponentId 可以提供粒度,因其是唯一的。DynamoDB 使用分区键的哈希值来确定物理存储数据的分区。唯一的组件 ID 会生成不同的哈希值,这有助于在表内分布数据。可以使用 ComponentId 分区键查询基表。

  • 要查找组件的直接子组件,请创建一个 GSI,其中 ParentId 是分区键,ComponentId 是排序键。您可以将 ParentId 用作分区键,以查询此 GSI。

  • 要查找组件的所有递归子级,请创建一个 GSI,其中 GraphId 是分区键,Path 是排序键。您可以将 GraphId 用作分区键和排序键上的 BEGINS_WITH(Path, "$path") 运算符来查询此 GSI。

分区键

排序键

映射属性

基表

ComponentId

ParentId, GraphId, Path

GSI1

ParentId

ComponentId

GSI2

GraphId

Path

ComponentId

在表格中存储组件

下一步是将每个组件存储在 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