谷歌应用引擎和分页

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 来使用“书签”类型的方法实现分页。

【讨论】:

以上是关于谷歌应用引擎和分页的主要内容,如果未能解决你的问题,请参考以下文章

谷歌应用引擎 GQL,如何以毫秒精度使用日期时间进行分页

如何在谷歌应用引擎和计算引擎之间建立私有连接?

谷歌应用引擎(路径文件)

谷歌应用引擎上的真实项目

谷歌应用引擎中服务之间的延迟

数据库设计——谷歌应用引擎