栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

谈谈对<统计需求>的一些想法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

谈谈对<统计需求>的一些想法

最近在做统计,大家有什么想法呢?如何才能保证性能?
我看之前的一版代码,是一个统计方法里,无数操作数据库的,抛开sql的性能,光这次数都让人头疼啊。
那么如何能减少这种网络传输,提高响应速率呢?

版本一:引入redis

使用场景:如果对实时性没有很敏感的场景,我觉得用redis还是一个很不错的方式的。
比如半天更新一次或者更久的时间更新一次,就很赞。
缺点:实时性不好确定。

版本二:减少网络传输

将数据通过sql查询出来,然后通过lambda表达式实现场景需求拆分。目前我就用的这种方式,尽可能少的操作数据库,减少网络传输。

操作一:java 8 stream流,lambda表达式 1)mapToInt
list.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> groupProjectOrg = allOrgInfos.stream()
			.collect(groupingBy(DataExamOrganizationResult::getOrganizationId));
操作二:mysql层面加入适当的索引 1)加入合适的索引,联合索引是必要的; 2)尽量减少级联查询,不超过3个; 版本三:静态表实现

设置静态表,通过定时任务,设置执行时间来将数据同步到静态表中,这样查询统计的语句直接操作静态表就OK,忽略的各种复杂逻辑。
只要保证定时执行的时间差大于逻辑执行时间,那就能充分的保证实时性,性能自然而然也就上去了。

版本四:引入es 1)何为es?
  • Elasticsearch 是一个基于 Lucene 构建的开源、分布式、RESTful 接口全文检索引擎。
  • Elasticsearch 也是一个分布式文档数据库。
  • Elasticsearch 可以在很短的时间内存储、搜索大量数据。
  • Elasticsearch 有很强的水平扩展能力。
2)场景
  • 添加搜索功能。
  • 存储、分析数据。
  • 管理、交互、分析空间信息

一共四种场景,该选择哪个,我觉得还是视情况而定吧。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/888059.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号