Tsa*_*nas 6 asp.net amazon-web-services amazon-dynamodb asp.net-mvc-5 asp.net-identity
为什么我无法获得对全局二级索引的一致读取?
我有以下设置:
表格:tblUsers(id为哈希)
全球二级索引:(tblUsersEmailIndex电子邮件为哈希,id为属性)
全局二级索引:(tblUsersUsernameIndex用户名为哈希,ID为属性)
我查询索引以检查是否存在给定的电子邮件或用户名,因此我不创建重复的用户。
现在,问题是我无法对索引进行一致的读取。但是为什么不呢?这是我实际上需要最新数据的少数情况之一。
根据AWS文档:
关于全局二级索引的查询仅支持最终一致性。
在正常情况下,表数据的更改会在不到一秒钟的时间内传播到全局二级索引。但是,在某些不太可能的故障情况下,可能会出现更长的传播延迟。因此,您的应用程序需要预见并处理以下情况:对全局二级索引的查询返回的结果不是最新的。
但是我该如何处理这种情况?如何确定给定的电子邮件或用户名不存在于数据库中?
你可能已经经历过这个:http : //docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html
简短的回答是你不能用全局二级索引做你想做的事情(即它总是最终的一致性)。
这里的一个解决方案是有一个单独的表,其中包含您感兴趣的属性作为键,并在那里进行一致的读取。您需要确保在插入新实体时进行更新,并且您还必须担心插入成功但不在主表中的边缘情况(即您需要确保它们同步)
另一种解决方案是扫描整个表,但如果表很大,这可能会有点过分。
如果有人使用相同的电子邮件创建 2 个帐户,您为什么要关心?您可以只使用用户名作为主哈希键,而不强制执行电子邮件唯一性。
| 归档时间: |
|
| 查看次数: |
2846 次 |
| 最近记录: |