谷歌应用引擎分页和光标

时间:2015-08-04 06:28:21

标签: python google-app-engine cursor google-cloud-datastore

我尝试使用python datastore api在Google应用引擎上的应用中实现分页。我的要求是使用无限列表显示用户数据。我当前的实现是使用这样的东西:

    //retrieve current_cursor
    all_data = my_data.all().order('-created')
    data = all_data.fetch(limit=10, start_cursor=current_cursor)
    current_cursor = all_data.cursor()
    //save current_cursor

根据我的理解,游标适用于查询的result_set,这节省了后续查询的时间(但不是第一个查询),我是否正确?

我担心的是,如果我们有大量数据,第一次查询仍然会太慢。为了使第一次查询更快,我的想法是,我不是查询所有数据,而是将查询分成多个较小的查询,例如使用('created >', certain_date)设置过滤器并使用游标获取结果每一套。

然而,缺点是我必须自己维护certain_date,如果不明智地选择它,可能会花费我很多数据库读取。

所以我的问题是,我能正确理解光标吗?此外,是否有更好的方法来使用谷歌数据存储来支持这个或任何建议来实现这一点?谢谢!

1 个答案:

答案 0 :(得分:2)

不,第一次查询不会慢。使用游标的优点是它只处理特定的集合,具体取决于游标位置和限制,这与处理整个数据集的偏移和限制组合不同,只是显示所需的部分。

  

查询游标允许应用程序以方便的批量检索查询结果,而不会产生查询偏移的开销。

关于建议,对于分页,光标是最佳选择,其他建议是使用Projections,尝试使用get_by_id充分利用memcache。