最近在做统计,大家有什么想法呢?如何才能保证性能?
我看之前的一版代码,是一个统计方法里,无数操作数据库的,抛开sql的性能,光这次数都让人头疼啊。
那么如何能减少这种网络传输,提高响应速率呢?
使用场景:如果对实时性没有很敏感的场景,我觉得用redis还是一个很不错的方式的。
比如半天更新一次或者更久的时间更新一次,就很赞。
缺点:实时性不好确定。
将数据通过sql查询出来,然后通过lambda表达式实现场景需求拆分。目前我就用的这种方式,尽可能少的操作数据库,减少网络传输。
操作一:java 8 stream流,lambda表达式 1)mapToIntlist.stream().mapToInt(DataListInfoResult::getOrganizationNum).sum()2)filter
(int) list.stream() .filter(item -> item.getProjectId().equals(e.getProjectId())) .filter(item -> item.getVillage().equals(e.getVillage())) .map(DataOrganizationResult::getPatientId) .distinct().count());3)sort
resultInfo.sort(Comparator.comparing(DataListInfoResult::getExamNum).reversed());4)groupingBy
Long, List操作二:mysql层面加入适当的索引 1)加入合适的索引,联合索引是必要的; 2)尽量减少级联查询,不超过3个; 版本三:静态表实现> groupProjectOrg = allOrgInfos.stream() .collect(groupingBy(DataExamOrganizationResult::getOrganizationId));
设置静态表,通过定时任务,设置执行时间来将数据同步到静态表中,这样查询统计的语句直接操作静态表就OK,忽略的各种复杂逻辑。
只要保证定时执行的时间差大于逻辑执行时间,那就能充分的保证实时性,性能自然而然也就上去了。
- Elasticsearch 是一个基于 Lucene 构建的开源、分布式、RESTful 接口全文检索引擎。
- Elasticsearch 也是一个分布式文档数据库。
- Elasticsearch 可以在很短的时间内存储、搜索大量数据。
- Elasticsearch 有很强的水平扩展能力。
- 添加搜索功能。
- 存储、分析数据。
- 管理、交互、分析空间信息
一共四种场景,该选择哪个,我觉得还是视情况而定吧。



