我们拥有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();
但这不是理想的解决方法。
我有两个问题: