Amazon DynamoDB
开发人员指南 (API 版本 2012-08-10)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

使用写入分片均匀分发工作负载

在 DynamoDB 中跨分区键空间更好地分发写入的一种方式是扩展空间。可以通过多种不同的方式执行此操作。可以将随机数字添加到分区键值以在分区间分发项目,也可以使用基于查询内容计算得出的数字。

使用随机后缀分区

跨分区键空间更均匀分发负载的一种策略是,将随机数字添加到分区键值的末尾。然后跨更大型的空间随机化写入。

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

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

使用计算得出的后缀分区

随机化策略可以显著提高写入吞吐量。但难以读取特定项目,因为不知道在写入项目时使用的是什么后缀值。要使各个项目的读取变得简单,可使用其他策略。不是使用随机数在分区间分发项目,而是使用可根据查询内容计算出的数字。

请考虑上述示例,其中表在分区键中使用当天日期。现在假设每个项目都有可访问的 OrderId 属性,并且除了日期,还最常需要按订单 ID 查找项目。在应用程序将项目写入表之前,它可根据订单 ID 计算得出一个哈希后缀并将此后缀追加到分区键日期。此计算可能生成一个介于 1 和 200 之间、分发甚是均匀的数字 (类似于随机策略所生成的数字)。

简单的计算可能已足够,如订单 ID 中字符的 UTF-8 码位值的积,取模 200,+ 1。则分区键值是与计算结果连接的日期。

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

要读取指定日期的所有项目,仍必须 Query 每个 2014-07-09.N 键 (其中,N 为 1–200),应用程序之后必须合并所有结果。好处是避免了一个“热点”分区键值占用所有工作负载。

注意

为了实现更高效策略专门设计处理大容量时间序列数据,请 时间序列数据参阅。

本页内容: