java dbcursor_优化JAVA查询Mongodb数量过大,查询熟读慢的方法
前言: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数量过大,查询熟读慢的方法相关推荐
- java查询服务器文件慢,优化JAVA查询Mongodb数量过大,查询熟读慢的方法
前言:2018年的时候优化了一个项目,该项目从MOngodb中获取数据的时候一次去十万百万千万的数据过慢,往往每次都要二十秒,三十秒,今天提出了一个代码优化的方案 项目查从mongodb中获取数据:代 ...
- Java性能优化最易操作的10大技巧!
编辑 | ShirleyZ 译文 | 班纳睿 .一叶障目 .learner 原文 | https://coyee.com/article/11753-top-10-easy-performance- ...
- 多少行数_技术分享 | MySQL:查询字段数量多少对查询效率的影响
作者:高鹏 文章末尾有他著作的<深入理解 MySQL 主从原理 32 讲>,深入透彻理解 MySQL 主从,GTID 相关技术知识. 这个问题是最近一个朋友问我的.刚好就好好看了一下,留下 ...
- oracle统计查询返回数量,统计Oracle 查询事务数的方法
大家好!AningDBA又和大家见面了,今天朋友问我一个问题,把我给问住了,问题听起来很简单,就是查询"每天的事务数". 听到这个问题,大家的第一反映,我相信大部分人会和我一样,首 ...
- vector怎么按字段查询顺序输出_7大查询匹配类函数,一次给你总结好
Excel数据处理中,经常用到各种函数,可以说函数是Excel必不可少的一部分,今天向大家介绍数据处理中的七个查询匹配函数. 下面一一介绍各函数的具体用法. vlookup 功能:搜索表区域首列满足条 ...
- java性能优化权威指南_Java性能优化权威指南 PDF扫描[132MB]
Java性能优化权威指南主要为Java SE 和Java EE 应用的性能调优提供建议.主要包括以下几方面:性能监控.性能分析.Java HotSpot VM 调优.高效的基准测试以及Java EE ...
- mysql查询比对提速_MySQL查询性能优化
关注我,更多精彩文章第一时间推送给你 1.为什么查询速度会慢? 首先对一个查询的生命周期简化分析,大致可以按照顺序分为:从客户端.到服务器.然后在服务器进行解析.生成执行计划.执行.并返回结果给客户 ...
- mysql获取查询策略语句_MySQL数据库查询性能优化策略
优化查询 使用Explain语句分析查询语句 Explain 用来分析 SELECT 查询语句,开发人员可以通过分析 Explain 结果来优化查询语句. 通过对查询语句的分析,可以了解查询语句的执行 ...
- 方法:查询MongoDB数据库中最新一条数据(JAVA)
使用JAVA语言查询MongoDB中某个数据库某个集合的最新一条数据: MongoCollection<Document> cpu = MongoClient.getDatabase(&q ...
最新文章
- Spark SQL与外部数据源的操作(Spark SQL ——> CSV/JSON/Parquet/hive/mysql)
- C#编程(十六)----------匿名类型
- python 查看数据结构类型_python标准数据结构类型
- 【任务脚本】0522更新京东618叠蛋糕任务脚本,京东任务自动程序
- github authentication设置里,fallback SMS number国家选项里没有中国的问题
- LL-verilog语法多位宽全加器
- vue-router实例
- 程序员编程艺术:第二章、字符串是否包含问题
- miniconda3 安装numpy_OpenCV4在Ubuntu1810/1604安装
- LeetCode 2201. 统计可以提取的工件(哈希)
- fastapi 请求文件 / 表单 / 处理错误 / 路径操作配置 / jsonable_encoder
- 关于json包爆红我有话说
- 数据结构知识点总结pdf_闭关修炼31天,“啃完”346页pdf,我终于四面拿下阿里offer!...
- 操作系统OS lab4 (xv6) 实验报告
- JS实现弹窗效果,超简单哦
- 菜鸟驿站进军万亿社区市场
- 继承关系下怎样使用Builder 模式
- oppoa9处理器怎么样_oppo a9是什么处理器
- web端第三方微信登录
- ubuntu 18.04 netplan 配置多网卡、多路由、多ip