

# 在 DynamoDB 表中使用写入分片来均匀分配工作负载
<a name="bp-partition-key-sharding"></a>

扩大空间是一种在 Amazon DynamoDB 的分区键空间更好地分配写入的方式。可以通过多种不同方式来进行。可以将随机数加入分区键值，在分区之间分配项目。或者，可以使用基于查询内容计算的数字。

## 使用随机后缀分片
<a name="bp-partition-key-sharding-random"></a>

将随机数加入分区键值末尾，是在分区键空间更均匀分配负载的一种策略。然后在更大空间内随机写入。

例如，对于表示当天日期的分区键，可能选择介于 `1` 和 `200` 之间的随机数，并将它作为后缀连接到日期。这将生成分区键值 `2014-07-09.1`、`2014-07-09.2`，以此类推，直到 `2014-07-09.200`。由于随机化分区键，每天表的写入将均匀分布在多个分区。这样可以提高并行度和总体吞吐量。

但是，要读取指定日期的所有项目，必须针对所有后缀查询项目，然后合并结果。例如，先对分区键值 `2014-07-09.1` 发出 `Query` 请求。然后，对 `2014-07-09.2` 发出另一个 `Query`，以此类推，直到 `2014-07-09.200`。最后，应用程序必须合并所有 `Query` 请求的结果。

## 使用计算后缀分片
<a name="bp-partition-key-sharding-calculated"></a>

随机化策略可以显著改善写入吞吐量，但难以读取特定项目，因为不知道写入项目时使用的后缀值。要更容易读取各个项目，可使用其他策略。不使用随机数在分区间分配项目，而是使用可根据查询内容计算的数字。

考虑上一个示例，表在分区键中使用当天日期。现在假设每个项目有一个可访问的 `OrderId` 属性，除了日期外，最经常需要按订单 ID 查找项目。应用程序将项目写入表之前，可以根据订单 ID 计算一个哈希后缀，并将此后缀追加到分区键日期。计算可能产生一个介于 1 和 200 之间非常均匀分布的数字，类似于随机策略所生成的数字。

简单的计算足够了，例如订单 ID 字符的 UTF-8 码位值的乘积，取模 200，加 1。分区键值是连接计算结果的日期。

利用此策略，写入均匀分布在分区键值之间，从而均匀分布在物理分区之间。可以对特殊项目和日期轻松执行 `GetItem` 操作，因为可以为特定 `OrderId` 值计算分区键值。

要读取指定日期的所有项目，仍必须`Query`每个 `2014-07-09.N` 键（其中，`N` 为 1-200），然后应用程序必须合并所有结果。好处是避免出现单个“热门”分区键值，承担所有工作负载。

**注意**  
有关专门设计用于处理大容量时间序列数据的更高效策略，请参见[时间序列数据](bp-time-series.md)。