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