gpt4 book ai didi

node.js - DynamoDB 在更新表中的项目时如何消耗容量?

转载 作者:行者123 更新时间:2023-12-05 02:08:56 24 4
gpt4 key购买 nike

最近我在使用 DynamoDB 构建一些 API。

在一个名为planet的表中,有一个属性是 map 列表(对象数组)的形式。基本上,属性看起来像这样。我将其称为 buildingMap,因为它是一张包含许多建筑物的 map 。

[
{
id: 'some id',
status: 'processing',
...
},
{
id: 'other id',
status: 'done',
...
}
]

事情是,最初,我指出索引并直接更新数组中的那个对象,就像使用这种 UpdateExpression。

删除 buildingMap[2]

或者这样的 UpdateExpression

SET buildingMap[0].#status = :status

我认为与我将整个 buildingMap 取出、重写并将整个 buildingMap 放回去相比,这将使 DynamoDB 消耗更少的容量。

像这样

// Get the item using DynamoDB.DocumentClient
const planet = await docClient.get({
TableName: 'Planet',
Key: { planetId: 'xxxxx' }
}).promise()

// Modify the buildingMap attribute
let buildingMap = planet.Item.buildingMap
buildingMap.splice(0, 1) // remove the first object in the buildingMap

// Write back the update
await docClient.update({
TableName: 'Planet',
Key: { planetId: 'xxxxx' },
UpdateExpression: 'SET buildingMap = :map',
ExpressionAttributeValues: { ':map': buildingMap }
}).promise()

但是,我为这两种方法打印了ConsumedCapacity,结果完全一样!

谁能帮我回答 DynamoDB 在更新表中的项目时如何真正计算写入容量读取容量

我的意思是,如果我只更新列表中的单个 map ,为什么它会消耗与覆盖整个 map 列表相同的容量?

此外,当我选择返回 ALL_NEW 进行更新时,它仍然消耗与我选择返回 UPDATED_NEW 时相同的容量。但我认为选择返回 ALL_NEW 会比 UPDATED_NEW 消耗更多的Read Capacity

最佳答案

要修改一个项目,DynamoDB 内部需要读取整个项目,对其进行修改并将其写回磁盘,因此您需要为整个项目付费,而不是您修改的一小部分。

此外,DynamoDB 写入比读取昂贵得多,并且它们的价格已经包括所涉及的(强一致性)读取:如果您有条件表达式或任何 ReturnValues 选项,则无需支付额外费用(但请注意,即使条件表达式导致写入未完成,您仍需为此付费)。

以下是官方文档中的一些相关引述:

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ProvisionedThroughput.html

UpdateItem—Modifies a single item in the table. DynamoDB considers the size of the item as it appears before and after the update. The provisioned throughput consumed reflects the larger of these item sizes. Even if you update just a subset of the item's attributes, UpdateItem will still consume the full amount of provisioned throughput (the larger of the "before" and "after" item sizes).

https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html#DDB-UpdateItem-request-ReturnValues

There is no additional cost associated with requesting a return value aside from the small network and processing overhead of receiving a larger response. No read capacity units are consumed.

关于node.js - DynamoDB 在更新表中的项目时如何消耗容量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60373531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com