9

我需要一种按时间戳排序项目的方法,因此我正在考虑使用通用哈希键和 unix 时间戳作为范围键。

根据常见问题解答:

When storing data, Amazon DynamoDB divides a table into multiple partitions and 
distributes the data based on the hash key element of the primary key. The provisioned 
throughput associated with a table is also divided among the partitions; each 
partition's throughput is managed independently based on the quota allotted to it. 
There is no sharing of provisioned throughput across partitions. 

由于我使用的是公共散列键,因此不会有不均匀的负载分布 - 因为所有负载都将进入单个分区。

所以当我提供100 write给这个分区时,所有的容量都将被使用,那么我认为这是一件好事,因为容量没有被浪费?

4

2 回答 2

8

您将写入和读取配置到 DynamoDB 表,而不是分区。您的容量在分区之间分布/共享,但由于底层硬件,每个分区也有固定的速率限制。

通过使用单个散列键,您将有一个固定的限制,即您可以在表上实际执行的读取和写入次数,而不管您要配置和支付多少次。

您无法将其扩展到该限制之上,因为 dynamodb 无法进一步对表进行分区以并行化负载处理,这是 AWS 随着您的预置数量增加而扩展系统的主要方式之一。

起初您可能不会达到该限制,但亚马逊建议不要使用这种方法,因为亚马逊希望您以可扩展的方式使用 AWS。

于 2013-03-20T17:02:12.540 回答
7

在您的情况下,一个常见的技巧是

  • hash_key=%Y-%m-%d(日期时间戳)
  • range_key=iso-8601_timestamp+uuid

这样,您的数据会按天跨分区拆分(假设从一天到另一天的负载相当均匀),但是 range 键允许非常精细query的条件调用BETWEEN。该uuid部分用于区分将在(完全)同时插入的记录。

于 2013-03-27T13:03:03.847 回答