Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services AWS DynamoDB在添加新项之前检查唯一性_Amazon Web Services_Amazon Dynamodb - Fatal编程技术网

Amazon web services AWS DynamoDB在添加新项之前检查唯一性

Amazon web services AWS DynamoDB在添加新项之前检查唯一性,amazon-web-services,amazon-dynamodb,Amazon Web Services,Amazon Dynamodb,在添加到dynamoDB之前,我想检查新项的id(主键)是否为uniq 就性能和成本而言,什么是最佳选择 检查主键唯一性的可能选项可以是 1) Get(如果返回空数组,则表示没有匹配的数据。这也表示它是uniq) 2) 扫描(显然是性能和成本方面最差的想法) 3) 质疑 ++我的另一个想法是,如果有任何方法可以在DynamoDB设置中强制忽略传入请求(放弃传入请求或发送错误消息),逻辑可能会简单得多 在正常的RDB中,若我们尝试使用现有主键添加新项,数据库将返回错误消息,而不会更改存储在数据

在添加到dynamoDB之前,我想检查新项的id(主键)是否为uniq

就性能和成本而言,什么是最佳选择


检查主键唯一性的可能选项可以是

1) Get(如果返回空数组,则表示没有匹配的数据。这也表示它是uniq)

2) 扫描(显然是性能和成本方面最差的想法)

3) 质疑


++我的另一个想法是,如果有任何方法可以在DynamoDB设置中强制忽略传入请求(放弃传入请求或发送错误消息),逻辑可能会简单得多

在正常的RDB中,若我们尝试使用现有主键添加新项,数据库将返回错误消息,而不会更改存储在数据库中的原始数据

然而,在DynamoDB中,无论我们使用现有的主键放置项还是更新项,它都只是默默地更改存储在数据库中的原始数据


有什么想法吗?

如您所述,如果项目已经存在,DynamoDB将使用您提供的主键更新该项目。下面的文章向您展示了如何发出条件PUT请求,该请求在尝试插入已存在的项(基于主键)时将失败

要防止新项替换现有项,请使用包含属性_not_exists函数的条件表达式,该属性的名称用作表的分区键。由于每个记录都必须包含该属性,因此只有在不存在匹配项的情况下,attribute_not_exists函数才会成功


正如您所提到的,DynamoDB将使用您提供的主键更新项目(如果它已经存在)。下面的文章向您展示了如何发出条件PUT请求,该请求在尝试插入已存在的项(基于主键)时将失败

要防止新项替换现有项,请使用包含属性_not_exists函数的条件表达式,该属性的名称用作表的分区键。由于每个记录都必须包含该属性,因此只有在不存在匹配项的情况下,attribute_not_exists函数才会成功


选项1和3是相同的,它们都在主键上执行查询操作。如果要查找主键值,则选项2甚至不值得考虑。选项1和选项3是一样的,它们都在主键上执行查询操作。如果要查找主键值,则选项2甚至不值得考虑。