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

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

第 5 步:创建 DynamoDB 数据模型

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

  • 遵循密钥设计最佳实践,在本示例中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 | CM1 0

该 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 | CM1 0

CM1|CM3|CM6

CM1|CM3|CM7

CM1

CM2

CM3

CM4

CM5

CM8

CM9

CM10

CM6

CM7