写给想从事数据库方面工作的朋友
经常有人问我,有关数据库方面的职位、职业规划、转型等相关的问题。对于经常听到的“DBA(数据库管理员)、数据库开发工程师、数据挖掘工程师、数据库架构师......”这些职位,之前我也比较迷惑,甚至搞不清楚这些岗位具体的工作任务和职责,更别提什么职业
经常有人问我,有关数据库方面的职位、职业规划、转型等相关的问题。对于经常听到的“DBA(数据库管理员)、数据库开发工程师、数据挖掘工程师、数据库架构师......”这些职位,之前我也比较迷惑,甚至搞不清楚这些岗位具体的工作任务和职责,更别提什么职业规划了。后来询问了一些专门从事数据库方面工作的朋友,也查了一些资料,加入了自己的一点点见解。抽空整理了一下,写出本文,希望能够帮助到想走这条路的朋友。由于本人也并不太专业,如有错误,望及时指出。
所谓数据库管理,就是我们通常说的DBA(数据库管理员)。主要工作是做数据库安装、管理、调优、备份、容灾、集群、安全等(拿sqlserver DBA为例子,工作职责可以参考http://blog.csdn.net/dinglang_2009/article/details/7352850),主要技术点是除了对数据库本身比较熟悉外,还要对硬件(主机、存储、网络)、操作系统等方面有较好的理解,否则很难做到真正的高手。例如,在做数据库调优中,I/O是比较常见的性能瓶颈,你要想真正最大限度的调优,必须了解磁盘(硬件)的工作原理,还要了解操作系统的相关知识(例如windows下的文件系统的特性)。在做数据库集群的过程中,拿sqlserver为例子,必须先实现windows操作系统的集群,如果你不了解windows系统的管理,怎么能胜任呢?优秀的DBA,不一定是个优秀的系统管理员,但至少也是非常数据操作系统实现和管理的,这毫不夸张。
总的一点,就单单这个方向而言,要学的知识和技术也确实太多了。所以,通常DBA只需要熟悉一款数据库产品(例如Oracle。国内sqlserver DBA很少)即可,能在职业生涯中走得很远。相反,多而不精是很忌讳的。
所谓数据库开发,我认为有好几种。首先,一般人理解是指涉及到数据库应用的开发。例如使用php+mysql开发网站的,运用Java+Oracle开发银行系统的,asp.net+mssqlserver开发企业级ERP系统的......这些都可以认为是数据库开发。在某些公司(一般是大公司),也有专业从事数据库层面开发的工程师。通常他们的系统都比较依赖于数据库层面,例如使用了很多事务控制,存储过程,高并发经常造成数据库死锁等等。这样一来,工作任务会很重,必须有单独的“数据库开发工程师”。还有一种是采用纯数据库系统上的语言进行开发工作,这类一般是指专注于纯数据库技术开发的人员,如数据挖掘工程师(数据库抽取、传输、加载,是数据仓库应用的一部份)。此类入门的门槛较高,薪资待遇也非常好,随着商业智能在国内的兴起,这类职位的需求也越来越多。
有些大型公司,对数据库应用比较深入,可能会设置专业的DBA从事开发顾问工作,主要责任是与项目组一起进行系统的数据库结构设计、SQL相关的开发优化,建库建表操作等,这类DBA要求对系统业务有一定了解,对数据库开发与优化也比较熟悉,对这种职位每个公司的名称可能不一样,有些公司还是称为DBA或数据库开发工程师,阿里巴巴公司称为开发DBA或应用DBA。例如我有个朋友在阿里巴巴下面的支付宝DBA项目组,他就主要从事Oracle数据库管理和调优工作。总而言之,大公司会细分,小点的公司则一般希望你是全能型的。这很好理解,大公司有钱,且对技术要求更高,所以需要很多“专才”来协作。而小公司财力等各个方面有限,相对技术要求低一点(也不一定),所以更倾向于“通才”(至于那种太小的公司或者不是专门从事IT行业的,一般不会设专门的DBA。打个比方,一个皮包公司招到一个程序员,恨不得立马就把公司里的美工也炒了,可想而知小老板对人才的渴望和要求)。至于“通才”还是”专才“,还是要看自己定位了。
应届毕业生要从事DBA工作门坎比较高,因为DBA职位是需要有一定实践经验的人员,应届生很难录用,除非你的特长刚好是公司需要的:比如说你在学校从事的项目或课题中有较深入的数据库相关应用,你在数据库理论方面又有很好的理解。或者你没有做过DBA,但是学校里参与设计过数据库系统,对数据库实现原理很了解。如果你是211或者有高学历(硕士以上),人家可能会愿意培养你。否则,成功入职的可能性就很小了。没办法,在天朝就这样。
表面上看DBA是从事数据库管理工作,不需要软件开发技能,但是随着个人的发展,你需要经常与开发人员打交道,需要写代码模拟开发人员访问数据库的 CASE,还需要做一些新技术的测试学习,写一些自动化脚本等。所以在DBA成长的过程中,开发技能也是必不可少的。实际上,大部分DBA都是从事了一段时间开发工作后才转型为DBA岗位。例如我刚才说道的那位朋友,之前也是从事J2EE方面开发的,积累到一定阶段后,逐渐转型DBA。
所以对于应届生,我不建议直接挑战DBA岗位,最好还是先从事一段时间开发工作,如果对数据库管理的工作比较感兴趣,可以在工作过程中不断学习数据库知识,帮助团队解决数据库的问题,当决定转型为DBA或者是工作中有明确的DBA需求后,再选择从数据库概念、功能、管理、开发、调优逐步系统的学习数据库知识,多做测试与实践,在专业论坛中处理更多的问题。不要忽略论坛,Oracle大牛冯大辉、盖国强,他们就是在论坛和工作中积累起来的。
3.关于考试与认证
早几年,在我还在上学的那个时候,“认证”是非常流行的,认可度也不错。数据库相关培训的价格应该都不低(例如Oracle OCP OCM 等),外界的认可度也没以前好,因为现在认证考试基本上很容易通过。去参加数据库培训也并不一定能学到多少东西,更重要的是个人的兴趣与环境。如果你真想提高自己,而且有经济基础,那可以选择参加数据库培训,但前提是你要具备一定的基础再去,因为培训的时间一般很短,要想在培训的时间内消化基本上不太可能,所以最好先拿认证试题测试一下自己的能力,如果你连题目的意思都不理解或者里面的概念都没听过那还是花一些时间再自学一下吧。
4.数据库学习的方法
就我个人而言,对数据库谈不上有什么深入研究。稀里糊涂的用了几年,不敢提太多建议误人子弟。关于数据库学习的方法,一定要理论加实践(否则就是纸上谈兵了),光看书是没用的,而且会让人感觉投入多收益少而失去学习兴趣。开始时多动手实践,掌握常用的功能,在工作中或网络上解决实际的问题,学习别人解决问题的方法,对于不理解或不熟悉的知识点自己要亲自实践,解决的问题多了,自然就会感觉水平提高。到一个阶段后,接着会发现水平提高得越来越慢,这时反过来从更基础的层面系统的学习数据库知识,尤其是研究偏底层和原理性的知识,再加以实践。过了这个阶段,基本算是入行了。我在博客园和CSDN等网站上,经常有许多深入数据库底层相关的文章与讨论,让我这种菜鸟望而却步,这些知识很重要而且难掌握,但并不表示这些知识很实用,因为我们学习知识主要目的是解决问题,而不是表现自己。因为我们大多数人还是从事应用层开发。我曾对sqlserver的索引、事务、锁一直比较疑惑,想恶补一下。抱着几本《sqlserver 2005 技术内幕》啃,这系列的书是从sqlserver 2005底层开始揭示的,确实写的好,可惜不太适合我这种菜鸟。试想,连一条复杂的sql语句都写不出来,你跟他讲sqlserver引擎内部执行原理,那能有好效果吗?所以,还是那句经典的话:由浅入深,循序渐进,理论加实践。说起来简单,做起来难啊!没有捷径。工作中积累,业余还得学习,不断积累多年。
blog.csdn.net/dinglang_2009

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Go语言是一种高效、简洁且易于学习的编程语言,因其在并发编程和网络编程方面的优势而备受开发者青睐。在实际开发中,数据库操作是不可或缺的一部分,本文将介绍如何使用Go语言实现数据库的增删改查操作。在Go语言中,我们通常使用第三方库来操作数据库,比如常用的sql包、gorm等。这里以sql包为例介绍如何实现数据库的增删改查操作。假设我们使用的是MySQL数据库。

Hibernate多态映射可映射继承类到数据库,提供以下映射类型:joined-subclass:为子类创建单独表,包含父类所有列。table-per-class:为子类创建单独表,仅包含子类特有列。union-subclass:类似joined-subclass,但父类表联合所有子类列。

苹果公司最新发布的iOS18、iPadOS18以及macOSSequoia系统为Photos应用增添了一项重要功能,旨在帮助用户轻松恢复因各种原因丢失或损坏的照片和视频。这项新功能在Photos应用的"工具"部分引入了一个名为"已恢复"的相册,当用户设备中存在未纳入其照片库的图片或视频时,该相册将自动显示。"已恢复"相册的出现为因数据库损坏、相机应用未正确保存至照片库或第三方应用管理照片库时照片和视频丢失提供了解决方案。用户只需简单几步

HTML无法直接读取数据库,但可以通过JavaScript和AJAX实现。其步骤包括建立数据库连接、发送查询、处理响应和更新页面。本文提供了利用JavaScript、AJAX和PHP来从MySQL数据库读取数据的实战示例,展示了如何在HTML页面中动态显示查询结果。该示例使用XMLHttpRequest建立数据库连接,发送查询并处理响应,从而将数据填充到页面元素中,实现了HTML读取数据库的功能。

如何在PHP中使用MySQLi建立数据库连接:包含MySQLi扩展(require_once)创建连接函数(functionconnect_to_db)调用连接函数($conn=connect_to_db())执行查询($result=$conn->query())关闭连接($conn->close())

PHP中处理数据库连接报错,可以使用以下步骤:使用mysqli_connect_errno()获取错误代码。使用mysqli_connect_error()获取错误消息。通过捕获并记录这些错误信息,可以轻松识别并解决数据库连接问题,确保应用程序的顺畅运行。

PHP是一种广泛应用于网站开发的后端编程语言,它具有强大的数据库操作功能,常用于与MySQL等数据库进行交互。然而,由于中文字符编码的复杂性,在处理数据库中文乱码时常常会出现问题。本文将介绍PHP处理数据库中文乱码的技巧与实践,包括常见的乱码原因、解决方法和具体的代码示例。常见的乱码原因数据库字符集设置不正确:数据库在创建时需选择正确的字符集,如utf8或u

MySQL数据库管理系统的基本原理解析MySQL是一种常用的关系型数据库管理系统,它通过结构化查询语言(SQL)来进行数据存储和管理。本文将介绍MySQL数据库管理系统的基本原理,包括数据库的创建、数据表的设计、数据的增删改查等操作,并提供具体的代码示例。一、数据库的创建在MySQL中,首先需要创建一个数据库实例来存储数据。通过以下代码可以创建一个名为"my
