MongoDB:如何使用大数据优化聚合查询



在MongoDB收藏中,有3000万个记录。当查询存在值时,它会在1秒钟内给定结果。但是查询不存在的值需要40或45秒才能给出结果或0。

String cDate = dateFormat.format(date);
String pastTime = timeFormatMin.format(new Date(System.currentTimeMillis() - 3600 * 1000));
Criteria dateQuery = Criteria.where("Date").is(cDate);
Criteria timeQuery = Criteria.where("Time").gt(pastTime);
Criteria appQuery = Criteria.where("appID").is(appId).andOperator(Criteria.where("appID").exists(true));
Criteria criteria = new Criteria().andOperator(dateQuery, timeQuery, appQuery);
MatchOperation matchOperation = match(criteria);
GroupOperation groupOperation = group("appID").count().as("idcount");
ProjectionOperation projection = project()
            .andExpression("_id").as("appID")
            .andExpression("idcount").as("Count");
SortOperation sortOperation = sort(new Sort(Sort.Direction.DESC, "_id"));
LimitOperation limitOperation = limit(1);
Aggregation aggregation = newAggregation(matchOperation, sortOperation, limitOperation);
AggregationResults<CommonLogic> logResult = mongoTemplate.aggregate(aggregation, "commonLogic", CommonLogic.class);
List<CommonLogic> list = logResult.getMappedResults();

假设db中已经索引了字段'appid'(这有助于聚集管道很多(:对于提到的数据大小,上述查询最有可能在排序操作中消耗时间。尝试给出" allowdiskuse:true"的聚合选项。看一下这个问题

最新更新