Java 客观化3。使用query.count生成统计信息时出错:“0”;偏移量不得超过1000“;

Java 客观化3。使用query.count生成统计信息时出错:“0”;偏移量不得超过1000“;,java,google-app-engine,objectify,Java,Google App Engine,Objectify,我们有一个带有Google App Engine(GAE)、App Engine数据存储和Objectify v3(用于访问数据库)的应用程序。 我们为每个用户生成统计信息,生成统计信息的查询如下: ofy() // .query(Entity.class) // .filter("owner in ", keyUsers) .count(); 其中keyUsers是一个密钥列表 几天前,所有此类查询都开始抛出异常: java.lang.IllegalArgumentException:

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

ofy() //
.query(Entity.class) //
.filter("owner in ", keyUsers)
.count();  
其中keyUsers是一个密钥列表

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

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有一个键,它也会引发异常。
我们在每个实体中都有许多记录(超过1000条),但结果总是少于100条

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

ofy() //
.query(Entity.class) //
.filter("owner in ", keyUsers)
.limit(1000)
.count();
但这不是解决问题的理想方法

我有两个问题:

  • 有什么问题?我发现了这个问题,但我不确定这是否是问题所在,因为我无法在locahost中重现这个问题
  • 如何更好地解决这个问题

您是否意识到计数根本没有效率?在计数时读取文档,这将花费与查询大小成比例的时间,并且在大型列表上会超时。这是错误的统计方法。你需要自己维护你的计数器。同样令人怀疑的是,你得到了偏移量问题,就好像计数是按偏移量而不是索引页在固定页面中循环一样。我刚刚开始遇到与你相同的问题。不是很有帮助,只是想让你知道你并不孤单:-)我们的代码已经稳定了6个月,所以这一定是GAE的一个变化触发了它。我刚刚删除了log.info(“q3=“+q3.count());然后错误消失了,所以似乎是count()才是问题所在,而不是结果本身。这最好是在GAE google组发布的-这是GAE问题,不是Objectify问题。我也有同样的问题。它突然启动,我们这边没有任何代码更改。有人知道为什么吗?