最终一致性对 GAE(HRD)意味着什么?

What eventual consistency means on GAE (HRD)?

来自 GAE 文档 A query may include entities in the result set that should not have been included, or exclude entities that should have been included. 这是否意味着 SELECT ORDERS FROM USERX 这样的查询可以 returns 来自 USERX 以外的其他用户的结果?

这意味着您可能会得到一个结果集,其中包含过时的实体,或者实际上已被删除的实体,但无论如何都不会包含错误的实体。换句话说,您可能会看到缓存的结果,而不是非常新鲜的结果。

如果这是一个问题,那么您将不得不使用祖先并将结果限制为单个实体组。

是的 - 您可以考虑在一定程度上落后于实体的索引。如果你做一个get-by-key,你总是会得到强一致性——,你总是会得到'correct'(最新) entity/ies.

每当您执行(非祖先)查询时,Datastore 都会扫描一个或多个索引。这些索引 可能 不(还)反映实体中的最新值。 "Eventually",它们将保持一致,但无法保证何时(实体必须跨不同位置复制并更新相关索引)。

因此,如果可以(例如,如果您知道要获取的 entity/ies 是什么),按键获取 始终如一获得强一致性并避免索引扫描。

如果你需要对一些强一致性的实体进行查询,你需要给这些实体一个共同的ancestor,但要小心,因为它以后经常会限制你(特别是写入速率)。