避免使用大量散列键和少量随机项的dynamodb热键获得大量读/写

时间:2015-07-20 12:27:31

标签: amazon-web-services amazon-dynamodb

我想将大量物品放入dynamodb(可能每天约10万件。但未来可能会向上扩展)。

其中一小部分会比其他人获得更多的点击率(不确定的确切数字,比如2%-5%)。我不能提前确定哪一个。

每个的hashkey只是一个唯一的正整数(item_id)。我需要范围键作为unixtime标记。

问题是,这个设置会遇到热键情况吗?我不确定是否为每个hashkey值创建了分区?或者是将hashkeys随机放入不同的分区?

如果它是后者我应该是安全的,因为具有更多命中的项目将随机分布在分区上。但如果它是前者那么一些分区将获得比其他分区更多的命中

1 个答案:

答案 0 :(得分:5)

不要气馁,没有DynamoDB表具有像文档建议的完美分布式访问模式。你会有一些热点,这是正常的,没问题。您可能必须提高读/写吞吐量以适应热点,并且取决于它们的热度可能会对成本产生影响。但是,在您描述的适度吞吐量水平下,它不会使DynamoDB无法使用或任何东西。

我建议将容量需求转换为DynamoDB使用的每秒吞吐量指标。每天100,000次是否真的均匀分布到每秒2次?

  • 读取与写入的数量是多少?
  • 1K容量块有多大?
  • 峰值和谷值使用之间有很大差异吗?
  • 是否可以使用缓存来平滑读取模式?

是的,散列密钥将分布在分区上。分区不对应于单个项目,而是对应于读/写容量和存储的分配(Understanding Partition Behavior)。