

# 在 DynamoDB 中设计分区键来分配工作负载
<a name="bp-partition-key-uniform-load"></a>

表主键的分区键部分确定存储表数据的逻辑分区，反过来会影响底层物理分区。不能有效分配 I/O 请求的分区键设计会产生“热”分区，从而导致节流且不能有效地使用预置 I/O 容量。

要最佳使用表的预调配吞吐量，不仅取决于各个项目的工作负载模式，还取决于分区键设计。这并不意味着必须访问所有分区键值以实现高效吞吐量，或者已访问分区键值的百分比必须非常高，而是工作负载访问的分区键值越不同，请求在已分配空间分配越多。通常随着访问分区键值数量与分区键值总数的比值增加，使用预调配吞吐量的效率将提高。

下面比较一些常见分区键架构的预调配吞吐量效率。


****  

| 分区键值 | 均匀性 | 
| --- | --- | 
| 用户 ID，应用程序有多个用户。 | 好 | 
| 状态代码，只有少数几个可能的状态代码。 | 差 | 
| 项目创建日期，四舍五入至最近的时间（例如，天、小时或分钟）。 | 差 | 
| 设备 ID，每个设备以相对类似间隔访问数据。 | 好 | 
| 设备 ID，即使跟踪多个设备，但其中一个设备远比所有其他设备热门。 | 差 | 

如果单个表只有少量的分区键值，请考虑更多不同非分区键值之间分配写入操作。也就是说，设计主键元素，避免出现一个“热门”（请求频率非常高的）分区键值，导致整体性能降低。

例如，考虑设计具有复合主键的表。分区键代表项目创建日期，四舍五入至最近的天。排序键是项目标识符。在指定日期，如 `2014-07-09`，**所有**新项目写入单个分区键值（和对应的物理分区）。

如果表可以完全放入单个分区（考虑数据随时间的增加），并且应用程序的读写吞吐量要求不超过单个分区的读取和写入容量，则应用程序不会因分区遇到意外节流。

要使用 NoSQL Workbench for DynamoDB 来帮助可视化您的分区键设计，请参阅[使用 NoSQL Workbench 构建数据模型](workbench.Modeler.md)。