首页 > 数据库 >MongoDB海量数据分页查询优化

MongoDB海量数据分页查询优化

时间:2022-12-06 15:13:53浏览次数:45  
标签:分页 翻页 海量 MongoDB 查询 skip 数据

MongoDB海量数据分页查询优化

一、背景

大量数据需从Mongo拿出来,一次性拿出来不科学,传统分页效率低下

二、传统方案

就是最常规的方案,假设 我们需要对文章 articles 这个表(集合) 进行分页展示,一般前端会需要传递两个参数:

– 页码(当前是第几页)
– 页大小(每页展示的数据个数)

skip 跳过的条目也会随之变大,而这个操作是通过 cursor 的迭代器来实现的,对于cpu的消耗会比较明显。

而当需要查询的数据达到千万级及以上时,会发现响应时间非常的长,可能会让你几乎无法接受!

或许,假如你的机器性能很差,在数十万、百万数据量时已经会出现瓶颈

三、改良做法

既然传统的分页方案会产生 skip 大量数据的问题,那么能否避免呢?答案是可以的。
改良的做法为:

  1. 选取一个唯一有序的关键字段,比如 _id,作为翻页的排序字段;
  2. 每次翻页时以当前页的最后一条数据_id值作为起点,将此并入查询条件中。

四、性能测试

以10万条数据为例

总页数 传统翻页耗时(秒) ID翻页耗时(秒)
100 0.18 0.09
500 3.01 0.33
1000 11.12 0.89
3000 93.58 2.60

可见,当页数越大(数据量越大)时,改良的翻页效果提升越明显!

这种分页方案其实采用的就是时间轴(TImeLine)的模式,实际应用场景也非常的广

而同时除了上述的数据库之外,HBase、ElastiSearch 在Range Query的实现上也支持这种模式。

五、完美分页

时间轴(TimeLine)的模式通常是做成“加载更多”、上下翻页这样的形式,但无法自由的选择某个页码。
那么为了实现页码分页,同时也避免传统方案带来的 skip 性能问题,我们可以采取一种折中的方案。

标签:分页,翻页,海量,MongoDB,查询,skip,数据
From: https://www.cnblogs.com/checkcode/p/mongoselect.html

相关文章

  • springboot2 搭建日志收集系统存入mongodb + redis+mq+线程池+xxljobs
    我们看到了高效批量插入mongodb速度还不错,那么我们的系统日志收集怎么做呢。当然当前文件日志收集效果也不错,比如前面博文写的elkf搭建日志收集系统。但我们系统中总是有......
  • springboot2 mongodb 高效批量入库--环境搭建
    当今使用微服务越来越多,每个服务都需要记录日志,那么记录到mysql中已完全不合适了。那么就记录到mongo中吧。想要速度快,那么一定要使用批量保存,做过尝试入库10万数据,逐条插......
  • 【数据库数据恢复】MongoDB数据库无法启动服务的数据恢复案例
    关于MongoDB数据库:MongoDB数据库存储方式是将文档存储在集合之中,而不是像Oracle、MySQL一样的关系型数据库。MongoDB数据库是开源数据库,也提供具有附加功能的商业版本。M......
  • MongoDB Compass SQL语句
    MongoDBCompassSQL语句MongoDBCompass是MongoDB的一个图形管理的数据库管理系统,对于新手可以快速上手,所见即所得。操作数据内容:{"id":1001,"name":"ZhangSan","age"......
  • day45 1205周末分页查询(视频) & 6-13 mapper文件标签语法
    实现分页查询在实体类Student设置属性,并获取gettersetter方法privateIntegerpageNo;//页码privateIntegerrowCount;//单页查询行数//此处为getset方法......
  • MongoDB——linux中yum命令安装及配置
    一、创建mongodb-org-3.4.repo文件vi/etc/yum.repos.d/mongodb-org-3.4.repo  将下面内容添加到创建的文件中[mongodb-org-3.4]name=MongoDBRepositorybaseurl=htt......
  • 海量数据战争——谁能赢得未来?
    时至今日,海量数据时代的来临已经毋庸置疑,尤其是在互联网、电信、金融等行业,几乎已经到了“数据就是业务本身”的地步。在这其中,还挟裹着一个更为重要的趋势,即数据的社会化,......
  • MyBatis-Plus实现分页
    一、分页插件实现分页功能MyBatisPlus自带分页插件,进行配置即可实现分页功能1.1.添加配置类在com.augus下创建config包,存放配置类,创建配置类  mybatisPlusInterceptor,内......
  • SQL中用OFFSET FETCH NEXT 分页的坑
    在SQL2012后的版本中支持了OFFSETindexFETCHNEXTpage_sizeROWSONLY的分页方式,但要分页就必须要有排序,而排序的字段选择的不对,就有可能造成分页结果不正确,比如第1页和......
  • 各巨头竞相争夺海量数据云分析市场
    云计算和海量数据分析的组合注定应当配合在一起使用。云计算的模式基本上可以让用户利用服务商提供的基础设施和相关的专业知识而无需在其内部构建。值得庆幸的是海量数据......