日志监控系统中,大批量查询mysql方案
2023-02-18 16:37:03 时间
最近开发遇到一个问题:需要查询一个大时间段内的数据,分1000个小段,即为1000个点。X轴是时间,Y轴是该小时间段内统计后数据。注意:数据返回是一个list,其中每个对象返回值都是该小时间段内数据统计出来的,且需要根据入参顺序返回(这样前端展示就方便)。举例,查询12点到1点的数据,查询频率是30分钟,那么就需要查询11:30-12:00,12:00-12:30,12:30-1:00这三段数据(因为监控系统都是查询过去的数据,所以12点的那个值应该是之前半个小时的)。问题来了,
方案一:直接热查数据库,1000次,最终30s+,淘汰!
方案二:由于多次查库,1000次肯定耗时多,所以采用一次查库,把条件凭借成一个sql,用union all 把每个小时间段查询出来的数据并集,耗时20S,且存在sql过长报错的问题(默认1M)
方案三:直接查询一个大时间段的数据,不统计,直接把库内数据返回,在代码中(即内存中)遍历一遍返回list,对每一个实体,遍历时间段,把这个实体匹配到这个时间段内,map(key,List),key是段号,List存该时间段内的实体。最终统计每个时间段内的数据。第三种方案,耗时1-2秒,再次证明了耗时IO>内存的真理。其中这里有一个细节:为了保证返回数据有序(时间段先后),这里map采用了TreeMap,自然排序即可。
相关文章
- 满20年程序员生涯-与大家分享最近7年的快速成长经历(上海市青浦区快递行业战斗7年奋斗史)
- 再坚持一年多就写代码到40岁了,一直坚持.NET也没什么大错,将来会物以稀为贵,技术青年快乐多
- C#.NET 大型企业信息化系统 - 防黑客攻击 - SSO系统加固优化经验分享
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 防止暴力破解密码、提高大型信息系统安全
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 访问频率限制功能实现、防止黑客扫描、防止恶意刷屏
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 服务器之间的接口通讯功、信息交换
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 服务器故障诊断排查工具
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 防止脱库、防止篡改数据
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 检查版本升级、检查登录超时
- C# ASP.NET 优化程序性能、降低内存使用、提高程序运行速度
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 实现缓存预热
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 能支撑10万以上客户端的数据同步下载问题
- 几十套业务系统集中统一授权管理、几十万账户同步多系统实现经验分享
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 基于数据库资源的多语言实现
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 所有的基础数据都可以恢复删除
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 大型软件系统客户端数据同步的问题解决
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 适合大型企业信息化应用使用的角色权限管理体系
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 总部业务部门主管管理整个集团分公司的某项业务
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 员工离职管理
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 多软件系统集成缓存体系改进