【发布时间】:2014-04-27 13:15:15
【问题描述】:
使用 AppEngine appstats 我分析了我的查询,并注意到尽管文档说查询需要读取一次,但使用 ndb.OR(或扩展为 OR 的 .IN)的查询需要 n 次读取(n 等于 OR 子句的数量)。
例如:
votes = (Vote.query(ndb.OR(Vote.object == keys[0], Vote.object == keys[1]))
.filter(Vote.user_id == user_id)
.fetch(keys_only=True))
此查询需要 2 次读取(匹配 0 个实体)。如果我将 ndb.OR 替换为 Vote.object.IN,则读取次数等于我传递给读取的数组的长度。
这种行为有点与文档相矛盾。
我想知道其他人是否也遇到过同样的情况,这是否是 AE、文档或我的理解中的错误。
谢谢。
【问题讨论】:
-
你的理解有问题。查询的成本是针对基本查询的。阅读它如何执行 OR 和 IN,您会看到它创建多个查询然后合并数据,因此需要多个查询成本。
-
谢谢。我实际上试图找到提到类似这样的东西,但找不到任何东西。
-
它在文档中并不是特别明确,但是如果您阅读 ndb 查询文档,它就在那里(有点;-) 再读一次 developers.google.com/appengine/docs/python/ndb/queries
标签: google-app-engine app-engine-ndb