我可以从这段代码中得到的结果是否有所不同:
query = MyModel.all(keys_only=True).filter('myFlag', True)
keys = list(query)
models = db.get(keys)
与此代码相比:
query = MyModel.all().filter('myFlag', True)
models = list(query)
即,models
两者都一样吗?
如果不是,为什么不呢?我曾认为最终一致性用于描述模型索引如何需要一段时间才能更新,因此可能与最近写入的数据不一致。
但是我最近遇到了一个案例,我实际上是从第二个查询中获取过时的数据,其中model.myFlag
是True
通过查询检索到的模型,但是False
当我实际上是通过键获取模型时。
那么在这种情况下,数据myFlag
来自哪里?
是不是通过键获取实体可以确保跨数据存储节点进行复制并返回最新数据,而通过查询获取实体只是从最近的数据存储节点检索数据?
编辑: 我阅读了这篇文章,并假设 Cloud Datastore 与 Appengine Datastore 的工作方式相同,我的问题的答案是肯定的,从查询返回的实体可能具有陈旧的值。