DynamoDB 避免重复的非键属性

DynamoDB avoid duplicate non-key attributes

我有一个具有这些属性的用户对象。

id(键)、nameemail

我正在努力确保这些属性在数据库中是唯一的。

如何防止 put/create/save 操作成功,如果是非键属性 emailname,已经存在于数据库中?

我有一个 table,tblUsers,其中一个键属性是 id。 然后我有两个全局二级索引,每个都有一个键属性,第一个索引是email-table,第二个是name

我正在使用 Microsoft .net 身份框架,它会在创建用户之前检查具有给定名称或电子邮件的现有用户。

我预见到的问题是检查现有用户和创建新用户之间的延迟。没有安全性,多个线程不会最终创建两个具有相同名称或电子邮件的用户。

dynamodb 只能为散列范围 table 键强制唯一性(不适用于全局二级索引键)

您的情况有 2 个选项:

1) 在应用程序级别强制执行 - 如果您的问题是安全性,则使用锁(缓存锁)

2) 不要使用 dynamodb(可能无法满足您的要求)

我正在本地使用 ehcache 检查重复项。再添加一项检查 ehcache 是否为空(由于某种原因,缓存已被重置)。通过查询 dynamoDb 重新填充缓存。