amazon-web-services - AWS DynamoDB 在添加新项目之前检查唯一性
问题描述
我想在添加到 dynamoDB 之前检查新项目的 id(primary-key) 是否为 uniq
什么是性能和成本方面的最佳选择。
检查主键唯一性的可能选项可以是...
1)获取(如果返回空数组,则表示没有匹配的数据。也表示它是uniq)
2)扫描(显然,性能和成本最糟糕的想法)
3) 查询
++ 我的另一个想法是,如果有任何方法可以在 DynamoDB 设置中强制忽略传入请求(丢弃传入请求或发送错误消息),逻辑可能会简单得多。
在普通 RDB 中,如果我们尝试使用现有的主键添加新项目,数据库将返回错误消息,而不会更改数据库中存储的原始数据。
然而,在 DynamoDB 中,无论我们使用现有主键放置项目还是更新项目,它只是默默地更改存储在数据库中的原始数据。
有什么想法吗?
解决方案
正如您所提到的,如果项目已经存在,DynamoDB 将使用您提供的主键更新它。下面的文章向您展示了如何发出条件 PUT 请求,该请求将在尝试插入已存在的项目时失败(基于主键)。
http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/API_PutItem.html
要防止新项目替换现有项目,请使用包含 attribute_not_exists 函数的条件表达式,并将属性名称用作表的分区键。由于每条记录都必须包含该属性,因此 attribute_not_exists 函数仅在不存在匹配项时才会成功。
推荐阅读
- mongodb - 无法使用 MongoDB Scala 驱动程序连接到 MongoDB
- javascript - 如何通过适当的身份验证使公众可以访问本地 mysql 服务器数据库
- excel - 如何从我的excel表中计算每天的总和?
- javascript - 从父对象中过滤嵌套对象
- kubernetes - 使用 StorageOS 的 Kubernetes 上的 FailedAttachVolume 错误
- excel - 如何从 btnclass 网络抓取中提取属性详细信息
- javascript - 在 knockout.js 中具有 2 个复选框的互补状态
- lisp - Common Lisp 值的防御性副本
- javascript - 如何停止循环数组的方法?
- laravel - 如何从控制器中访问 Laravel 响应对象?