写给想从事数据库方面工作的朋友
经常有人问我,有关数据库方面的职位、职业规划、转型等相关的问题。对于经常听到的“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 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Apple の最新リリースの iOS18、iPadOS18、および macOS Sequoia システムでは、さまざまな理由で紛失または破損した写真やビデオをユーザーが簡単に回復できるように設計された重要な機能が写真アプリケーションに追加されました。この新機能では、写真アプリのツール セクションに「Recovered」というアルバムが導入され、ユーザーがデバイス上に写真ライブラリに含まれていない写真やビデオがある場合に自動的に表示されます。 「Recovered」アルバムの登場により、データベースの破損、カメラ アプリケーションが写真ライブラリに正しく保存されない、または写真ライブラリを管理するサードパーティ アプリケーションによって失われた写真やビデオに対する解決策が提供されます。ユーザーはいくつかの簡単な手順を実行するだけで済みます

Hibernate ポリモーフィック マッピングは、継承されたクラスをデータベースにマップでき、次のマッピング タイプを提供します。 join-subclass: 親クラスのすべての列を含む、サブクラス用の別個のテーブルを作成します。 table-per-class: サブクラス固有の列のみを含む、サブクラス用の別個のテーブルを作成します。 Union-subclass: join-subclass と似ていますが、親クラス テーブルがすべてのサブクラス列を結合します。

MySQLi を使用して PHP でデータベース接続を確立する方法: MySQLi 拡張機能を含める (require_once) 接続関数を作成する (functionconnect_to_db) 接続関数を呼び出す ($conn=connect_to_db()) クエリを実行する ($result=$conn->query()) 閉じる接続 ( $conn->close())

PHP でデータベース接続エラーを処理するには、次の手順を使用できます。 mysqli_connect_errno() を使用してエラー コードを取得します。 mysqli_connect_error() を使用してエラー メッセージを取得します。これらのエラー メッセージをキャプチャしてログに記録することで、データベース接続の問題を簡単に特定して解決でき、アプリケーションをスムーズに実行できるようになります。

Golang でデータベース コールバック関数を使用すると、次のことを実現できます。 指定されたデータベース操作が完了した後にカスタム コードを実行します。追加のコードを記述せずに、個別の関数を通じてカスタム動作を追加します。コールバック関数は、挿入、更新、削除、クエリ操作に使用できます。コールバック関数を使用するには、sql.Exec、sql.QueryRow、または sql.Query 関数を使用する必要があります。

Go 標準ライブラリのデータベース/SQL パッケージを通じて、MySQL、PostgreSQL、SQLite などのリモート データベースに接続できます。データベース接続情報を含む接続文字列を作成します。 sql.Open() 関数を使用してデータベース接続を開きます。 SQL クエリや挿入操作などのデータベース操作を実行します。 defer を使用してデータベース接続を閉じ、リソースを解放します。

JSON データは、gjson ライブラリまたは json.Unmarshal 関数を使用して MySQL データベースに保存できます。 gjson ライブラリは、JSON フィールドを解析するための便利なメソッドを提供します。json.Unmarshal 関数には、JSON データをアンマーシャリングするためのターゲット型ポインターが必要です。どちらの方法でも、SQL ステートメントを準備し、データをデータベースに永続化するために挿入操作を実行する必要があります。

C++ の DataAccessObjects (DAO) ライブラリを使用して、データベース接続の確立、SQL クエリの実行、新しいレコードの挿入、既存のレコードの更新など、データベースに接続して操作します。具体的な手順は次のとおりです。 1. 必要なライブラリ ステートメントを含めます。 2. データベース ファイルを開きます。 3. SQL クエリを実行するかデータを操作するための Recordset オブジェクトを作成します。 4. 特定のニーズに応じて結果をスキャンするか、レコードを更新します。
