我需要有一种方法来按时间戳排序项目,所以我正在考虑使用公共哈希键和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
配置到此分区时,将使用所有容量,那么我认为这是一件好事,因为容量没有被浪费?
答案 0 :(得分:8)
您可以将写入和读取置备到DynamoDB表,而不是分区。您的容量在分区之间传播/共享,但由于底层硬件,每个分区也有固定的速率限制。
通过使用单个哈希键,无论您配置和支付多少,您都可以对表上实际执行的读写数量设置固定限制。
您无法将其扩展到该限制之上,因为dynamodb无法进一步对您的表进行分区以并行化负载处理,这是AWS随着您的配置数量增加而扩展系统的主要方式之一。
一开始你可能不会达到这个限制,但亚马逊推荐不采用这种方法,因为亚马逊希望你以可扩展的方式使用AWS。
答案 1 :(得分:7)
您的案例中常见的伎俩是
hash_key=%Y-%m-%d
(日期时间戳)range_key=iso-8601_timestamp+uuid
通过这种方式,您的数据按天划分(假设从一天到另一天的负载相当均匀),但是范围键允许进行query
条件非常精细的BETWEEN
调用。
uuid
部分用于区分(完全)同时出现的记录。