这里写自定义目录标题
1 问题背景
在项目压力测试过程中,在数据量计达到百万级时,发现查询效率极低,部分查询甚至达到了100S左右,这对一个业务来说,是一件不可接受的事情,因此,进行了一次优化,优化的效率大概是,从100s -> 5s。
虽然看数据来说,5S可能还是一个正常的业务请求难以接受的事情,但是已经满足一开始的需求,对本次的分析做一次简单的总结。
2 分析思路
本次的业务需求是一个分页查询的场景,在查询过程中,需要进行分页跳转、总数计算。
基础的业务代码如下:
Criteria criteria = getCriteria(queryInfo);
// 生成query,这里面就是各种查询语句的生成
Query query = getQuery(queryInfo);
query.allowDiskUse(true);
long start = System.currentTimeMillis();
// 初始化聚合操作、允许使用磁盘内存缓存
AggregationOptions aggregationOptions = AggregationOptions.builder().allowDiskUse(true).build();
Aggregation countAggregation =
Aggregation.newAggregation(
Aggregation.match(criteria), Aggregation.count().as("count"))
.withOptions(aggregationOptions);
List<Map> aMap = mongoTemplate.aggregate(countAggregation, VERIFY_LOG, Map.class).getMappedResults();
int verifyLogCount = 0;
if (CollectionUtils.isNotEmpty(aMap)) {
verifyLogCount = (int) aMap.get(0).get("count");
}
long spend = System.currentTimeMillis() - start;
start = System.currentTimeMillis();
query.with(Sort.by(
Sort.Order.desc("timestamp")
));
if (queryInfo.getPageSize() > CommonConstant.MAX_QUERY_PAGE_SIZE) {
queryInfo.setPageSize(CommonConstant.MAX_QUERY_PAGE_SIZE);
}

2万+

被折叠的 条评论
为什么被折叠?



