我正在运行一个查询,它当前返回 1400 个结果,因此我在日志文件中收到以下警告:
com.google.appengine.api.datastore.QueryResultsSourceImpl logChunkSizeWarning:此查询在 FetchOptions 中没有设置块大小,并且返回了 1000 多个结果。如果此大小的结果集对于此查询很常见,请考虑设置块大小以提高性能。
我在任何地方都找不到关于如何实际实现这一点的任何示例,这里有一个关于 python 的问题,但是由于我使用 java 并且不懂 python,我正在努力翻译它。
此外,这个查询(如下)需要 17226cpu_ms 来执行,这感觉太长了,我什至无法想象如果我说 5000 个联系人并且需要在客户端搜索它们会发生什么(就像你对 googlemail 联系人所做的那样! )
我的代码是:
int index=0;
int numcontacts=0;
String[][] DetailList;
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
Query query = pm.newQuery(Contact.class, "AdminID == AID");
query.declareParameters("Long AID");
query.setOrdering("Name asc");
List<Contact> Contacts = (List<Contact>) query.execute(AdminID);
numcontacts=Contacts.size();
DetailList=new String[numcontacts][5];
for (Contact contact : Contacts)
{
DetailList[index][0]=contact.getID().toString();
DetailList[index][1]=Encode.EncodeString(contact.getName());
index++;
}
} finally {
pm.close();
}
return (DetailList);
我在这里找到了以下两个条目:
但实际上都没有详细说明如何实施或使用这些选项。我猜它是一个服务器端进程,我猜你打算设置某种循环来一次抓取一个块,但我该怎么做呢?
- 我是否在循环内调用查询?
- 我怎么知道循环多少次?
- 我是否只检查返回的第一个块小于块大小的条目数?
如果没有实际的例子可循,我怎么能找到这样的东西?在我看来,这里的其他人似乎“只知道”怎么做..!
对不起,如果我没有以正确的方式提出问题,或者我只是一个对此感到迟钝的新手,但我不知道还有什么地方可以解决这个问题!