Mongoose 大数据量分页查询优化
最近遇到Mongoose 大数据量查询性能问题,经过不懈Google,找到了几种解决方案,在这里记录以下。
说到
Mongoose
分页查询,我们首先会想到limit
配合skip
来查询。Article.find({})
.skip(page * 5)
.limit(5)
.sort({'_id':-1})
.exec(cb);
根据传入的 page 来跳过相应的页数,在进行查询返回结果。
但当数据庞大时,这种查询方式就有性能问题了,有没有解决方案呢?
当然是有的。
1. 将上一页最后一条数据的_id传给服务器
我们可以以
_id
为主键,每次传递最后一条数据的ObjectId
,然后根据ObjectId
的比较来返回数据:Article.find({'_id': {"$lt": id}})
.limit(5)
.sort({'_id':-1})
.exec(cb);
依据主键的查询,速度会比
skip
跳转过得多。缺点: 当中间有删除或断点时,这种方式就难以执行了。
2. 从业务层面,只允许返回限定数量的数据
比如: 只提供100页的查询按钮(百度查询就是这样滴)。
缺点: 无法提供全部分页查询。
解决方案:提供模糊查询来让用户查询需要的数据
如有问题,欢迎在下方评论区留言!