在DynamoDB中,更新属性的写入成本是否仅取决于属性大小或总项目大小?
假设我有一个分区为userid
的表,每个项目大约有70个属性,每个属性值为200字节。现在我只更新了这个项目的1个属性。写入成本是200字节,所以 1写入容量单位或者它将取决于项目大小而不管属性是否更新因此将是70 * 200 = 1400所以 2写入容量单位
答案 0 :(得分:0)
一个非常有趣的问题!
The Provisioned Throughput documentation谈论项目大小,因此我怀疑整个项目已被写入,从而导致消耗2个写入容量单位。
DynamoDB存储 blob of data (与带有列的传统SQL数据库或柱状数据库相对),因此即使在整个blob需要重写时也是如此元素更新。
如果这是一个问题,您可以将表拆分为具有相同分区键的多个表,而在不同的表中使用频率较低的数据。
答案 1 :(得分:0)
以下是AWS文档中的引用:
对于PutItem:
PutItem-将单个项目写入表格。如果一个项目具有相同的 主键存在于表中,该操作替换该项。对于 计算预配置吞吐量消耗,项目大小 问题是两者中较大的。
对于UpdateItem:
UpdateItem - 修改表中的单个项目。 DynamoDB考虑了 更新前后的项目大小。该 已配置的吞吐量反映了这些项目中较大的一项 大小即可。即使您只更新项目属性的子集, UpdateItem仍将消耗全部配置量 吞吐量(“之前”和“之后”项目大小中的较大者。
正如您所看到的,在这两种情况下都会考虑整个项目的大小,而不仅仅是单个属性。
解决这个问题的一种方法是将属性拆分到不同的表中。然后,当更新属性时,您将支付更低的费用。
您可以按大小(大属性,如二进制数据或文本blob到单独的表)或按更新频率拆分属性。您甚至可以为不同的表设置不同的RCU / WCU值,以进一步降低成本。