当前位置:龙图IT服务 > 数据库 >

专访马根峰:海量数据处理与分析大师的中国本土程序员

作者:IT服务外包 发布时间:2016-03-14 阅读: 转至微博:

  摘要:中国本土的程序员用近十年的时间开发了数据库软件“万能数据库查询分析器”,后又开发了彻底删除文件(File Delete Absolutely),撰写了几十篇技术论文,社区之星51期采访了海量数据处理与分析大师马根峰。

  马根峰(博客),硕士,研究方向:数据库应用。他开发了万能数据库查询分析器,中文版本《DB查询分析器》、英文版本《DBQueryAnalyzer》,该软件具有强大的功能、友好的操作界面、良好的操作性、跨越各种数据库平台乃至于EXCEL和文本文件。同时,他还开发了彻底删除文件(FileDeleteAbsolutely),用以将Windows系统上的文件彻底删除,不会被其它软件恢复。

  CSDN:请和大家介绍下你和目前所从事的工作。

  马根峰:大家好,我是马根峰,我是一名程序员。2002年硕士毕业于重庆邮电大学,本科与硕士都是攻读计算机应用技术专业,曾获得过2002年优秀毕业硕士生、1991年河南省化学奥林匹克竞赛一等、国家乒乓球业余一级运动员和信合杯大中专院校乒乓球男单季军。

  2002年到2005年在中国电信股份有限公司广东分公司担任资深数据分析师,负责为企业的经营分析提供数据支撑、电信相关业务系统的研究与开发、参与全球10大数据仓库应用系统——广东电信经营分析系统(TMAS)涉及到公话业务的需求制定与中期的测试评估工作。

  2005年至今就职于广东联合电子服务股份有限公司,主要负责海量数据处理与分析、结算系统的运行。

  个人开发了大型商业软件“万能数据库查询分析器”,撰写了关于“万能数据库查询分析器”的65篇技术文章,发表在国内的计算机刊物、百度文库、CSDN资源和本人的4大博客上(马根峰的CSDN博客、新浪博客、QQ空间和搜狐博客)。

  CSDN:你是如何一步步软件开发之的?

  马根峰:从1996年大学毕业,近20年自己始终从事着计算机软件方面的工作,因为本科和硕士学的都是计算机应用技术专业,所以从感情上特别喜欢它。因为自己高中时期最喜欢的是化学,特别喜欢做化学实验。而计算机编程在我看来就是在做着“计算机程序设计的实验”,为了实现一个实际目标,将多种计算机程序开发语言语句去实现,有时候还要对多种算法进行分析。

  在大学学习中,受益最深的一句话就是“多学习,多思考,多实践”;在工作中,我依然如此,争取做到举一反三;在职业上,我“专注于干一件事超过1万个小时才能成为专家”。

  2002年到2005年在中国电信股份有限公司广东分公司工作期间,开发过“基于数据仓库和维度转换技术的广东电信公话200专用话机话务动态分析系统”。该技术“广东电信公话200专用话机话务动态分析系统的构建”发表在《电信科学》2003年11期;开发了“广东电信公话201亲情月卡用户重复购买率模型的计算”系统,该“广东电信公话201亲情月卡用户重复购买率模型的研究”发布在《世界电信》2006年1期。

  2005年至今在广东联合电子服务股份有限公司工作期间,开发了“广东省高速公节假日车辆通行数据统计”系统、“粤通卡超时车数据分析与统计”系统,对高速公主管部门和高速公业主提供数据支撑;开发了“基于数据仓库星形模式的广东省高速公一张网资金结算情况分析系统”,技术发表于个人的博客上。

  另外,从2003年我开始“万能数据库查询分析器”的构思、研究与开发,最终通过4年的努力,于2006年底发布1.0版本,从此以后,8年来不断对万能数据库查询分析器进行功能完善与升级,2014年7月发布5.05版本。

  CSDN:在你的博客中有着大量中英对照文章,以及个人所开发的软件也有英文版的,你的英文水平是如何练就的?你认为英语在编程和软件开发中起着怎样的作用?

  马根峰:学习英语就不怕少,就怕断。从1987年初中一年级开始学习英语起,一直到2013年,我一直没有怎么间断过英语的学习,英语写作与阅读还过得去,但听力与口语一直是弱项。

  于是在2013年9月,参加了一个英语机构的培训班,开始了听、说、读写的强化学习,四个月时间雅思考到6分,听力最厉害的一次考到7.5分。

  因为目前流行的编程语言都是以英语为基础的,国此,对于软件编程人员来说,英语的作用体现在阅读英文文档,适应国际化的编程,如果你想查看一些国外的文档,那最好还是要学习好英文,因为好多文档是没有翻译成中文的。

  CSDN:你是一名程序员/软件开发者,却在几年内撰写了关于“万能数据库查询分析器”的65篇技术文章,很多程序员很讨厌写这样的学术类技术文章,你是怎样处理类似这些枯燥无味的事呢?

  马根峰:大部分的软件开发人员喜欢开发程序,不喜欢写文档,尤其是学术类的技术文章。但这并不能否认它的好处。一方面,它可以让你的知识形成一定的沉淀,另一方面,同样会督促你去不断的学习新的知识。对于我来说,还有一个重要的原因,我要向更多的人介绍自己的产品的优势和使用技巧,帮助用户充分享受万能数据库查询分析器的便捷性。

  CSDN:万能数据库查询分析器是一款怎样的数据软件?和其它同类软件的区别是什么?

  马根峰:万能数据库查询分析器是一种支持对各种ODBC数据源(包括Oracle、Sybase、DB2、Informix、MSSQLSERVER、MYSQL、MSACCESS、Paradox、FoxPro及SQLite等关系数据库,以及EXCEL和TXT/CSV)进行访问和操作的通用UDA工具。

  它提供了一种通用的事务管理处理机制,允许用户自己来管理用户会话中的事务;允许用户随时中断正在执行的SQL语句,不会在数据库服务产生任何僵尸进程;允许提交多条DML语句乃至存贮过程,结果会以你设定的表格、文本框、文件来返回;从数据库导出千万条数据时,效率与DBMS没有什么区别;提供了数据库对象浏览器,使用户更方便地了解数据库的数据字典。

  万能数据库查询分析器的强大功能、友好的操作界面、良好的操作性、跨越数据库平台,使得它成为世界上无以伦比的万能数据库查询分析器。

  CSDN:当初你开发这样一款数据库软件的原因是什么?其中又经历了哪些困难?

  马根峰:从大学开始接触计算机软件开发的20年时间内,从最早在内存为16MB、主频为133的586PC上安装使用MSSQLServer7.0到后来在高档服务器上使用DB2和Sybase,使用到过Oracle、MSSQLServer、Sybase、DB2大型数据库和桌面数据库ACCESS。我在饱偿了熟悉多种数据库客户端工具的痛苦的同时,也熟悉了常见大型数据库客户端工具各自的优势。这为我开发出具有强大功能、友好的操作界面、良好的操作性、跨越数据库平台的万能数据库查询分析器打下了的基础。所以我非常希望万能数据库查询分析器能够帮助世界上更多的数据库应用人员从学习各种数据库的客户端工具的繁琐与复杂的工作之中出来,充分享受它的便捷性,让程序员更多的专注于SQL语句的分析设计、SQL语句的优化上去,这也是中国本土程序员马根峰的梦想。

  作为个人,要开发这样的一个近6万行代码的大开应用系统,并且使用了哈希技术、链地址决哈希冲突的方法、排序算法、多线程技术、API数据库访问技术、ADO数据库访问技术、Windows消息技术等等,必然会经历许许多的困难,包括开发的策略、系统功能的界定、程序的模块设计与代码设计、程序的测试方案。

  程序代码设计中,因为涉及到了许多的算法和数据结构、强大的数据展现功能、EXE文件切分与加密、EXE壳文件的引导与加载、软件安全所用到的3DES算法的实现等等,所以遇到了非常大的挑战。每天晚上都是到了凌晨两点钟,才会睡觉,有时还搞上个通宵。节假日,别人都出去旅游了,他还在查阅资料、写代码,2006年国庆节哪都没出去,还熬了几次通宵。在整个代码编写过程中,解决了太多的代码错误与编辑错误,有时一个错误一个月都解决不了,没办法就先实现其它能够实现的功能,最后再努力回头找出原来的问题所在。

  还有,最开始做系统原型的时候,采用了ADO数据库访问技术,但到最后,要实现中断SQL语句的执行时,尝试了许多ADO数据库控件的方法,都无法实现。这简直是给了我当头一棒,写了那么多的代码就这么废了。没办法,为了实现自己设想的具有强大功能的“万能数据库查询分析器”,必须重新寻找一种另外的数据库访问方法,重头开始。不过一旦实现了这一功能,也就使用“万能数据库查询分析器”更为脱颖而出。

  而对于英文版本来说,另外存在的困难就是50多页的翻译与编写了。

  “万能数据库查询分析器”的成功推出,离不开先进的开发策略、扎实的计算机程序的开发能力、扎实的计算机多个学科地理论基础与实践经验以及不懈的毅力。

  CSDN:在数据库软件开发方面,你认为需要掌握哪些基础技术知识和工具?在学习这些技术时,你有什么和体会可分享?

  马根峰:从计算机课程上讲,个人觉得数据结构、算法分析、关系数据库技术对我的影响非常大,也受益非浅。

  另外,精通一门开发工具和一种大型数据库系统,对数据库软件开发的程序员来说这是必须的,在此之外,能够学习一下其它的开发工具、其它的数据库系统,则是锦上添花。

  CSDN:在开发这款软件中,你采用了什么方法和策略?

  马根峰:通常来讲,如果系统的需求比较明确、系统实现的难度不大,那么可以采用“自上而下”或者“自下而上”的开发策略。

  反之,当系统的需求不是那么明确时,比如我在开发“万能数据库查询分析器”时,因为对要实现的目标不是很具体,而且系统的开发难度很大,通过反复地思考,最终放弃这两种开发策略,采取最适合于大型应用系统开发的“原型法”开发策略,先开发出一个原型,然后逐渐完善、增加功能。先实现简单的基于DB2数据库系统的访问,然后逐步增加功能。在实现DB2数据库的方便、快捷、高效访问功能之后,然后再将功能扩展至所有数据库、TXT/CSV文件、EXCEL文件。

  程序的测试方案,则是严格使用软件工程中的单元测试、模块测试、系统测试。而测试过程中,最困难的就是测试的搭建,以实现对每一种关系数据库系统的每一种数据类型的测试(基本上对各种数据类型都设计样本数据来涵盖边界值,来进行完整的测试,然后再用数据库本身的客户端工具进行查询,将二者的结果进行比对)、各种WINDOWS平台的运行测试。最终用了三个月左右在DB2、ORACLE、SYBASE、INFORMIX、MYSQL、MSSQLSERVER、ACCESS、FORPRO和PARADOX上进行了综合测试,后来进行了WIN98、WINDOWSXP、WINDOWNT、WINDOW2000SERVER、WINDOWSADVANCEDSERVER(2006年还没出现WIN7)的运行测试。

  接着,为了检验算法的执行效率,还进行了压力测试。在PC机上用中文版本《DB查询分析器》查询IBM670小型机上安装的生产数据库服务器,并导出1100万条记录,在PC机本地生成了一个大小为2GB的文件,耗时15分钟;另外在生产数据库服务器主机IBM670(拥有64GB的内存,8个物理CPU,16个逻辑CPU,存贮采取磁盘阵列),在这样的服务器上执行同样的查询脚本,导出同样的数据,耗时近6分钟。乍一看,《DB查询分析器》的“查询结果保存至文件”的导出效率相当于服务器上的40%。但深入地想一下,如果导出的文件要保存至客户端的情况下,是不是还要包括服务器导出的文件用FTP传送到客户端的时间,如果这二者所用时间之和会怎么样?我把IBM670服务器上用DB2命令Export出来的文件FTP到PC客户上,用了14分36秒钟的时间。这样来看,《DB查询分析器》的“查询结果保存至文件”的导出效率更高。

  就是因为,这样充分的测试,保障了“万能数据库查询分析器”的健壮性与高效性。这也充分得到了用户在反馈中表现出的认可。

  CSDN:该款软件如今的应用情况如何?

  马根峰:自2003年开始研究与开发,2006年底1.0版本发布及获得计算机软件著作权证书,到目前为上近8年时间不断地进行功能的完善,推出最新5.05版本。

  自己的努力也得到了广大用户与的支持,《程序员》2007年第2期“新产品&工具点评”栏目特别推荐“万能数据库查询分析器的发布”。

  截止到2014年7月31日,在Baidu上搜索关键字万能数据库查询分析器,搜索结果超过490万。

  本人还撰写了关于“万能数据库查询分析器”的65篇技术文章,发表在国内的计算机刊物、百度文库、CSDN资源和本人的4大博客上(马根峰的CSDN博客、新浪博客、QQ空间和搜狐博客)。

  在本人单位,“万能数据库查询分析器”被同事广泛使用,用来进行DB2、SYBASE数据库的访问,进行数据分析与处理。

  在太平洋软件,“万能数据库查询分析器”中文版本《DB查询分析器》在数据库类排行榜中居第1位;“万能数据库查询分析器”中文版本《DB查询分析器》在中国最大的软件下载网站中关村在线的数据库类排行榜中居前10位,获得超过100,000次的下载。

  CSDN:能否谈一下国内外的数据库软件开发的现状?

  马根峰:数据库技术是企业信息化的核心,企业规模的大小对数据库开发与应用的需求是不同的。因此大型数据库系统、企业级数据库系统和桌面数据库系统在企业的不同发展阶段都会被使用。这就造成企业的不同应用存在着不同种类的数据库,同时数据库的操作与会非常困难,因此国内外都在研究解决这个问题。我开发的万能数据库查询分析器很好的解决这一问题。

  CSDN:因数据库软件导致出现网络中断和系统宕机的事件有很多,你认为数据库软件容易出现故障的原因是什么?又该如何防范呢?

  马根峰:通常来说,引起系统宕机的原因比较复杂,常见的原因有以下:

  针对以上的几点,在数据库或者数据库应用软件的开发时,要避免产生大量日志的事务操作,即避免对大量数据库记录进行操作后一次提交事务,比如向系统提交数据时,可以操作一批记录后提交一次事务;在大量删除数据表记录时,为了避免产生大量的日志,可以先将不删除的数据原导出,再将表清空,最后导入要保留的数据的方式。

关键词: db2客户端