AppEngine NDB查询和datastore_v3.Next()

时间:2015-06-03 23:14:42

标签: google-cloud-datastore app-engine-ndb

我有一些AppEngine操作花费的时间比预期的多,所以我一直在查看GAE控制台上的跟踪日志以获得一些见解。

其中一个包含一个简单的查询来排序实体,例如

(data, cursor, more) = query.order(-cls.created).fetch_page(RESULTS_PER_PAGE, start_cursor=cursor)

但是根据日志,如果我正确理解了跟踪(下面的截图),操作运行2查询:一个获取数据(RunQuery),一个查找是否有更多数据(下一个)。两者都没有花太多时间,但两者之间有600毫秒的延迟。

我想知道为什么这种延迟太长了?我已经看到了一些关于Next()的问题,其中查询需要更长时间(How do I prevent application calling datastore_v3.next() when calling get_multi?),但在我的情况下,Next()的时间非常短。瓶颈似乎是两者之间的时间。在很多情况下会发生这种情况 - 以前的NDB查询只是一个例子。

所以:

  1. 我可以避免调用Next()或
  2. 我可以最小化RunQuery和Next()
  3. 之间的延迟

    我正在使用标准实例,除了入站热备之外,我的app.yaml文件中没有任何特定的设置。

    enter image description here

2 个答案:

答案 0 :(得分:1)

使用.fetch()代替.fetch_page() ...前者达到限制并停止...它不会返回有关是否有更多结果的信息

答案 1 :(得分:0)

这只是推测,但我认为查询结果被分成多个块(.Next)的原因是因为每个块的大小。如果您可以减小实体的大小或使用Projection queries缩小结果,则可能会看到更好的效果。