谷歌应用引擎和分页
Posted
技术标签:
【中文标题】谷歌应用引擎和分页【英文标题】:Google app engine and paging 【发布时间】:2011-02-08 17:30:47 【问题描述】:如何编写一个查询,从数据存储中的 10000 个对象的集合中选择项目 2000-2010。
我知道在 GQL 中可以这样做:
select * from MyObject limit 10 offset 2000
根据documentation,当使用offset
时,引擎仍将获取所有行,只是不返回它们,从而使查询以与offset
的值线性对应的方式执行。
有没有更好的方法?例如使用伪 ROWNUM
列,就像在其他类型的数据存储中一样。
【问题讨论】:
【参考方案1】:除了使用游标之外,您还可以使用排序方法。例如:
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
【讨论】:
【参考方案2】:除了缓存结果外,没有办法有效地使用偏移量进行分页。但是,您可以使用datastore cursors 来使用“书签”类型的方法实现分页。
【讨论】:
以上是关于谷歌应用引擎和分页的主要内容,如果未能解决你的问题,请参考以下文章