为什么在AWS DynamoDB中使用公共哈希密钥是一件坏事?

时间:2013-03-20 14:34:47

标签: amazon-web-services nosql amazon-dynamodb

我需要有一种方法来按时间戳排序项目,所以我正在考虑使用公共哈希键和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配置到此分区时,将使用所有容量,那么我认为这是一件好事,因为容量没有被浪费?

2 个答案:

答案 0 :(得分:8)

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

通过使用单个哈希键,无论您配置和支付多少,您都可以对表上实际执行的读写数量设置固定限制。

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

一开始你可能不会达到这个限制,但亚马逊推荐不采用这种方法,因为亚马逊希望你以可扩展的方式使用AWS。

答案 1 :(得分:7)

您的案例中常见的伎俩是

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

通过这种方式,您的数据按天划分(假设从一天到另一天的负载相当均匀),但是范围键允许进行query条件非常精细的BETWEEN调用。 uuid部分用于区分(完全)同时出现的记录。