DBA需要懂开发吗?


DBA,指的是数据库管理员(Database Administrator)。DBA 是负责管理和维护数据库系统的专业人员,他们的工作涵盖了数据库系统的各个方面。传统上,DBA 主要专注于运维领域,DBA 是否需要懂开发呢?这是一个值得深思的问题。


DBA的职责
DBA 的职责包括安全加固、生产值班、工单处理、账号审计、例行巡检、容量管理、监控告警、部署交付、数据迁移、切换演练、上线变更、系统优化、备份恢复、系统集成、故障排除、指定标准规范、编写技术文档、数据库资产管理等等。除此之外,还会开展一些技术交流和培训工作。高级一些的 DBA 还要研究新技术,容灾架构设计,参与平台工具开发等等。


很明显,高级一些的 DBA 是需要参与到开发里的,需要掌握一些开发知识。


总体而言,DBA 的目标是确保数据库系统的稳定性、高可用性、高性能和安全性。他们需要对数据库引擎、SQL 语言和数据库架构有深入的了解,以便更好地管理和维护数据库系统,满足组织对数据的需求。


广义DBA的分类

在数据库领域,有一些误区需要澄清。如果一个人专门在开发部门里编写 SQL 并优化 SQL,他是否属于 DBA?与我前面提到的 DBA 相比,这个人在传统上并不算是 DBA。在 Oracle 领域,这种情况很常见。这些人通常负责编写存储过程,有些存储过程甚至长达 3000 行,让人完全看不懂。区别于传统意义上的 DBA,他们被称为"数据库开发",他们和编写业务代码的程序员没有区别,也要开发业务代码,只是这些业务代码用 SQL 实现,封装到了存储过程里,所以有些人也喜欢称其为"开发 DBA",需要注意这种区别。有时候,"数据库开发"还容易与"数据库内核开发"混淆。"数据库内核研发"是指负责研发数据库管理系统(DBMS)核心代码的专业人员。他们深入了解数据库引擎的底层实现,并负责开发和优化数据库引擎的功能。



在使用 MySQL 的场景中,很多中小型公司会选择使用云服务,这些公司需要进行的运维工作较少,大多数工作都由云平台自动化完成,只有少量需要人工操作的运维任务由云计算服务商的技术人员负责。这些公司的 DBA 有可能也会参与到业务的表结构设计、SQL 开发和优化等工作,甚至开发运维平台。为了区分他们和纯粹从事运维工作的 DBA,我将称呼他们为"业务 DBA"。


因此,在我看来,DBA 可以分为三种形态,分别是运维 DBA、开发 DBA 和业务 DBA。


1691143937591.png


什么是“懂开发”?
懂是一个模糊词。每个人对懂的理解和要求不一样。甚至"开发"也是个模糊词,“开发"到底是指开发人员,还是"开发流程”,亦或是"开发技能"呢?


举例子:


对懂的理解和要求不一样。 你说你懂女朋友,女朋友说你不懂她,问题出在哪儿?大家对懂的理解和要求不一样。前者要求知道女朋友的姓名、年龄、性别、身高体重、喜欢吃什么等等即可。后者要求你是她的厨师、医生、老师、保姆、保镖、心理医生…


开发指"开发人员"或"开发流程"。 有人问软件领域的产品经理是否需要懂开发?这里的懂,明显指产品经理懂开发流程和技术术语,能听懂"开发人员"说的东西,能很好地沟通。所以产品经理是应该要懂开发的。但如果你理解"懂开发"为"懂编程",那大多数产品经理是做不到的,也是不需要的。所以,这里的"懂开发"指的是他能理解开发的方方面面,包括人和事,这里的"开发"指程序员,也指开发流程。


开发指"开发流程"。 假设你现在要卖软件,你想忽悠客户,说开发这个软件多么的难,要报很高的人天。客户是行家,他知道这个项目很简单,拿开源框架,怎么怎么改,只是他不会写代码而已。工作量方面,设计、开发、测试全链路的人天耗时和你计算得清清楚楚,你这时会惊叹遇到一个懂开发的客户,生意真难做! 这里的"懂开发"是什么意思?指的是客户懂开发流程。


开发指"开发技能",并且对掌握的程度要求不一致。 当你学会了 Python 语言,并且使用 Python 语言写一些自动化脚本,甚至能读懂 ansible 的一些模块,修改为自己想要的样子,你出去面试一个 Python 运维开发的岗位,完全受到打击了,面试官觉得你不懂开发,甚至不懂 Python,因为你不懂 Django 框架的任何东西。这里的懂开发指的是能不能专职做开发人员。


DBA懂开发意味着什么?
当我们说 DBA 需要"懂开发"时,指的是 DBA 需要具备一定的软件开发技能,能够编写和理解代码,并参与到应用程序的开发过程中。这些开发技能可以涵盖多个方面,例如编程语言、应用程序架构、Web 开发、数据库开发和自动化脚本等。所以这里的开发就是指"开发技能"了。接下来,就是定义 DBA 对开发有多"懂"才算"懂"。


作为对技术有点追求的人,我认为能称为"懂开发"需要达到一些门槛,需要至少掌握以下 6 点,并不是说会写一些 shell 或 python 脚本就称之为"懂开发"了。


掌握主流的开发语言:DBA 需要熟练掌握至少一门主流的开发语言,例如 JavaScript、Java、Python、Go 等。这使得他们能够编写自动化脚本和工具,提高工作效率。许多任务仅凭 shell 语言无法完成,可以借助 Python 来实现。我认为,对于那些希望在技术道路上更进一步的 DBA,掌握 Python 代码编写是必不可少的。另外,Go 语言也是一个很好的选择,因为它在部署时无需过多的依赖包,且性能优秀,非常适合用于编写运维工具。最后,如果你需要开发运维管理平台,还需要掌握前端的 JavaScript 编程。


熟悉编程框架:熟悉一款主流的编程框架,如 JavaScript 的 Vue、Java 的 Spring Boot、Python 的 Django 等,有助于 DBA 更好地参与到应用程序的开发中,与开发团队合作。业务 DBA、开发 DBA 可以考虑掌握,运维 DBA 则不要求。


数据库开发知识:掌握数据库开发的基本知识,包括表设计、触发器设计、存储过程编写等,能够优化查询、设计数据库结构。DBA 都应当掌握。


熟悉数据结构与算法:了解常用的数据结构与算法,如堆栈、列表、队列、哈希等,有助于在处理复杂问题时更高效地解决。这个对于 DBA 来说不是必须的。


理解面向对象编程:掌握面向对象编程的原则和方法,有助于设计和维护复杂的应用程序。这个对于 DBA 来说不是必须的。


熟悉开发流程和工具:了解开发流程,如 DevOps,以及版本控制工具如 Git 等,能够更好地与开发团队协作,保障项目的顺利进行。这个对于 DBA 来说不是必须的。


上述我列举了我认为"懂开发"需要达到的门槛,但实际上有很多条都不是 DBA 必须掌握的技能。所以可以得出结论,DBA 需要懂开发吗?答案是不需要。


所以,虽然我自己维护了一个 ansible playbook 的开源项目,我在里面整合了 portable-ansible 开源项目的代码,甚至修改过其中 portable-ansible 某个模块的 Python 源码,以满足我的使用需求,虽然我经常使用 git,但我并没有真正参与过整个研发项目的整个流程,未掌握和使用任何编程框架,不使用面向对象编程写代码,所以我认为作为运维 DBA 的我是不懂开发的。


不需要完全懂开发,掌握了部分开发技能,例如 Python、shell 编程的 DBA 就可以参与到一些日常运维开发任务上来。而对于懂开发的 DBA,则可以实现更高的价值,技术道路走得更远,你的工作岗位也不局限于 DBA 了。


工作中,运维 DBA 可以参与开发的东西
在实际工作中,DBA 需要开发和参与开发的内容可能包括:


自动化脚本和工具:编写脚本和工具来监控数据库性能、高可用管理、执行备份恢复、自动化数据库部署和配置、巡检等。


数据库存储过程和触发器:设计和实现数据库存储过程和触发器,用于日常运维,例如 MySQL 自动创建分区表。


数据库优化:与开发团队一起优化 SQL 查询,改进数据库性能,提高应用程序的响应速度。


自动化运维平台的开发:这个就需要"懂开发"了。


工作中,运维DBA不需要参与开发的东西
二次开发开源数据库


修复开源数库的 bug


当然了,有些并非专职进行内核研发的运维专家能够阅读开源数据库的源代码,甚至他们编写过错误修复方案并得到官方的合并。这些人的技能水平已经超出了我们所讨论的数据库管理员(DBA)的范围,他们可以被称为数据库专家和行业领袖。


结 论

尽管 DBA 的主要职责是数据库管理和维护,但懂开发对于 DBA 来说是一种有益的补充。掌握一些开发技能使得 DBA 可以更好地与开发团队合作,更高效地解决问题,同时提升自身的职业竞争力。然而,具体是否需要懂开发技能取决于个人的职业发展目标和工作需求,DBA 可以根据实际情况做出选择。无论如何,不断学习和拓展技能对于 DBA 始终是重要的。

转载:https://www.modb.pro/db/1687401595498733568?utm_source=index_ori

分割线
感谢打赏
江西数库信息技术有限公司
YWSOS.COM 平台代运维解决方案
 评论
 发表评论
姓   名:

Powered by AKCMS