Lea*_*orm 7 python pagination couchdb
我在与CouchDB分页时看到的大部分研究表明,您需要做的是从您的视图中获取前十个(或多个)项目,然后记录最后一个文档的docid并将其传递到下一页.不幸的是,我可以看到该方法的一些明显问题.
不幸的是,我的研究表明,使用skip5000个记录或更大的数据集会大大减缓,一旦你到达任何真正巨大的东西,就会出现严重的瘫痪(对于一个页面,有10个记录的页面20000将花费大约20秒 - 是的,那里是生产中的大数据集).所以这不是一个真正的选择.
那么,我要问的是,有没有一种有效的方法来分页CouchDB中的视图结果,可以从任意页面获取所有项目?(我正在使用couchdb-python,但希望没有任何与客户端相关的内容.)
我是 CouchDB 的新手,但我想我也许可以提供帮助。我从《CouchDB:权威指南》中阅读了以下内容:
\n\n\n\n\n链表样式分页的一个缺点是...跳转到特定页面并不能真正起作用...如果您确实需要跳转到整个文档范围的页面...您仍然可以维护整数值索引作为视图索引,并采用混合方法来解决分页问题。
\n
— http://books.couchdb.org/relax/receipts/pagination
如果我没看错的话,你的案例的方法将是:
\n\n对于第 1 步,您需要实际将“page_seq”之类的内容作为字段添加到文档中。我没有关于如何获得这个数字的具体建议,并且很想知道人们的想法。为了让这个方案发挥作用,它必须为每个新记录精确地增加 1,因此 RDBMS 序列可能会被淘汰(我熟悉的序列可能会跳过数字)。
\n\n对于第 2 步,您将编写一个带有地图函数的视图,如下所示(在 Javascript 中):
\n\nfunction(doc):\n emit(doc.page_seq, doc)\nRun Code Online (Sandbox Code Playgroud)\n\n对于第 3 步,您可以像这样编写查询(假设 page_seq 和页编号序列从 1 开始):
\n\nresults = db.view("name_of_view")\npage_size = ... # say, 20\npage_no = ... # 1 = page 1, 2 = page 2, etc.\nbegin = ((page_no - 1) * page_size) + 1\nend = begin + page_size\nmy_page = results[begin:end]\nRun Code Online (Sandbox Code Playgroud)\n\n然后你可以迭代 my_page.
\n\n这样做的一个明显缺点是 page_seq 假设您没有过滤视图的数据集,如果您试图让它与任意查询一起使用,您很快就会遇到麻烦。
\n\n欢迎提出意见/改进。
\n| 归档时间: |
|
| 查看次数: |
689 次 |
| 最近记录: |