【问题标题】: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 列,就像在其他类型的数据存储中一样。

【问题讨论】:

    标签: google-app-engine gql


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

      【讨论】:

        猜你喜欢
        • 2015-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多