2

我目前对 Google AppEngine 的 High Replication DataStore 的理解如下:

  • 单个实体的Getsputs始终是强一致的,即一旦这个条目的put完成,以后的get将永远不会返回比完成的put更早的版本。或者,更准确地说,只要任何一个get返回新版本,以后的get都不会再返回旧版本。

  • 多个实体的获取放置是高度一致的,如果它们属于同一个祖先组并且在事务中执行,即如果我有两个实体都在事务中被放置和“同时”读取在不同的使用get进行事务, get将返回两个条目的旧版本或两个条目的新版本,具体取决于put事务是否在get时完成,但它永远不会返回旧值一个实体的新价值和另一个实体的新价值。

  • 具有祖先过滤器的查询可以选择为强一致或最终一致,其中强一致查询需要更长的时间才能完成,但将始终返回在此祖先的同一事务中更新的所有实体的“相同”版本(旧的或新的)组而不是一些旧版本和一些新版本。

  • 跨越祖先的查询总是最终一致的,即可能返回一个结果实体的旧版本和另一个结果实体的新版本。

我做对了吗?这实际上记录在任何地方吗?(我只在这里(在第一个和第二个“注释”之间)和这里找到了一些关于查询一致性的文档,但它没有谈论获取放置......)

4

1 回答 1

1

是的,你是对的。他们只是措辞略有不同:

https://developers.google.com/appengine/docs/java/datastore/

一开始就有5个点形式特征。最后两个描述了您的问题,除了它们指的是“读取”而不是“获取”。

这可能会增加您的困惑,但是当它们表示“读取”或“获取”时,它实际上意味着直接获取实体 - 通过键或 id。如果您使用键或 id 以外的属性调用 python 'get' 函数,它实际上是在发出一个查询,该查询最终是一致的(除非它是祖先查询)。

于 2013-08-17T03:19:59.990 回答