mongo in查詢數量較多時
時間對比:
4W條數據查詢速度達到3-4S
優化后可以達到0.1S-0.2S
優化原理:mongo自動Bean轉化功能性能較差,改用原生mongo游標方法讀取MongoDB數據文檔,並在內存中做bean轉化
優化前
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);
優化后
DBObject query1 = new BasicDBObject(); //setup the query criteria 設置查詢條件 query1.put("id", new BasicDBObject("$in", idList)); query1.put("time", (new BasicDBObject("$gte", startTime)).append("$lte", endTime)); DBCursor dbCursor =mongoTemplate.getCollection("testEntity").find(query1); List<TestEntity> list=new ArrayList<>(); while (dbCursor.hasNext()){ DBObject object=dbCursor.next(); TestEntity te=new TestEntity(); te.setId(object.get("_id").toString()); te.setTime((Date) object.get("time")); list.add(te); }