• 优化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<TestEntity> 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<TestEntity> list=new ArrayList<>();
     6  while (dbCursor.hasNext()){
     7  DBObject object=dbCursor.next();
     8  TestEntity te=new TestEntity();
     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,则只检索指定数量的文档





       


     

    周永发
  • 相关阅读:
    token原理
    1.系统代码读取配置文件
    redis hash怎么用
    那么都数据库表,那么多不同记录。是怎样都存储在一个key-value数据库的?
    jedis操作redis全指南
    redis列表list
    jedis操作
    redis
    android raw与assets资源
    Zoie Merge Policy
  • 原文地址:https://www.cnblogs.com/yvanBk/p/10205584.html
Copyright © 2020-2023  润新知