gpt4 book ai didi

amazon-dynamodb - DynamoDB 预期条件

转载 作者:行者123 更新时间:2023-12-02 21:58: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