gpt4 book ai didi

python - Google Appengine 数据存储何时可以返回陈旧数据?

转载 作者:太空宇宙 更新时间:2023-11-04 03:50:06 25 4
gpt4 key购买 nike

我可以从这段代码中得到的结果有什么不同吗:

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 当我实际通过 key 获得模型时。

那么在那种情况下,myFlag 的数据来自哪里?

是否通过键获取实体确保跨数据存储节点复制并返回最新数据,而通过查询获取它只是从最近的数据存储节点检索数据?

编辑:我阅读了这篇文章,并假设 Cloud Datastore 的工作方式与 Appengine Datastore 相同,我的问题的答案是肯定的,从查询返回的实体可能具有过时值。

https://cloud.google.com/developers/articles/balancing-strong-and-eventual-consistency-with-google-cloud-datastore#h.tf76fya5nqk8

最佳答案

是的,正如您提到的,查询可能会返回过时的值。在进行查询时,数据存储选择性能而不是一致性。

更深入:对于实体组,每个节点都有一个尚未应用的写入日志。当您执行读取或祖先查询时,涉及的实体组首先应用其日志。但是,当您执行普通查询时,结果可能来自任何实体组,因此不会 catch 实体组。但是在使用第一个代码示例时要小心,用于实际查找这些实体的索引可能不是最新的。因此很可能无法获得所有具有 myFlag = True 的实体。如果您有兴趣,我建议您阅读 Megastore paper .

关于python - Google Appengine 数据存储何时可以返回陈旧数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21731385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com