2014-09-03 24 views
0

我想在许多实体中获取页面。如何分页ndb中的许多实体[GAE/Python]

型号为10000名的实体,
我希望得到一个指数5000

entities = Model.query().fetch(10, offset=5000) 

,但是,这是反模式。

使用光标模式,

entities, cursor, more = Model.query().fetch_page(10) // 0〜10 
entities, cursor, more = Model.query.fetch_page(10, start_cursor=cursor) // 10〜20 

这是获得一个开始光标。

cursor = ??? // how to get a cursor start index 5000. 

我想获得游标。
这是一个好主意吗?

回答

0

我不认为GAE支持随机访问,这就是为什么你需要抵消。我不明白你的问题,你知道光标模式,它已经返回光标。我认为光标是用于分页的,偏移一般是为了跳过一些实体。

+0

是的,但偏移量的“奇怪”是它仍然读取偏移的数据。随着数据存储的建立方式,您最终会在扫描结果之前“扫描”您的偏移量......这意味着您可能必须支付比预期更多的费用,因为该偏移量 – Patrice 2014-09-03 22:48:04

+0

正如我所提到的,偏移量是一般的办法。如果您的分页只有next和prev应该可以使用获取页面。我认为在所有数据库中,如果你抵消了,它仍然会扫描你的抵消额。它只是在GAE你得到它。类似的问题http://stackoverflow.com/questions/10291291/what-is-the-cost-difference-between-paging-with-a-cursor-or-using-offset – marcadian 2014-09-03 23:37:58

+0

我并不是说关于你的答案具体,更多的是对@kuninori的警告。明显偏移总是扫描。但正如你所说,在GAE你付出了代价。如果我遇到同样的问题,我确实会进行分页和获取:) – Patrice 2014-09-03 23:40:54