如何减少 App Engine 中的查询配额?

How to reduce the query quota in App engine?

用户将在某个时刻浏览(分页)Datastore 12 中已排序的实体。

 DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();

//get url parameter
int next = Integer.parseInt(request.getParameter("next") );
//query with sort
Query query = new Query("page").addSort("importance", SortDirection.DESCENDING );
PreparedQuery pq = datastore.prepare(query);

//get 12 entity from query result from the index (next)
FetchOptions options = FetchOptions.Builder.withLimit(12).chunkSize(12).offset(next);

for (Entity result : pq.asIterable(options)) {
    Text text = (Text)result.getProperty("content");
    Document doc = Jsoup.parse(text.getValue());

    //display the content
    .....
}

问题是当下一个变量增加时,配额消耗增加得更快!

比如next为6000时,配额消耗40%,而next为10时,配额消耗不到1%。

如果您使用 Google App Engine 游标来促进分页,那么您的查询将会得到优化。不建议使用大偏移量。在 GAE 中进行分页的推荐方法是 cursors.