谷歌应用引擎和分页

时间:2010-04-16 07:34:34

标签: google-app-engine gql

如何编写一个从数据存储中10000个对象的集合中选择项目2000-2010的查询。

我知道在GQL中可以这样做:

select * from MyObject limit 10 offset 2000

根据documentation,当使用offset时,引擎仍将获取所有行,但不返回它们,从而使查询以与{的值线性对应的方式执行{1}}。

还有更好的方法吗?例如使用伪offset列,就像在其他类型的数据存储中一样。

2 个答案:

答案 0 :(得分:6)

除了缓存结果之外,没有办法有效地使用偏移量进行分页。但是,您可以使用datastore cursors来使用“书签”类型方法实现分页。

答案 1 :(得分:2)

除了使用游标之外,您还可以使用排序顺序方法。例如:

SELECT * FROM MyObject ORDER BY field LIMIT 10;

表示前10个对象,然后是接下来的10个对象,等等。

SELECT * FROM MyObject WHERE field > largestFieldValueFromPreviousResult ORDER BY field LIMIT 10;

如果您没有其他适当的字段,字段甚至可能是关键字。这是一个更完整的例子:

http://code.google.com/appengine/articles/paging.html