0

我在 GAE 数据存储区实验中发现了一些相当奇怪的东西。我正在使用 GAE SDK 1.7.5。而且我不确定我的发现是否正确。

基本上,我发现将实体放入数据存储区并进行计数不会返回正确的值,直到执行数据存储区获取。

如果您想深入挖掘,这里是我之前的 SO 问题中的实际代码:

高复制环境的持久性策略(Google App Engine)

我也尝试了一个类似的库:https ://github.com/koher/Koherent-App-Engine-Library-for-Java

我正在经历同样的发现。谁能帮我澄清一下我看到的这个问题?

4

2 回答 2

2

我假设您在启用最终一致性的本地开发服务器上获得此结果?

由于数据存储的最终一致性行为,您没有得到正确的计数。它就是这样儿的。

在开发服务器上,像 get() 这样的一致操作将导致后续查询显示一致的结果。这与生产服务器的行为不太一样。

于 2013-04-10T14:21:26.383 回答
0

您遇到了 HRD 的最终一致性属性。

Count 使用索引来获取结果。新实体保存后,索引是异步建立的,导致getafterput总是返回结果(强一致性),但queryput保证立即返回结果(最终一致性)。

文档在这个主题上有点含糊,但它确实提到getput强制“应用”阶段之后,可能会导致索引也被应用:请参阅第 1 点。在“数据存储写入的生命周期”的“返回值”部分。

So putand thenquery不能保证给您预期的结果,但是put, getandquery是(至少我是这样阅读文档的)。这可以解释你的发现。

于 2013-04-10T18:53:35.093 回答