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

iam*_*007 5 amazon-web-services amazon-dynamodb

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

其中一小部分将获得比其他人更多的命中(不确定的确切数字,比如说2%-5%).我无法提前确定.

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

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

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

Jam*_*mes 5

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

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

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

是的,散列密钥将分布在分区上.分区不对应于单个项目,而是对应于读/写容量和存储的分配(了解分区行为).