为什么keys_only查询没有返回强一致的结果?

时间:2016-01-30 23:19:36

标签: python google-app-engine google-cloud-datastore app-engine-ndb

根据我在Google文档和其他SO问题中所阅读的内容,keys_only查询应返回非常一致的结果(例如herehere)。

我的代码看起来像这样:

class ClientsPage(SomeHandler):
    def get(self):
        query = Client.query()
        clients = query.fetch(keys_only=True)
        self.write(len(clients))

即使我使用keys_only = True参数获取结果,我也会在创建新的Client对象(这是一个根实体)后立即获得过时的结果。如果在插入之前有2个客户端对象,则在插入和重定向后它会一直显示2。我必须手动刷新页面才能看到数字更改为3。

我知道我可以使用祖先查询,但我首先测试一些东西,我很惊讶地发现keys_only查询返回过时的结果。任何人都可以向我解释一下发生了什么?

编辑1: 这发生在开发服务器上,我还没有在生产中测试过它。

1 个答案:

答案 0 :(得分:5)

存在最终一致性,因为数据存储需要时间来更新所有索引。仅键查询与所有其他查询相同,除了它告诉数据存储区 - 我不需要整个实体,只需返回密钥即可。查询仍然查看索引以获取结果列表。

相反,按键获取实体不需要查看索引,因此它总是非常一致。