有读者提出这么个问题,数据库高级开发工程师,要掌握哪些技能?
这个话题非常具有启发性。要回答好这样一个话题,就要保证自己的数据库知识全面化,体系化,系统化,还要紧贴一线实战,以免和理论脱轨太远。最好的方法是,与玩得好的业内高手交流。
我们眼里的高级,可能只是高手眼里的入门。不要只听一家之言,多看多思考,多求证,会获得更多启发。
所以,我尝试整理一些话题,掌握这些知识,可能你已经踩进数据库行业高级门槛了。但重要的事情,再说一遍,我们眼里的高级,可能是另外一些人眼里的入门。
今天先说开发。
很多朋友接触数据库,肯定不是一开始就做DBA,哪个老板愿意给新人DBA的岗位,那无异于在云霄走钢丝。数据是企业命脉这种老套的话,我也不想啰嗦,反正道理都懂,保护数据就是在保护企业资产与市值。
如果不明白,参考微盟程序员删库跑路事件。
作为开发,CRUD 是基本功,但很多朋友,写个行列转换,都要查下手册的,要我说你高级,还真不敢。再一个,如果没有数据库提供的函数,你能手写一个动态的行列转换SQL吗?这两题,算是第一道关。
第二道关,尽可能多的知道数据库软件自带的一些函数。有朋友说,不想背那么多函数,到用的时候,自己写一个。
亲,请对比下你自己写的函数与系统函数的性能,再来这么横,好嘛。自己有多懒,代码有多烂,心里没个数么。都没用过系统函数,凭自己那点水平造轮子,不是在给自己挖坑,给团队挖坑,给公司挖坑吗?
RowNumber,Rank这类分析函数,系统都做了优化的,你还能写得过微软,Oracle,或者TeraData这帮人?
第三道关,你能不能开发一套函数给数据库使用?如果系统提供的函数,功能完不成,性能又不好,而项目又急需,怎么办?
举个SQL Server的例子,一直以来,T-SQL对正则是支持不到位的,很多时候,LIKE又不能很好的解决IP地址,网址等解析操作。但c#是完美支持正则的,你会不会想到用到c#去封装一个函数,注册到SQL Server中,供团队使用?
不仅 SQL Server的CLR函数能做这样的事,Oracle的Java包,Hive的定义程序包,等等,都能支持程序员写扩展函数。
第四道关,开发这块的进阶,最终会强烈地反应在性能调优上。针对别人调优到5秒的查询,你会不会继续优化,使其突破1秒或者500ms?
如果从技术上无法调优了,是不是可以从业务角度,数据模型角度去尝试?
如果突破数据库领域,是不是可以从应用架构入手,比如增加缓存,读写分离,分布式数据库?能不能把QPS/TPS提高一个数量级?
继续这么深入研究下去,在数据库这个行业,你肯定不愁工作的事儿。
帆软