使用排序键整理数据的最佳实践 - Amazon DynamoDB

使用排序键整理数据的最佳实践

在 Amazon DynamoDB 表中,唯一标识表中每个项目的主键不仅包含分区键,还包含排序键。

精心设计的排序键具有两个重要优势:

  • 将相关信息聚集在一个位置,可以高效查询。利用精心设计的排序键,可以使用带运算符(如 begins_withbetween>< 等)的范围查询检索通常需要的相关项目组。

  • 利用复合排序键,可以在数据中定义层级(一对多)关系,在任何层级查询。

    例如,在列出地理位置的表中,可以如下设计排序键。

    [country]#[region]#[state]#[county]#[city]#[neighborhood]

    这样可以为任何一个聚合层面的位置列表(从 countryneighborhood 以及二者之间的所有内容)设计高效的范围查询。

使用排序键进行版本控制

许多应用程序需要维护项目级修订历史记录,用于审计或合规性用途,并且需要能够轻松检索最新版本。下面介绍一种使用排序键前缀实现的有效设计模式:

  • 对于每个新项目,创建两个副本:一个副本在排序键开始位置具有版本号前缀零(如 v0_),一个副本具有版本号前缀 1 (如 v1_)。

  • 每次更新项目时,在更新版本的排序键中使用下一个更高的版本前缀,将更新后的内容复制到具有版本前缀零的项目。这意味着,可使用前缀零轻松找到任何项目的最新版本。

例如,部件制造商可使用如下所示的架构。


        版本控制示例,显示一个包含主键和数据项目属性的表。

Equipment_1 项目将经过各个审计员的一系列审计。每次新审计的结果保存在表的一个新项目中,从版本号 1 开始,每次后续修订递增该数字。

添加新版本后,应用程序层将版本零项目的内容(排序键等于 v0_Audit)替换为新版本的内容。

如果应用程序需要检索最新审计状态,可以查询 v0_ 的排序键前缀。

如果应用程序需要检索完整修订历史记录,可以查询项目分区键下的所有项目,筛选 v0_ 项目。

此设计还适合在排序键前缀后加入排序键的各个部件 ID,对一件设备的多个部件进行审计的情况。