app引擎中的DatastoreTimeoutException用于基本查询

时间:2013-07-04 18:06:37

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

我们最近开始为这个基本查询获得大量的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));

该表有aprox。 150万个实体。这是正常的数据存储行为吗?

更新:如果我们删除过滤器,它会更好地工作。当然,我们需要过滤器,因此从长远来看,这不是解决方案。

1 个答案:

答案 0 :(得分:0)

更改为使用asIterator代替asList

来自docs

  

使用时迭代查询结果   PreparedQuery.asIterable()和PreparedQuery.asIterator()方法,   数据存储区批量检索结果。默认情况下每批次   包含20个结果,但您可以使用更改此值   FetchOptions.chunkSize()。您可以继续迭代查询   结果,直到返回所有结果或请求超时。