1

我正在使用带有 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 仅在涉及不在同一实体组中的实体时才最终保持一致,但据我所知,嵌入式实体最终会成为包含它的实体上的更多字段,即只有一个涉及的实体,并且一切都应该高度一致。

我错了吗?

4

2 回答 2

2

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

这是我创建的问题的一个线程。首先,确保您打开了 STRONG 一致性(我相信最终是默认设置)。

第二 - 从那个线程,这里有一个重要的注意事项:

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

因此,如果您正在执行跨实体查询,它可能是 EVENTUAL 一致的,无论您是否将 STRONG 设置为默认值。因此,请尝试打开 STRONG 一致性,然后对呈现视图所需的所有实体执行单次获取键查询,而不是跨实体的单个查询。

于 2012-07-31T18:58:22.230 回答
1

您还可以发出祖先查询,您的查询将是强一致的

于 2012-08-01T04:18:37.800 回答