基本查询的应用程序引擎中出现DatastoreTimeoutException



我们最近开始为这个基本查询得到很多DatastoreTimeoutException:

select id from Later where at < '2013-07-04' limit 500 (Some Pseudo SQL)

在代码中,它看起来像:

    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    Query query = new Query("Later").setKeysOnly();
    Filter f = new FilterPredicate("at",FilterOperator.LESS_THAN, new Date());
    query.setFilter(f);
    query.addSort("at", SortDirection.DESCENDING);
    PreparedQuery pq = datastore.prepare(query);
    return pq.asList(FetchOptions.Builder.withLimit(500));

这张桌子有一张桌子。150万个实体。这是正常的数据存储行为吗?

更新:如果我们去掉过滤器,效果会更好。当然,我们需要过滤器,所以从长远来看,这不是一个解决方案。

更改为使用asIterator而不是asList

来自文档:

当使用PreparedQuery.asIterable()和PreparedQuery.asIterator()方法数据存储以批方式检索结果。默认情况下,每个批次包含20个结果,但您可以使用FetchOptions.chunkSize()。您可以继续遍历查询结果,直到全部返回或请求超时。

相关内容

  • 没有找到相关文章

最新更新