谷歌应用引擎和分页

8

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

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

select * from MyObject limit 10 offset 2000

根据文档,当使用offset时,引擎仍会获取所有行,只是不返回它们,因此使查询的性能与offset的值呈线性对应关系。

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

2个回答

6

使用偏移量进行分页是没有效率的方式,除非缓存结果。但是,您可以使用数据存储游标来实现一种“书签”式的分页。


2
除了使用光标之外,您还可以使用排序方式。例如:
SELECT * FROM MyObject ORDER BY field LIMIT 10;

对于前10个对象,然后对于接下来的10个对象,以此类推。

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

如果没有其他合适的字段,Field甚至可以成为一个键。以下是一个更完整的示例:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接