0

我在使用 DynamoDB 时遇到了一些优化问题。我相信我不需要在这里显示任何代码,所以我只是问我的问题,

我的物品有一个“列表”属性。我需要做的是,迭代这个表,为每个项目的列表属性添加新值。由于每个更新操作彼此不同,因此该操作需要大量写入单元。为了减少这种情况,我将项目按 25 分组,并使用 TransactionWriteItem 更新它们。我无法准确比较值,但我觉得它没有效果。

我还有一个问题,如果我的数据是 100 字节(小于 4KB),我压缩它会有什么不同吗?我的意思是,就消耗的写入单位而言,100 字节和 10 字节之间有区别吗?谢谢。

4

1 回答 1

2

事务 API 并不是为了加快速度或消耗更少的容量:它旨在允许跨多个项目的原子操作(这意味着作为一个单元,所有更新要么成功,要么全部失败)。

将此与自己进行 25 次更新或使用 BatchWriteItem API 进行比较——在这些情况下,一些更新可能会失败,而另一些会成功。或者它们可能都成功,但在您更新项目时可能会发生其他读取,从而导致数据视图不一致。

因此,为了更好地了解消耗的写入容量,它是这样的:任何正在更新的项目(包括创建新项目、删除现有项目或更新现有项目)都将消耗至少 1 个容量单位。项目更新无法消耗部分容量单位(即,如果您的更新非常小)。但是,如果项目大于 1KB,则单个项目更新可能会消耗超过 1 个 WCU。

因此,如果它们大于 1KB,则压缩您的项目确实是值得的。

事实上,即使小于 1KB,争取小项也是有回报的,因为与写入总是消耗至少 1KB 不同,在查询或扫描时,消耗的容量是根据查询或扫描的返回结果的总和计算的。例如,如果您的查询检索到 10 个项目,每个项目是 200B,您将只收取 1 个 RCU;但如果相同的查询返回 10 个项目并且每个项目为 1KB,那么您将消耗 3RCU(10KB / 4KB = 2.5,四舍五入为 3)

于 2021-01-15T08:42:30.783 回答