我有一个具有这些属性的用户对象。id
(密钥)、name
和email
我试图确保这些属性在DB中是唯一的。
如果数据库中已经存在email
和name
这两个非键属性,如何阻止put
/create
/save
操作成功?
我有一个表tblUsers
,其中一个键属性是id
。然后我有两个全局二级索引,每个索引也有一个键属性,第一个索引表是email
,第二个索引表是name
。
我使用的是microsoft .net identity framework,在创建用户之前,它会检查现有用户是否具有给定的名称或电子邮件。
我预见到的问题是,检查现有用户和创建新用户之间的延迟。没有安全性,多个线程最终不会创建两个具有相同名称或电子邮件的用户。
3条答案
按热度按时间wooyq4lh1#
dynamodb可以强制唯一性只为哈希范围表键(不为全局二级索引键)
在你的情况下,有两种选择:
1)在应用程序级别强制它-如果你的问题是安全性,那么使用锁(缓存锁)
2)不要使用dynamodb(也许它不符合您的要求)
dpiehjr42#
我在本地使用ehcache来检查重复项。如果ehcache为空(由于某种原因,缓存已重置),则再添加一个检查。通过查询dynamoDb来重新填充缓存。
q8l4jmvw3#
我有同样的情况下,我发现我使用了相同的属性2次。