Node.js 防止cursor.skip()在mongodb中成为IO绑定

Node.js 防止cursor.skip()在mongodb中成为IO绑定,node.js,mongodb,backbone.js,express,Node.js,Mongodb,Backbone.js,Express,我正在mongodb中使用skip和limit的组合开发一个集合分页。 在快速获取路径中,我获取参数,如第2页或第3页,依此类推。当它出现在第2页时,我跳过了10条记录,跳过了320条记录,以此类推 但是根据mongodb文档 The cursor.skip() method is often expensive because it requires the server to walk from the beginning of the collection or index to get

我正在mongodb中使用skip和limit的组合开发一个集合分页。 在快速获取路径中,我获取参数,如第2页或第3页,依此类推。当它出现在第2页时,我跳过了10条记录,跳过了320条记录,以此类推

但是根据mongodb文档

The cursor.skip() method is often expensive because it requires the server to walk from the beginning of the collection or index to get the offset or skip position before beginning to return result. As offset (e.g. pageNumber above) increases, cursor.skip() will become slower and more CPU intensive. With larger collections, cursor.skip() may become IO bound.
现在这让我很烦恼。它建议基于范围的导航,但在我只获取页码的情况下,我实际上如何做到这一点呢。它是如何防止这个过程成为IO绑定的


有详细的/解释过的答案吗?

这里有一些链接可以让您开始:至于停止IO绑定,这是因为skip不会使用索引,即它必须(可能)从磁盘加载文档,而基于范围的分页可以使用内存中的索引,如果没有,也可以轻松加载。对这些答案不满意。原因是,它们不允许您获得随机编号的分页机制。假设一个用户直接点击了第六页?最好的方法应该是什么。代码片段可能会有帮助:)是的,这是所有必须实现大规模分页的应用程序中的一个问题(大规模我指的是跳过100000行以上,如果你不这样做,那么忽略我给出的任何建议),如果你看其他应用程序,如facebook或Splunk或类似的应用程序,你会发现它们出于充分的理由不允许这样做,因为这会毁掉他们的数据库。在一天结束时,如果分页的数据太多,那么分页的想法就必须改变