DynamoDB一致读取全局二级索引

Tsa*_*nas 6 asp.net amazon-web-services amazon-dynamodb asp.net-mvc-5 asp.net-identity

为什么我无法获得对全局二级索引的一致读取?

我有以下设置:

表格:tblUsers(id为哈希)

全球二级索引:(tblUsersEmailIndex电子邮件为哈希,id为属性)

全局二级索引:(tblUsersUsernameIndex用户名为哈希,ID为属性)

我查询索引以检查是否存在给定的电子邮件或用户名,因此我不创建重复的用户。

现在,问题是我无法对索引进行一致的读取。但是为什么不呢?这是我实际上需要最新数据的少数情况之一。

根据AWS文档:

关于全局二级索引的查询仅支持最终一致性。

在正常情况下,表数据的更改会在不到一秒钟的时间内传播到全局二级索引。但是,在某些不太可能的故障情况下,可能会出现更长的传播延迟。因此,您的应用程序需要预见并处理以下情况:对全局二级索引的查询返回的结果不是最新的

但是我该如何处理这种情况?如何确定给定的电子邮件或用户名不存在于数据库中?

Mir*_*cea 8

你可能已经经历过这个:http : //docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html

简短的回答是你不能用全局二级索引做你想做的事情(即它总是最终的一致性)。

这里的一个解决方案是有一个单独的表,其中包含您感兴趣的属性作为键,并在那里进行一致的读取。您需要确保在插入新实体时进行更新,并且您还必须担心插入成功但不在主表中的边缘情况(即您需要确保它们同步)

另一种解决方案是扫描整个表,但如果表很大,这可能会有点过分。

如果有人使用相同的电子邮件创建 2 个帐户,您为什么要关心?您可以只使用用户名作为主哈希键,而不强制执行电子邮件唯一性。