程序员应该懂多少数据库

程序员应该懂多少数据库?我敢说,程序员不可能离开数据库。绝大多数情况下,大家写的程序代码操作的都是内存里的数据。但内存里的数据是很容易丢失的,要想不丢失,就得有办法把这些数据存起来——对了,我说的就是“持久化”这回事。

那么,单纯把数据库当“持久化”用就足够了吗?也不对。我们如今常说的“数据库”,其实是个简称,全称是“关系数据库管理系统”,也就是RDMBS。数据库的数据背后,对应的是一套完整、严谨、科学的关系模型,是有论文支撑的,而不是简单“给Excel换个皮”。

要搞清楚的是,关系模型的查询语言,也就是我们常说的SQL,与程序语言完全是两个范式——常见的编程语言多是命令式的,你事无巨细地告诉计算机“该做什么”,第一步做什么,第二步做什么;SQL不关心这个,你说明的只是“要什么”,至于怎么得到结果,你不必关心。所以对于SQL,好处是程序员不必关心具体的操作细节,坏处是当你真的需要关心操作细节(比如瓶颈优化)的时候,往往束手无策。

如果理解了关系模型、关系代数,就足够了吗?还是不对。软件开发不是一门理论科学,而是一门工程技术。既然是工程技术,就必然涉及到对现实的限制,涉及到取舍,涉及到经验。我刚工作那段,冒冒失失一条truncate命令把生产数据库给干掉了,吓出一身冷汗,花了一整晚才恢复。还有一次给每秒插入近千条数据的表加了个触发器,瞬间系统就卡死了。前些年,因为不知道ext4文件系统和MySQL5.6凑一起可能引发诡异问题,想当然安装好,结果搞到生产系统整整停了两天……这些经历让我意识到,数据库绝对不只是DBA的事情。

后来工作的时间长了,越发觉得程序员应当多懂一些数据库的知识。如今的数据的增长速度和访问频率都在极速增长,持久化却一直是靠数据库来解决。结果,程序员建表的时候稍微不小心,最后数据库的体积就可能相差迥异;程序员写SQL的时候稍微粗心点,每天几万几十万次执行下来,压力就可能翻倍增长。

到最后我发现,好的程序员,写程序代码和操作数据库应当是相通的:对写代码有洁癖,对写SQL也应当有洁癖;对程序代码做Profile有钻研精神,对分析SQL执行计划也应当有钻研精神。这样,才能真正写出好的系统来。

如果你也认同上面我说的观点,也希望了解数据库的知识,也苦恼于无从获得这方面的经验,不妨参考极客时间推出的专栏:MySQL实战45讲。

先介绍下作者,数据库大神——林晓斌,网名“丁奇”。先后在百度和阿里任职,从事MySQL数据库方面的工作,是淘宝MySQL版本的核心开发者之一。他专注于数据存储系统、MySQL源码研究和改进、MySQL性能优化和功能改进,并设计了阿里云高可靠双通道binlog方案,在业务场景分析、系统瓶颈分析、性能优化方面拥有丰富的经验。

这个专栏会帮你梳理出学习MySQL的主线知识,比如事务、索引、锁等。在这条主线上,每个点就是一个概念、一个机制或者一个原理说明。我会就开发过程中经常遇到的具体问题和你分析讨论,并且帮你理解问题背后的本质。当然,讲本质的时候,我会把它涉及的周边知识给你捋一遍。

概括起来,看完专栏,你会有下面收获:

MySQL核心技术详解与原理说明

36个MySQL常见痛点问题解析

完整的MySQL学习路径

下面是目录,更清晰地展示了这个专栏的具体内容。

限时福利

福利一:限时优惠¥68,原价¥99,月24日恢复原价

福利二:每邀请一位好友购买,你可获得24元现金返现,多邀多得,上不封顶,随时提现。(提现流程:极客时间App-我的-分享有赏)

如何订阅

长按识别下图







































北京哪个医院治白癜风效果好
北京的医院治疗白癜风



转载请注明:http://www.xcqg58.com/pxxx/pxxx/9183.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了