【问题标题】:DynamoDB input broken item if putting items too fast?如果放置项目太快,DynamoDB 输入损坏的项目?
【发布时间】:2021-06-26 11:10:47
【问题描述】:

将项目放入 DynamoDB 时,我遇到了一个奇怪的现象。

看起来如果放项目太快,DynamoDB 无法将整个数据放到表中(有点像损坏的数据,它有部分属性但有一些奇怪的值)?

我正在使用 AWS JavaScript SDK 来放置项目,没有显示任何错误,一切似乎都正常,但是一旦我从 Web 控制台检查了数据,一些插入的数据就被破坏了。这与写入容量单位有关吗? (但没有错误告诉我这是由写入容量单位引起的。。)我可以确认我的写入容量单位的峰值约为 60/分钟,设置是“按需”。

我尝试以一秒的间隔减慢推杆速度,在完全相同的数据下,可以正确插入数据...

任何人都知道为什么以及如何解决这个问题..?

【问题讨论】:

  • 60 每分钟非常慢。与 dynamo 插入损坏/部分数据相比,您的 js 代码中存在一些错误的可能性要大得多。
  • 同意这可能是执行写入的代码中的错误。听起来像是某些共享对象导致了不良行为。虽然 AWS 的服务中存在错误,就像所有软件一样,但考虑到服务的规模和质量,此处描述的错误不太可能出现在 DynamoDB 中。

标签: amazon-dynamodb


【解决方案1】:

答案是否定的:如果 DynamoDB 决定限制您的请求,因为您超出了预置容量或超出了他们自己的硬件容量或其他原因 - 它会拒绝执行整个请求,或者在 BatchWriteItems 的情况下执行一些写而不做其他人(它会告诉你哪些做了,哪些没有做)。 DynamoDB 永远不会写入请求的部分或损坏某个属性的部分。

如果您看到了这种情况,那么最有可能的罪魁祸首是您自己的代码中的一个错误。也许您自己的代码不是线程安全的,因此如果您的代码试图准备两个项目以同时写入,那么执行此准备的代码会发生数据竞争并导致要写入的项目损坏。显然,DynamoDB 也有可能是有 bug 造成的,但不可能像“一分钟写超过 60 条会导致损坏”这样简单的 bug——如果是这样的话,每个人都会遇到这个 bug。 ..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 2018-06-16
    • 2020-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    相关资源
    最近更新 更多