【问题标题】:DynamoDB fill empty table with tonns of data capped at 1000WCUDynamoDB 用大量数据填充空表,上限为 1000 WCU
【发布时间】: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) 的所有功能?

UPD Cloudwatch 图:


UPD2 HASH 键是长数字。实际上,它并不是很独特。但是具有相同 HASH 键但不同 RANGE 键的最大行数为 2。

【问题讨论】:

  • 谢谢。这是相关信息,但似乎行为与那篇文章不同。我创建新表,并将预配的 WCU 设置为 4k。正如上面链接中所述,DynamoDB 应该创建 4 个分区(因为我超过了每个分区 1k 的限制)。换句话说,似乎它的工作方式有所不同。其中一项建议是增加预置吞吐量。但它已经比消耗的高得多了。
  • 这似乎是 DynamoDB 的杂草,我不知道有任何公开数据可以准确解释其工作原理。我唯一的猜测是,由于您的实验相对较短(约 20 分钟),DynamoDB 没有时间做出响应。您可以尝试在一段时间内逐步增加 WCU,这可能会更好地触发 DynamoDB 端的任何阈值。不过,这只是猜测。
  • 对我来说,使用 多线程 写入和批处理 put_item 调用解决了类似的现象

标签: amazon-web-services amazon-dynamodb throttling


【解决方案1】:

您不能手动指定 DDB 使用的分区数。它在幕后自动处理。

但是,它的处理方式在 F_SO_K 提供的链接中列出。

  • 每 10GB 数据 1 个
  • 每 3000RCU 和/或 1000WCU 配置 1 个。

如果您配置了 4000WCU,那么您应该至少有 4 个分区,并且您应该会看到 4000WCU 被消耗。特别是考虑到您说您的哈希键对于每条记录都是唯一的,您应该让数据均匀分布,而不是运行到“热”分区中。

您提到 cloudwatch 显示消耗的 WCU 为 1000,cloudwatch 是否也显示配置容量为 4000WCU?

如果是这样,不确定发生了什么,可能不得不致电 AWS。

【讨论】:

  • 谢谢。用 cloudwatch graph 更新了问题
  • @AlexanderGubarets 如果我正确阅读了您的更新,哈希键不是唯一的,但最多只有 2 行具有相同的哈希键。这应该足够明显,以至于您不会有热分区。
猜你喜欢
  • 2019-03-18
  • 2011-04-15
  • 1970-01-01
  • 2017-11-30
  • 2018-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-04
相关资源
最近更新 更多