嵌入式实体是否高度一致?

时间:2012-07-31 18:06:22

标签: google-app-engine google-cloud-datastore requestfactory objectify

我正在使用带有Objectify和RequestFactory的App Engine(Java)。

我的实体存储了一些字段和嵌入式实体ArrayList。嵌入式实体有自己的几个字段。因此,示例实体可能如下所示:

name: Bob
email: bob@example.com
todo.description: ["Pick up food", "Wash car", "Exercise"]
todo.importance: [1, 5, 3]

我有一个DataGrid,它可以提取嵌入的实体列表并显示它。如果单击某个按钮,则会将新项目添加到嵌入式实体中,该实体将保持不变并刷新数据网格。

问题在于它不是高度一致的。大多数情况下,DataGrid会使用最新数据成功刷新,但有时它只显示旧数据,您必须刷新页面才能显示新结果。

据我所知,App Engine最终只与不在同一实体组中的实体保持一致,但据我所知,嵌入式实体最终只是包含它的实体上的更多字段,即那里只涉及一个实体,一切都应该高度一致。

我错了吗?

2 个答案:

答案 0 :(得分:2)

http://code.google.com/p/googleappengine/issues/detail?id=6326

这是我创建的问题的一个主题。首先,确保你打开STRONG一致性(我相信最终是默认的)。

第二 - 从那个帖子,这是一个重要的注释:

  

强一致性标志意味着对于e get by key或实体   组查询,您将与这些约束强烈一致,   但是,“全局”(实体无根)查询仍将始终如一   最终一致。将标志设置为EVENTUAL一致性时,   所有查询将最终表现出一致的行为。

因此,如果您正在进行跨实体查询,则无论您是否将STRONG设置为默认值,它都可能是EVENTUAL一致的。因此,尝试启用STRONG一致性,然后通过关键查询对渲染视图所需的所有实体进行单一获取,而不是单个跨实体查询。

答案 1 :(得分:1)

您还可以发出祖先查询,您的查询将非常一致