步骤 5:创建 DynamoDB 数据模型 - AWS 规范性指导

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

步骤 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 用作排序键。使用 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