mongoTemplate查詢大數據過慢

先上兩段代碼 
代碼一

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);
  • 1
  • 2
  • 3
  • 4

代碼二

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);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12


集合部分截圖:


邏輯很簡單,從testEntity集合中根據id列表和開始結束時間進行文檔篩選,但是在大數據量下,差別太大了! 

比如testEntity集合有25萬條文檔,查詢出4萬條文檔轉換成TestEntity實體類集合,第一種直接轉換成實體要80秒,而第二種耗時1秒不到!我一度還以爲是mongo的問題,後來才定位到是代碼的坑!

所以數據量大的時候還是用原生查詢手動映射成實體類比較快!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章