【发布时间】:2020-04-17 22:52:38
【问题描述】:
我正在编写一个脚本,它应该用最短的数据(~650Gb 表)填充新表。
所有记录之间的分区(哈希)键不同,所以我无法想象更好的键。
我已将此表的预置 WCU 设置为 4k。
当脚本工作时,16 个独立的线程以高速率将不同的数据放入表中。在执行期间,我收到 ProvisionedThroghputException。 Cloudwatch 图表显示消耗的 WCU 上限为 1000WCU。
如果所有数据都放在一个分区中,则可能会发生这种情况。
据我了解,当数据大小超过 10Gb 限制时,DynamoDb 将创建新分区。 是这样吗?
所以,在这个数据填充操作期间,我只有 1 个分区,1000WCU 的限制是可以理解的。
我已经检查了https://aws.amazon.com/ru/premiumsupport/knowledge-center/dynamodb-table-throttled/
但似乎这些建议适用于已经填写的表格,并且您尝试在那里添加大量新数据。
所以我有 3 个问题:
1.如何加快向新空表插入数据的速度?
2. DynamoDB 何时决定创建新分区?
3. 是否可以设置最小分区数(例如 4 个)以使用已配置 WCU (4k) 的所有功能?
UPD2 HASH 键是长数字。实际上,它并不是很独特。但是具有相同 HASH 键但不同 RANGE 键的最大行数为 2。
【问题讨论】:
-
谢谢。这是相关信息,但似乎行为与那篇文章不同。我创建新表,并将预配的 WCU 设置为 4k。正如上面链接中所述,DynamoDB 应该创建 4 个分区(因为我超过了每个分区 1k 的限制)。换句话说,似乎它的工作方式有所不同。其中一项建议是增加预置吞吐量。但它已经比消耗的高得多了。
-
这似乎是 DynamoDB 的杂草,我不知道有任何公开数据可以准确解释其工作原理。我唯一的猜测是,由于您的实验相对较短(约 20 分钟),DynamoDB 没有时间做出响应。您可以尝试在一段时间内逐步增加 WCU,这可能会更好地触发 DynamoDB 端的任何阈值。不过,这只是猜测。
-
对我来说,使用 多线程 写入和批处理 put_item 调用解决了类似的现象
标签: amazon-web-services amazon-dynamodb throttling