我有一个具有这些属性的用户对象。
id
(钥匙(、name
和email
我正在尝试确保这些属性在数据库中是唯一的。
如果数据库中已存在非键属性 email
和 name
中的任何一个,如何防止 put
/create
/save
操作成功?
我有一个表,tblUsers
有一个关键属性是id
。然后,我有两个全局二级索引,每个索引也有一个键属性,分别是第一个索引表的email
,第二个索引表name
。
我正在使用Microsoft .net身份框架,该框架本身会在创建用户之前检查具有给定名称或电子邮件的现有用户。
我预见的问题是检查现有用户和创建新用户之间的延迟。没有安全性,多个线程最终不会创建两个具有相同名称或电子邮件的用户。
dynamodb 只能对哈希范围表键强制唯一性(不适用于全局二级索引键(
在您的情况下,有 2 个选项:
1(在应用程序级别强制它 - 如果你的问题是安全,那么使用锁(缓存锁(
2(不要使用dynamodb(也许它不能满足您的要求(
我在本地使用 ehcache 来检查重复项。再添加一个检查,如果 ehcache 为空(由于某种原因,缓存已被重置(.通过查询 dynamoDb 来重新填充缓存。