即使吞吐量很高,DynamoDB batch_write也会受到限制

时间:2014-10-29 18:27:22

标签: throughput

目前我遇到了DynamoDB写吞吐量问题。我将写吞吐量设置为10000,并且我有6个正在运行batch_write的进程(要存储的条目数:5亿+)。平均消耗的写入吞吐量非常低(大约500)但我仍然限制了写入,并且平均请求的限制数为800.(所有在5分钟内完成)

我想知道为什么会这样,以及如何避免它。

谢谢!

1 个答案:

答案 0 :(得分:1)

它可能来自表格分区:

正如here所解释的那样,即使您为表(或全局二级索引)配置了某个写入容量,实际的请求吞吐量限制也会低得多。如AWS here所述,DynamoDB会在后台自动对您的表进行分区,并在这些较小的分区中平均分配它们的预配置容量。

当非常频繁地请求某些项目时,它们具有“热键”,从而产生极不均匀的访问模式。当表变大时,它们被高度分区。例如,如果您为特定表每秒配置了1000次写入,并且此表实际上被拆分为10个分区,那么写入将被限制为每秒100个请求,即使其他分区的已分配吞吐量未被消耗很多。

这使得棘手的问题是AWS控制台不会公开DynamoDB表中的分区数量(即使分区已有详细记录)。为了预测热键的限制,您可以使用AWS文档中描述的公式估计表可以预期的分区数。然后,您可以通过将总预配置写入容量除以预期的分区数来计算每个分区的吞吐量限制。

我希望这会有所帮助:)