

# 在 DynamoDB 中使用排序键整理数据的最佳实践
<a name="bp-sort-keys"></a>

在 Amazon DynamoDB 表中，唯一标识表中每个项目的主键由分区键和排序键组成。

精心设计的排序键具有两个重要优势：
+ 将相关信息聚集在一个位置，可以高效查询。利用精心设计的排序键，可以使用带运算符（如 `begins_with`、`between`、`>`、`<` 等）的范围查询检索通常需要的相关项目组。
+ 利用复合排序键，可以在数据中定义层级（一对多）关系，在任何层级查询。

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

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

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

## 使用排序键进行版本控制
<a name="bp-sort-keys-version-control"></a>

许多应用程序需要维护项目级修订历史记录，用于审计或合规性用途，并且需要能够轻松检索最新版本。下面介绍一种使用排序键前缀实现的有效设计模式：
+ 对于每个新项目，创建两个副本：一个副本在排序键开始位置具有版本号前缀零（如 `v0_`），一个副本具有版本号前缀 1 (如 `v1_`)。
+ 每次更新项目时，在更新版本的排序键中使用下一个更高的版本前缀，将更新后的内容复制到具有版本前缀零的项目。这意味着，可使用前缀零轻松找到任何项目的最新版本。

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

![版本控制示例，显示一个包含主键和数据项目属性的表。](http://docs.amazonaws.cn/amazondynamodb/latest/developerguide/images/VersionControl.png)


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

添加新版本后，应用程序层将版本零项目的内容（排序键等于 `v0_Audit`）替换为新版本的内容。

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

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

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