为什么 keys_only 查询没有返回高度一致的结果?
Why is a keys_only query not returning strongly consistent results?
根据我在 Google 文档和其他 SO 问题中阅读的内容,keys_only 查询应该 return 高度一致的结果(例如 here and 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 查询 returned 过时的结果。谁能给我解释一下这是怎么回事?
编辑 1:
这发生在开发服务器中,我没有在生产中测试它。
存在最终一致性,因为数据存储需要时间来更新所有索引。仅键查询与所有其他查询相同,除了它告诉数据存储 - 我不需要整个实体,只需 return 我的键。查询仍然查看索引以获取结果列表。
相比之下,通过key获取实体不需要查看索引,因此始终是强一致的。
根据我在 Google 文档和其他 SO 问题中阅读的内容,keys_only 查询应该 return 高度一致的结果(例如 here and 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 查询 returned 过时的结果。谁能给我解释一下这是怎么回事?
编辑 1: 这发生在开发服务器中,我没有在生产中测试它。
存在最终一致性,因为数据存储需要时间来更新所有索引。仅键查询与所有其他查询相同,除了它告诉数据存储 - 我不需要整个实体,只需 return 我的键。查询仍然查看索引以获取结果列表。
相比之下,通过key获取实体不需要查看索引,因此始终是强一致的。