记一次性能调优过程
2015-07-09 01:43
288 查看
前一阵子参与了公司数据迁移工具的一些优化,现将优化过程及思路作为记录。
背景:昆明十几家法院电子卷宗数据迁移,从老系统迁移到新审判系统,数据库为集中部署,材料(多为图片),存在ftp(老系统ftp为分布部署)上,大概有5-6家在300G以上,剩余每家平均80G左右。
困难:原程序迁移过程需要将材料进行数据同步-->下载-->转换-->上传、入库-->制作5个步骤,初期时间大多浪费在下载步骤,仅一家约180G文件大概下了9天左右。
分析:经分析,各步骤可优化空间如下:
(1) 同步卷宗映射:原程序辅助映射表各进程间不支持并行,可修改为并行;
(2) 同步卷宗表:优化空间较小;
(3) 下载:可将迁移服务搭建在老系统ftp服务器上,将原程序访问ftp方式改为访问本地方式,同时增加图片压缩减少后期转换的时间;
(4) 上传:可根据原程序上传ftp结构,现将文件上传至本地,后将各家院上传内容复制到新系统的ftp上,或者将新系统ftp也迁移至该服务器,减少ftp访问;
(5) 制作:制作过程中涉及的ftp操作,也可象上述描述一样,使用读取本地的方法。
思路:步骤3、4、5原来基本都是和ftp做交互,访问ftp肯定不如访问本地文件来的块,因此应尽量使用访问本地文件的方式;
由于系统设计访问ftp是基于公司的大对象存储组件开发的,可经过配置自由转换存储ftp和存储本地文件的方式,降低了改造成本。
程序个步骤都是只能按顺序依次执行,效率很低,由于映射表中存储了案件的收、结案日期,可以修改程序,达到分时间段操作各个步骤的方式增加并行机制。
另外,步骤3、4、5可以采用多线程处理,充分利用系统资源。
效果:经改造后,一家300G的卷宗仅用一个周末将全部流程走完,900G的卷宗在工作日只能下班时间运行程序的情况下,一周之内全部完成。
总结:本次在程序各个步骤的改动其实并不是很大,但是效果比较明显,其主要思想,是尽量能充分地利用服务器资源,采用多进程、线程的方式并行作业,提高作业效率;将ftp访问模式改为本地文件访问,减少网络开销。其实优化并不一定需要在程序中改进算法,大量重构才能得到效果,根据具体问题集体分析,少量改动也可以有很显著的效果。
背景:昆明十几家法院电子卷宗数据迁移,从老系统迁移到新审判系统,数据库为集中部署,材料(多为图片),存在ftp(老系统ftp为分布部署)上,大概有5-6家在300G以上,剩余每家平均80G左右。
困难:原程序迁移过程需要将材料进行数据同步-->下载-->转换-->上传、入库-->制作5个步骤,初期时间大多浪费在下载步骤,仅一家约180G文件大概下了9天左右。
分析:经分析,各步骤可优化空间如下:
(1) 同步卷宗映射:原程序辅助映射表各进程间不支持并行,可修改为并行;
(2) 同步卷宗表:优化空间较小;
(3) 下载:可将迁移服务搭建在老系统ftp服务器上,将原程序访问ftp方式改为访问本地方式,同时增加图片压缩减少后期转换的时间;
(4) 上传:可根据原程序上传ftp结构,现将文件上传至本地,后将各家院上传内容复制到新系统的ftp上,或者将新系统ftp也迁移至该服务器,减少ftp访问;
(5) 制作:制作过程中涉及的ftp操作,也可象上述描述一样,使用读取本地的方法。
思路:步骤3、4、5原来基本都是和ftp做交互,访问ftp肯定不如访问本地文件来的块,因此应尽量使用访问本地文件的方式;
由于系统设计访问ftp是基于公司的大对象存储组件开发的,可经过配置自由转换存储ftp和存储本地文件的方式,降低了改造成本。
程序个步骤都是只能按顺序依次执行,效率很低,由于映射表中存储了案件的收、结案日期,可以修改程序,达到分时间段操作各个步骤的方式增加并行机制。
另外,步骤3、4、5可以采用多线程处理,充分利用系统资源。
效果:经改造后,一家300G的卷宗仅用一个周末将全部流程走完,900G的卷宗在工作日只能下班时间运行程序的情况下,一周之内全部完成。
总结:本次在程序各个步骤的改动其实并不是很大,但是效果比较明显,其主要思想,是尽量能充分地利用服务器资源,采用多进程、线程的方式并行作业,提高作业效率;将ftp访问模式改为本地文件访问,减少网络开销。其实优化并不一定需要在程序中改进算法,大量重构才能得到效果,根据具体问题集体分析,少量改动也可以有很显著的效果。
相关文章推荐
- mac 原来使用了trim enable 到了 10.10.4开启trimforce 后出现开机禁止符号解决办法
- 多线程实现的几种方式
- Android手机安全卫士(一)---概述、启动、签名、主界面、自定义控件
- leetcode 70:Climbing Stairs
- [异能程序员]第二章 上头条(第二更)
- [异能程序员]第二章 上头条(第二更)
- [corefx注释说]-System.Collections.Generic.Queue<T>
- android悬浮窗口的实现
- Xcode5.1和IOS8.3真机调试
- leetcode 198:House Robber
- ASP.NET sync over async
- centos7下使用yum安装mysql
- Matlab应用实例(8)—fminimax
- 【四圣龙神录的编程教室】第22章、放炸弹来攻击吧
- 回忆:基本类型
- archlinux修改dconf配置文件
- 利用动软代码生成器 自动生成LINQ需要用的数据实体类 (转)
- leetcode 58:Length of Last Word
- reaver如何继续从上次的PIN开始执行
- Hello world xib和纯代码2种实现