文/.温国兵
惰性人皆有之,也算是人的一大天性。几日之前便构思好此文,怎奈每日杂事繁多,今日才提起笔,作下此文。本文谈谈我与数据库的故事。
说起和数据库结缘,还得从大一说起。大一刚开始接触C语言,每日就沉浸在无止境的代码中。在网上查资料的过程中,看到别人用C语言写了一个小型的图书操作程序,数据库采用的是SQL Server,运行出来的效果图很炫,惊叹原来还可以这样管理数据。熟知C语言的同学肯定对文件操作不陌生,当时我们写程序如果有静态数据,都是放在文件里的。直到后来做的C语言课程设计,我也是一大堆文件来保存静态数据。至此心里有了一颗小小的种子,谁知道会在后来生根发芽。
大一下期的那个暑假,开始了实验室之旅。在实验室每天都是自学,其中就接触到了SQL Server和MySQL,关于实验室的种种事情,后面还会细说。最开始接触SQL Server,我用我那破网在网上下载数G大的数据库安装文件,后来才知道我们学校的阳光软件站里有,且下载速度达十几M每秒。花了数天把软件下载下来以后,在百度文库找了一个安装说明文档,按照截图一步步操作。整个过程可不那么顺利,并且SQL Server非常耗用内存,好几次机器都是未响应状态,一番折腾,终于搞掂了,别提多兴奋。接着把服务启动,打开SQL Server Manageorgiament Studio,对数据库一窍不通的我连个登录都折腾半天。进入主界面,不知该做个啥。后来在实验室老师和学长的建议下,我在W3C上开始学习SQL的基础知识。写个查询,满足指定条件的数据就呈现在眼前;用个INSERT,就能把想要的数据插入到数据库;弄个UPDATE,就能把数据更新成想要的数据;写个DELETE,就能把不需要的数据删除。如此简单的语句就能实现当初以为很强大的功能,不得不感叹数据库的神奇。后来阅读师兄的项目源码,发现数据库使用的是MySQL,于是开始折腾MySQL。Windows下的MySQL还是比较容易安装,但就是如此简单的操作也是折腾了很久,并且很多数据库配置选项也不大明白。不过有了SQL Server的一些基础,学习MySQL还是相对容易。接触过这两大数据库,并且有了一点Java Web的知识,于是开始做项目。最开始的项目是练手用的,无非就是连接数据库,然后进行增删改查。连接数据库使用的JDBC,这个过程中也遇到很多问题,比如驱动版本不对、中文出现乱码、不能正确提交数据等等。我有个习惯,就是遇到问题喜欢自己捣鼓,在万不得已的情况下不向别人提问。进入实验室不久,由于在网上找资料,很多链接都定向到CSDN,于是开通了CSDN博客,这是一件正确的事的开始。
大二上期开始接触Oracle。Oracle也是一款庞大的软件,在网上把安装文件下载下来以后,按照网上的安装文档,一步步开始操作。安装完成后,开始使用Oracle,这个数据库软件运行起来可真够呛,2G的内存表示压力山大,运行Oracle后其他的任何事情就别想做了。学习Oracle先是按照前辈的博客循序渐进,从基础的SQL,到PL SQL,再到简单的优化,整个过程的学习还算顺利,不会存在很吃力的情况。此时的我对数据库抱有极大的热情和兴趣,并且慢慢形成了以后的奋斗价值观。
大二开设了数据库相关的课程,没记错的话课程名叫做「数据库原理」。在正式上课之前还有一点时间准备,对数据库较熟悉的我在同学面前有了优越感,很多同学到我那里拷贝数据库安装文件,并且麻烦我为他们安装数据库。经过数次帮忙后,对整个操作已经到了了如指掌的地步。教授数据库原理的老师十分幽默,时不时在课上爆出个冷笑话,让人捧腹大笑。由于以前接触过数据库,所以数据库介绍、关系数据库的基本理论、基础SQL等等知识学习起来都比较轻松。大二的我很喜欢泡图书馆,经常翻阅四楼的计算机书籍,看到两本硕大的书,一本是Abraham Silberschatz所著的《数据库系统概念》,另一本是David M. Kroenke所著的《数据库原理》,如此厚的著作看完都要很久,更不提创作了。我小心翼翼地用双手从书架取下,兴高采烈地捧到书桌阅读,看了一两个小时,对作者不禁有敬畏之情。这些书籍堪称经典,肯定有他的道理,想深入数据库,这些书是必读的。
在学习数据库知识的过程中,难免会遇到各种各样的问题。遇到问题后,我首先尝试自己解决,自己解决不了再参考别人的解决办法,解决后再用自己的方式总结,再以博客的形式发表。这种学习方式好处非常之多,读者不妨借鉴。后来学习数据库就多了一些深入。比如工作之后,成为了SQL Server DBA,开始看SQL 优化的知识,并且用于实践。工作的过程中还写了不少的检查性能瓶颈的T-SQL。再比如MySQL,学习了MySQL的高可用、高性能技术,比如复制技术中的主从复制、双主复制、一主多从;高可用、高性能集群方案,比如LVS+Keepalived+MySQL、MySQL Proxy、DRBD+Heartbeat+MySQL、MySQL MMM、MySQL Cluster、MySQL MHA等等;还接触到MySQL的备份与恢复,比如冷备、热备、增量备份、热拷贝、延时备份等等;还接触到MySQL的体系结构,熟悉了常用的存储引擎,后来还看了不少MySQL相关的书籍,阅读了部分MySQL源码,如此博大精深的技术,深知冰冻三尺非一日之寒,还需要花很大的功夫。再比如Oracle,接触了Linux下Oracle的安装和配置、Oracle的体系结构、Oracle的备份与恢复、DG、RAC、Oracle优化等等。期间看过不少Oracle大牛的书,比如盖国强、白鳝等等。在CSDN的私信、知乎、OSC、ITPUB,经常有人在问我问题,我在帮别人解决问题的同时也得到比较大的提高。在这个过程中学会了怎样快速的寻求「帮助」,怎样分享自己的所思所得,怎样和别人高效地沟通,还懂得了学习技术不是学习技术本身,而是技术后面的本质问题。未来从事数据库行业还有很长的路要走,用一句「路漫漫其修远兮,吾将上下而求索」来激励自己。
写到这里已经把大学的整个数据库旅程写完了,回过头看整个旅程,还是有很多值得思考的地方。这里只给出一个思考,那就是为什么要学习和深入数据库,并且把他当做以后的职业发展方向,个人认为是兴趣问题。至于面试官怎么想与我无关。一次面试官问我这个问题,我回答是兴趣,他说其实很简单,无非是为了金钱嘛,当时我只能用呵呵来笑对,只能说每个人的追求不一样。有的人为了金钱而奔波,有的人为了实现自己的价值而奋斗;有些人一生碌碌无为,有些人一生完成了诸多丰功伟绩。
结合自身经历,对以后想从事数据库行业的学弟学妹们还是有几点建议。第一是搞明白动机,想清楚自己是否适合这个行业,不要因为做数据库薪资高就盲目地跟风。数据库行业外表光鲜,实质苦逼,并没有想象中的那么美好。第二是掌握好的学习方法,比如前面提到的通过博文分享形成自己的知识库、向前辈取经、练习和总结并进等等。第三是遇到问题的求助方式,不要遇到问题就向别人请教,如果不经过自己的思考,那你的提升会非常的小。如果一定要求助,可以采用发帖或者跟技术大牛发邮件的形式,但请务必注意提问的方式,把遇到问题的原因、 什么条件下导致这样的错误、出现错误的平台、相应的错误信息和代码说清楚,还需要注意邮件的格式和必需的礼节。做人做事不仅要让自己舒服,更重要的是要让别人舒服。第四是把基本功抓牢。有研究表明,很多非常成功的企业家以前卖过报,小时候形成的创业童子功对以后的发展起着至关重要的作用。某一个领域的基础知识就是基本功,和童子功有着很类似的作用。地基不牢,何以成参天大楼。落实到实处,数据库的经典书籍一定要找来读读,还有就是越是简单的东西就越需要搞明白为什么。第五是不要好高骛远。我在平时的求职过程中,看到很多公司开的薪资,有了2年经验的月薪在2万以上的不在少数。别人能开那么高的薪资,肯定你做的事对得起这份工资。薪资越高,责任也就越大。从另一方面讲,脚踏实地才能在以后有所作为,当你有了能力,不愁薪资。昨天在微博上看到一句话,牛B的人才不用找工作,想想不无道理。第六是找到志同道合的好友,互相学习,这样会得到很大的提高。比如我有幸结识@林水彬,在平时他给我很大的帮助,在此感谢!第七是找数据库相关的工作不要气馁,不要自暴自弃,也不要埋怨上天的不公,为什么这样说呢?因为应届毕业生找数据库相关的工作还是相对困难的,一个经验的硬性指标就会把你拒之门外。要相信凡事都是能者居之,你有能力,足够好运,并且公司也愿意培养你,那恭喜你,坚持下去,前途一片光明。如果毕业不能马上找到数据库相关工作,可以先做其他行业,以后再考虑转型。方向就在那里,总错不了。希望本文能给读者带来丁点帮助。
诗和远方永远存在。写着惊世骇俗的诗,心系可以眺望的远方,伴着沿途的风景,独自前行。
程序员的奋斗史(三十八)——大学断代史(二)——我与数据库的故事,布布扣,bubuko.com
程序员的奋斗史(三十八)——大学断代史(二)——我与数据库的故事
原文地址:http://blog.csdn.net/wentasy/article/details/27973783