使用App Engine查询游标(Java - JDO)

Say*_*eji 2 java google-app-engine jdo google-cloud-datastore

我需要在我的结果提取中实现分页,所以在浏览时,我在Google Developer网站上获得了Query Cursors的链接,但文章解释了使用低级API的Query Cursors的使用(我避免像瘟疫这样的事情) .我在JDO上看到的所有setRange(start, end)内容(如果我是对的)都不是那么有效,因为你仍然需要支付在获取和丢弃范围之前的结果所涉及的开销.如何在App Engine数据存储区之上使用JDO中的Query Cursors?

Aja*_*jax 5

来自appengine文档:

Query q = pm.newQuery(Person.class);
q.setRange(0, 20);

List<Person> results = (List<Person>) q.execute();
// Use the first 20 results

Cursor cursor = JDOCursorHelper.getCursor(results);
Run Code Online (Sandbox Code Playgroud)

https://developers.google.com/appengine/docs/java/datastore/jdo/queries

然后,使用光标(也在提供的文档中,您应该阅读):

String cursorString = cursor.toWebSafeString();
// Send cursor around as string


// Query q = the same query that produced the cursor;
Cursor cursor = Cursor.fromWebSafeString(cursorString);
Map<String, Object> extensionMap = new HashMap<String, Object>();
extensionMap.put(JDOCursorHelper.CURSOR_EXTENSION, cursor);
q.setExtensions(extensionMap);
q.setRange(0, 20); //note, the same range; 
//the query should cover everything you expect to load.
q.execute();
Run Code Online (Sandbox Code Playgroud)

  • PS - 要使用游标,您必须请求超过您想要的数量,并选择何时结束查询; 要么你获得的结果少于一个页面,要么得到更多,并选择提前结束(并将光标发回以继续下一个查询).使用查询块大小来避免请求多个完整页面.此外,请注意使用不返回结果的查询的请求将发回用于构建查询的相同游标.空光标=没有结果.相同的光标=没有新的结果. (3认同)