我正在 Appengine 上使用 HRD。
假设我有一个跨实体组的查询(即不是祖先查询)。据我了解,此查询返回的结果集可能不一致:
例如,查询可能会返回 4 个实体 {A、B、C、D},即使第 5 个实体 E 与查询匹配。这是有道理的。
但是,在上面不一致的查询中,是否也存在集合中的任何结果本身不一致的情况(即它们的字段不是最新的)?也就是说,如果 A 有一个名为 foo 的属性,那么 foo 是否一致?
我的问题归结为,查询的哪一部分不一致 - 结果集、返回结果的属性,还是两者都不一致?
最佳答案
最终一致性适用于实体本身和索引。这意味着,如果您修改一个实体,然后使用仅匹配修改后的实体(而不是修改前的值)的过滤器进行查询,您将无法获得任何记录。这还意味着您可能会从当前版本与获取它们的索引条件不匹配的查询中获取实体。
您可以通过执行一致的获取来确保拥有实体的最新副本(尽管在事务之外,这相当没有意义,因为它可能在您执行获取时发生了变化),但没有等效的方法可以做到一致的索引查找。
关于google-app-engine - 最终一致性是否适用于查询结果集?或者返回的实体本身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8397739/