前言:2018年的时候优化了一个项目,该项目从MOngodb中获取数据的时候一次去十万百万千万的数据过慢,往往每次都要二十秒,三十秒,今天提出了一个代码优化的方案

项目查从mongodb中获取数据:代码A

Query query = new Query();

queryAfter.addCriteria(Criteria.where("id").in(idList));

queryAfter.addCriteria(Criteria.where("time").gte(startTime).lte(endTime));

List lists = mongoTemplate.find(queryBefore,TestEntity.class);

优化代码示例:代码B

1 DBObject query1 = new BasicDBObject(); //setup the query criteria 设置查询条件

2 query1.put("id", new BasicDBObject("$in", idList));3 query1.put("time", (new BasicDBObject("$gte", startTime)).append("$lte", endTime));4 DBCursor dbCursor =mongoTemplate.getCollection("testEntity").find(query1);5 List list=new ArrayList<>();6 while(dbCursor.hasNext()){7 DBObject object=dbCursor.next();8 TestEntity te=newTestEntity();9 te.setId(object.get("_id").toString());10 te.setTime((Date) object.get("time"));11 list.add(te);12 }

testEntity集合有25万条文档,查询出4万条文档转换成TestEntity实体类集合,代码A直接转换成实体要80秒 ,代码B的查询只要不到一秒钟!

扩展:

理解Java对象DBCursor

Java对象DBCursor表示MongoDB服务器中的一组文档.使用查找操作查询集合时,通常返回一个DBCursor对象,而不是向Java应用程序返回全部文档对象.

这样 能够在Java中受控的方式访问文档.

DBCursor对象以分批的方式从服务器取回文档,并使用一个索引来迭代文档.

在迭代期间,当索引达到前那批文档末尾时,将从服务器取回下批文档.

DBCursor实例提供的方法

方法

描述

BatchSize(size)

指定每当读取到当前已下载的最后一个文档时,游标都将再返回多少个文档

Close()

关闭游标并释放它占用的服务器资源

Copy()

返回游标的拷贝

Count()

返回游标表示的文档数

hasNext()

如果游标中还有其他可供迭代的对象,就返回true

Iterator()

为游标创建一个迭代器对象

Limit(size)

指定游标可最多表示多少个文档

next()

为游标中中的下一个文档作为BDObject()返回,并将索引加一

Size()

计算与查询匹配的文档数,且不考虑limit()和skip()的影响

Skip(size)

在返回文档前,跳过指定数量的文档

Sort(sort)

按DBObject参数sort指定的方式对游标中的文档排序

toArray([max])

从服务器检索所有的文档,并以列表的方式返回,如果指定了参数max,则只检索指定数量的文档

java dbcursor_优化JAVA查询Mongodb数量过大,查询熟读慢的方法相关推荐

  1. java查询服务器文件慢,优化JAVA查询Mongodb数量过大,查询熟读慢的方法

    前言:2018年的时候优化了一个项目,该项目从MOngodb中获取数据的时候一次去十万百万千万的数据过慢,往往每次都要二十秒,三十秒,今天提出了一个代码优化的方案 项目查从mongodb中获取数据:代 ...

  2. Java性能优化最易操作的10大技巧!

    编辑 | ShirleyZ 译文 | 班纳睿 .一叶障目  .learner 原文 | https://coyee.com/article/11753-top-10-easy-performance- ...

  3. 多少行数_技术分享 | MySQL:查询字段数量多少对查询效率的影响

    作者:高鹏 文章末尾有他著作的<深入理解 MySQL 主从原理 32 讲>,深入透彻理解 MySQL 主从,GTID 相关技术知识. 这个问题是最近一个朋友问我的.刚好就好好看了一下,留下 ...

  4. oracle统计查询返回数量,统计Oracle 查询事务数的方法

    大家好!AningDBA又和大家见面了,今天朋友问我一个问题,把我给问住了,问题听起来很简单,就是查询"每天的事务数". 听到这个问题,大家的第一反映,我相信大部分人会和我一样,首 ...

  5. vector怎么按字段查询顺序输出_7大查询匹配类函数,一次给你总结好

    Excel数据处理中,经常用到各种函数,可以说函数是Excel必不可少的一部分,今天向大家介绍数据处理中的七个查询匹配函数. 下面一一介绍各函数的具体用法. vlookup 功能:搜索表区域首列满足条 ...

  6. java性能优化权威指南_Java性能优化权威指南 PDF扫描[132MB]

    Java性能优化权威指南主要为Java SE 和Java EE 应用的性能调优提供建议.主要包括以下几方面:性能监控.性能分析.Java HotSpot VM 调优.高效的基准测试以及Java EE ...

  7. mysql查询比对提速_MySQL查询性能优化

    关注我,更多精彩文章第一时间推送给你 1.为什么查询速度会慢? ​首先对一个查询的生命周期简化分析,大致可以按照顺序分为:从客户端.到服务器.然后在服务器进行解析.生成执行计划.执行.并返回结果给客户 ...

  8. mysql获取查询策略语句_MySQL数据库查询性能优化策略

    优化查询 使用Explain语句分析查询语句 Explain 用来分析 SELECT 查询语句,开发人员可以通过分析 Explain 结果来优化查询语句. 通过对查询语句的分析,可以了解查询语句的执行 ...

  9. 方法:查询MongoDB数据库中最新一条数据(JAVA)

    使用JAVA语言查询MongoDB中某个数据库某个集合的最新一条数据: MongoCollection<Document> cpu = MongoClient.getDatabase(&q ...

最新文章

  1. Spark SQL与外部数据源的操作(Spark SQL ——> CSV/JSON/Parquet/hive/mysql)
  2. C#编程(十六)----------匿名类型
  3. python 查看数据结构类型_python标准数据结构类型
  4. 【任务脚本】0522更新京东618叠蛋糕任务脚本,京东任务自动程序
  5. github authentication设置里,fallback SMS number国家选项里没有中国的问题
  6. LL-verilog语法多位宽全加器
  7. vue-router实例
  8. 程序员编程艺术:第二章、字符串是否包含问题
  9. miniconda3 安装numpy_OpenCV4在Ubuntu1810/1604安装
  10. LeetCode 2201. 统计可以提取的工件(哈希)
  11. fastapi 请求文件 / 表单 / 处理错误 / 路径操作配置 / jsonable_encoder
  12. 关于json包爆红我有话说
  13. 数据结构知识点总结pdf_闭关修炼31天,“啃完”346页pdf,我终于四面拿下阿里offer!...
  14. 操作系统OS lab4 (xv6) 实验报告
  15. JS实现弹窗效果,超简单哦
  16. 菜鸟驿站进军万亿社区市场
  17. 继承关系下怎样使用Builder 模式
  18. oppoa9处理器怎么样_oppo a9是什么处理器
  19. web端第三方微信登录
  20. ubuntu 18.04 netplan 配置多网卡、多路由、多ip

热门文章

  1. ORA-24324 ORA-24323 ORA-01090
  2. SublimeNFFT:Sublime Text 2从模板新建文件的插件
  3. 电脑端用起来特别爽的四款软件,哪一款才是你的最爱?
  4. java8的日期API总结(JSR310)
  5. iOS 关于UITableView的黑科技
  6. 【Unity】8.5 扩展编辑器
  7. 阻止xap文件在浏览器中缓存
  8. 获取当前项目的根目录的方法
  9. 白话算法(6) 散列表(Hash Table) 从理论到实用(下)
  10. yum install rpm包时报错