Google 应用引擎和分页
如何编写一个查询,从数据存储中 10000 个对象的集合中选择第 2000-2010 个项目。
我知道可以在 GQL 中这样做:
select * from MyObject limit 10 offset 2000
根据文档< /a>,当使用 offset
时,引擎仍然会获取所有行,只是不返回它们,从而使查询以与 offset
的值线性对应的方式执行代码>.
还有更好的办法吗?例如使用伪ROWNUM
列,就像在其他类型的数据存储中可以做的那样。
How would one go about writing a query that selects items 2000-2010 out of a collection of 10000 objects in the data store.
I know that it can be done like this in GQL:
select * from MyObject limit 10 offset 2000
According to the documentation, when using an offset
the engine will still fetch all the rows, only not return them, thus making the query perform in a way that corresponds linearly with the value of offset
.
Is there any better way? Such as using a pseudo ROWNUM
column like one could do in other types of data stores.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
除了缓存结果之外,没有办法使用偏移量有效地分页。不过,您可以使用数据存储区游标来实现分页使用“书签”类型的方法。
There's no way to efficiently page using offsets, except to cache the results. You can, however, use datastore cursors to implement paging using a 'bookmark' type approach.
除了使用游标之外,您还可以使用排序方法。例如:
对于前 10 个对象,然后对于接下来的 10 个对象,等等。
如果您没有其他合适的字段,字段甚至可以是键。以下是更完整的示例:
http://code.google.com/appengine/articles /paging.html
Besides using cursors you can also use a sort order approach. For example:
for the first 10 objects and then for the next 10 objects, etc.
Field could even be a key if you don't have another appropriate field. Here is a more complete example:
http://code.google.com/appengine/articles/paging.html