【问题标题】:google app engine paging and cursor谷歌应用引擎分页和光标
【发布时间】:2015-10-26 10:30:54
【问题描述】:

我正在尝试使用 python 数据存储 api 在谷歌应用引擎上的应用中实现分页。我的要求是使用无限列表显示用户数据。我当前的实现是使用带有类似这样的光标:

    //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

据我了解,cursor 在查询的 result_set 上起作用,这样可以节省后续查询(但不是第一个)的时间,对吗?

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

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

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

【问题讨论】:

  • this 有帮助吗?您是否真的遇到性能问题?
  • 谢谢!我之前确实读过这篇文章,但仍然无法弄清楚,仍然觉得第一次查询需要更长的时间。现在看来可能是其他事情。我会回去检查我的代码。

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


【解决方案1】:

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

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

关于建议,对于分页,游标是最好的选择,其他建议是使用Projections,尽量使用get_by_id来充分利用memcache。

【讨论】:

  • 啊。所以第一次它不会查询整个事情,而只是我获取的结果数?好像我都错了。谢谢。我还要看看 Projections。
猜你喜欢
  • 2011-02-08
  • 2020-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多