最近本人在主持开发一个项目,客户方对数据计算的性能要求特别高,百万级复杂的计算时间不能超过30分钟。
优化的过程是艰难的,本人负责开发这个功能,这个功能是整个项目的核心功能。数据计算的准确性与高效性要求特别高。
在开发这个功能的过程我的思路是先保证准确性再求高效性。
在求的准确性前提下,去追求高效性。
追求高效性的过程,进行了两种方案:
1.采用java语言直接调用SQL
2.将整个算法封装成一个存储过程。
对两种方案进行了比较。
在索引没有发挥效果的时候,测试报告的结果是一样的,是低效的用户不能接受。
接下来运行数据库索引技术,对计算过程中用到的查询的表设置常用的字段索引,并优化SQL语句,确保
索引有效。最后测试的结果是令人满意的,性能提高了8倍左右。但是还是离用户的要求还是有些距离。
最后对程序的整个算法进行了优化,采用了缓存与分批处理的方法,最后达到了用户的要求,处理时间在10分钟以内。
在这个优化过程中,我总结了以下几条优先级的调优原则:
第一步.先调索引,确保索引启用。
第二步。优化算法,采用缓存机制,分批处理,减小事务处理的粒度。
在调优的过程中我发现,一次处理百万级的数据的时间是每次处理1000条*1000次的倍数。根据测试结果是3倍左右。所以数据库事务粒度有一个最有性能粒度。
以上经验仅供分享与参考,希望对在这方面有需求的同仁有所帮助。其中的一些细节本人就不赘述了。
百万级数据 性别字段可以加索引 百万级数据加索引时间
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
MySQL百万级数据分页查询优化
MySQL优化
字段 分页查询 偏移量 -
SpringBoot+ThreadPoolTaskExecutor实现批量插入百万级数据
SpringBoot+ThreadPoolTaskExecutor实现批量插入百万级数据
SpringBoot ThreadPool Executor -
五千万数据建索引很慢 百万级数据加索引时间
一、为什么MySQL采用B+树哈希索引 理想时间复杂度为 O(1) 适用场景:适用于等值查询的场景,内存数据的索引 典
五千万数据建索引很慢 java mysql 数据库 1024程序员节