根据我在Google文档和其他SO问题中所阅读的内容,keys_only查询应返回非常一致的结果(例如here和here)。
我的代码看起来像这样:
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: 这发生在开发服务器上,我还没有在生产中测试过它。
答案 0 :(得分:5)
存在最终一致性,因为数据存储需要时间来更新所有索引。仅键查询与所有其他查询相同,除了它告诉数据存储区 - 我不需要整个实体,只需返回密钥即可。查询仍然查看索引以获取结果列表。
相反,按键获取实体不需要查看索引,因此它总是非常一致。