DynamoDb最终一致性:索引还是记录?

时间:2020-06-08 22:40:31

标签: amazon-web-services amazon-dynamodb

在DynamoDb中,默认情况下,使用全局二级索引的读取最终是一致的:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html#GSI.Querying

但是,这是否意味着对GSI的查询可能返回以下之一:

  1. 具有旧值的旧记录集
  2. 具有新值的旧记录集
  3. 新的记录集,但记录的属性将是旧的

示例说明:

  • 表Foo有3个字段:a,b,c
  • Foo有一个主键a和一个b上的GSI
  • Foo从以下记录开始: {a:1,b:苹果,c:蓝色} {a:2,b:橙色,c:绿色}

  • 对foo的写操作会将a = 2的记录更新为: {a:2,b:苹果,c:红色}

  • 另一个写操作将a = 1的记录更新为: {a:1,b:苹果,c:橙色}

  • 写入后,假设存在一些延迟,并且在GSI一致之前,使用GSI对表进行读取

  • 查询使用GSI获取所有记录,其中b =苹果

  • 此查询将返回:

结果X-设置错误但属性值正确: {a:1,b:苹果,c:橙色}

结果Y-设置正确但属性值错误: {a:1,b:苹果,c:蓝色} {a:2,b:橙色,c:绿色}

结果Z-错误的集和错误的属性值: {a:1,b:苹果,c:蓝色}

还是其他?

1 个答案:

答案 0 :(得分:1)

GSI上的查询有时会返回旧的记录集

查询将返回新的记录集,但是记录的属性将是旧的吗?

这永远不会发生。