Objectify 3.使用query.count生成统计信息出错:“偏移量可能不高于1000”

时间:2014-01-14 10:26:22

标签: java google-app-engine objectify

我们拥有Google App Engine(GAE),App Engine数据存储区和Objectify v3(访问数据库)的应用程序。
我们为每个用户生成统计信息,生成它们的查询如下:

ofy() //
.query(Entity.class) //
.filter("owner in ", keyUsers)
.count();  

其中 keyUsers 是Key列表。

几天前,所有这类查询都开始抛出异常:

java.lang.IllegalArgumentException: offset may not be above 1000
at com.google.appengine.api.datastore.DatastoreApiHelper.translateError(DatastoreApiHelper.java:39)
at com.google.appengine.api.datastore.DatastoreApiHelper$1.convertException(DatastoreApiHelper.java:76)
at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:94)
at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:86)
at com.google.appengine.api.datastore.FutureHelper.getInternal(FutureHelper.java:71)
at com.google.appengine.api.datastore.FutureHelper.quietGet(FutureHelper.java:32)
at com.google.appengine.api.datastore.QueryResultsSourceImpl.peekQueryResultAndIfFirstRecordIndexList(QueryResultsSourceImpl.java:161)
at com.google.appengine.api.datastore.QueryResultsSourceImpl.loadMoreEntities(QueryResultsSourceImpl.java:104)
at com.google.appengine.api.datastore.QueryResultIteratorImpl.ensureInitialized(QueryResultIteratorImpl.java:130)
at com.google.appengine.api.datastore.QueryResultIteratorImpl.getNumSkipped(QueryResultIteratorImpl.java:171)
at com.google.appengine.api.datastore.PreparedQueryImpl.countEntities(PreparedQueryImpl.java:109)
at com.googlecode.objectify.impl.QueryImpl.count(QueryImpl.java:410)

即使 keyUsers 有一个键,它也会引发异常 我们在每个实体中都有很多记录(超过一千个),但结果总是小于100个。

我们暂时解决了为每个查询添加限制的问题:

ofy() //
.query(Entity.class) //
.filter("owner in ", keyUsers)
.limit(1000)
.count();

但这不是理想的解决方法。

我有两个问题:

0 个答案:

没有答案