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

问题描述:

当前遇到DynamoDB写入吞吐量问题。我将写入吞吐量设置为10000,并且我有6个正在运行batch_write的进程(要存储的条目数:5亿+)。平均消耗写吞吐量非常低(约500),但我仍然得到了写入扼杀,并且平均受限制请求数为800.(全部以5分制为单位)即使吞吐量很高,DynamoDB batch_write也会受到限制

我想知道为什么会发生这种情况,以及我如何可以避免它。

谢谢!

它可能来自表分区:

至于解释here,即使你置备一个表(或二级全球指数)一定写能力,实际的请求吞吐量极限可以低得多。如AWS here所述,DynamoDB会自动将您的表分区到幕后,并将它们的调配容量平均分配到这些较小的分区中。

当某些项目被频繁请求时,它们会有“热键”,从而产生非常不均匀的访问模式。当表格变大时,它们被高度分区。例如,如果您为特定的表提供了每秒1000次的写入操作,并且该表实际上被分割为10个分区,那么即使其他分区的分配吞吐量没有被消耗,写入也将被抑制为每秒100个请求/秒很多。

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