gpt4 book ai didi

amazon-dynamodb - DynamoDB 预期条件

转载 作者:行者123 更新时间:2023-12-02 04:59:18 24 4
gpt4 key购买 nike

如果我像这样创建 PutItem 请求会发生什么:

  {
"Expected":
{
"testAttribute" :
{
"Exists": "false",
}
},
"Item":
{
"testAttribute" :
{
"S": "testValue"
}
},
"TableName": "TableName"
}

其中“testAttribute”不是主键的一部分。

DynamoDB 是否会扫描表以查看是否存在属性为“testAttribute”==“testValue”的项目?如果不是,DynamoDB 将如何确定 "testAttribute"== "testValue"的存在?我在描述其工作原理的文档中找不到任何内容。

最佳答案

根据documentation of the PutItem action ,您无权发出该请求。它说:

Item: A map of attribute name/value pairs, one for each attribute. Only the primary key attributes are required; you can optionally provide other attribute name-value pairs for the item.

(强调我的)

无论何时使用 PutItem,您都必须为主键的每个属性提供一个值.

这样,您肯定会同意,DynamoDB 可以非常简单快速地检查您在 Expected 上定义的条件。条款:不需要扫描,它只需要查看可以匹配请求的单个项目。否则,正如您所指出的,DynamoDB 将需要执行全表扫描(这可能会非常慢,而且他们肯定会为此向您收费)或者它需要维护表中每个项目的一致索引,他们会向您收取用于存储它的 SSD 空间!

另请注意,expected 子句的含义与您在问题中描述的略有不同。假设您修复您的请求并添加所有主键属性,该请求将意味着:

"If the item identified by this primary key does not exist, create it; if it does exist and does not contain an attribute named testAttribute, replace the item with the one whose attributes are described in this request; if the item does exist and does contain an attribute named testAttribute, do nothing".

您的描述说 DynamoDB 会检查 testAttribute 的值是否为 testValue,但当您使用 Expected/Exists 时不会发生这种情况条款。要达到您描述的效果,您需要使用 Expected/Value子句,然后在该子句中指定您期望的值——为 Item 中的属性指定的值如果要发生更新(或插入),请求的属性仅用于定义属性的新值。

关于amazon-dynamodb - DynamoDB 预期条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17381817/

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