这些年因为在做国产数据库运维知识自动化平台的开发,所以和很多国产数据库厂商都建立了很深厚的友谊。他们也向我们团队开放了知识库。能够查阅他们的官方文档、技术论坛和知识库。
探索数据库的知识库工作对于我而言,已经干了快三十年了。最早的二十年主要是对Oracle Metalink的探索。可能很多年轻的DBA只是把MOS当成资料库来检索,遇到问题到MOS上去寻找答案而已。而在我刚开始学习Oracle的时候,是系统化地去学习Metalink上关于Oracle的 知识的。
那时候的Metalink还没有现在MOS那么庞杂,,通过一些很不错的导航文档,可以对Oracle的一些知识做系统的学习。随着时间的推移,我对Oracle原理理解的越来越深入,而Metalink也在快速膨胀。虽然现在还是存在一些导航文档,但是想要利用MOS系统学习Oracle知识已经十分困难了。目前系统学习Oracle知识的渠道有官方文档、OCP培训教材以及大量的第三方书籍。而对于Metalink上的知识的学习只能是碎片化的方式了。如果现在还想利用MOS来系统学习Oracle的知识,那不是一个好的主意。琐碎,重复的知识会让你的学习效率大打折扣。
目前的国产数据库的服务网站和知识库还是可以用来做系统学习的,这一点和三十年前的Oracle官网很像。不是因为知识库更加强大,而是因为碎片化的知识不够丰富,所以我们还可以以系统化的方式来学习。
而实际上的数据库知识世界是网状的,是接近于混乱的,想要系统学习的时候,只能在表层,要想往下下钻,很快就会被相互缠绕的藤蔓搞得晕头转向。很多DBA朋友都会有这种感觉,刚开始体系化学习某个数据库技术的时候,会觉得学得很明白了,不过遇到具体的问题都会麻爪。随后学习了一些碎片化的技巧和方法,处理起问题来就逐渐有点得心应手了。如果没有碎片化的知识做补充,那么我们学到的体系化知识无法发挥作用。而仅仅是碎片化地去学习,那么学到的可能是一团浆糊。
RDBMS的核心最初是被按照某种理想的模型设计并开发出来的。不过这种被严格设计出来的系统在面对各种千奇百怪的应用需求的时候,往往无法很好地应对,因此必须对RDBMS核心做大量的优化与改造,打上各种样式的补丁,才能适应多样化的用户需求。另外随着新技术的出现,也需要对RDBMS做升级。
大量的改造、补丁与升级叠加起来,数据库系统会变得越来越复杂。而要保持对老版本系统的兼容性,又对升级改造提出了新要求,大大增加了升级改造的难度。新业务可能会对数据库存储引擎提出新的要求,数据块的结构、日志流的结构等等可能都需要变更才能满足新的功能需求,但是我们还需要保证老版本的数据库能够直接UPGRADE到新版本,这种痛苦目前的一些国产数据库厂商可能刚刚尝到。
牵一发而动全身,有时候改进一项功能并非易事。经常有朋友在吐槽某开源数据库的某个功能为啥做了N多年还搞不出来,实际上这是数据库的复杂性导致的。2016年ORACLE CAB大会上,我提了一个功能,到去年的大会上回顾环节,这个功能才被部分实现。并不是这个功能没啥用,而是因为这个功能太有用了,牵涉到内核太多的功能模块了。
我曾经和一位新锐数据库核心研发的同学做过交流,他认为他们的数据库全面超越Oracle只是时间的问题了,因为Oracle的历史包袱太重,设计思想严重落后,目前堆积的几千万行屎山代码已经快改不动了。而他们的产品是在全新的数据库理念指导下,利用最新的IT技术架构设计出来的,代码高效而优雅,并能充分利用现代硬件的技术能力,因此没有理由会比Oracle差。
他在得意于自己产品的体系化而鄙视Oracle的碎片化的时候,可能没有弄明白一件事,那就是数据库产品不是依靠设计就能做好的,好的数据库产品是在海量的用户场景中不断打磨出来的。他眼中的屎山不是Oracle的弱点,反而是Oracle的优势所在。Oracle在搞出这个屎山的时候还没有崩溃,还依然高质量地帮用户应对各种应用场景,这就是Oracle的最大的成功。
而如果给那位朋友的设计精良的数据库系统以同样的机会,去面对用户千差万别的应用场景的时候,也将开启他们堆积屎山的旅程。我估计他们可能等不到堆积到Oracle 1/10的高度的时候,可能就崩溃了。
做数据库产品是要奉行长期主义的,特别是通用关系型数据库,新鲜出炉的产品自己感觉挺好,到用户现场去练练就会发现很多地方是不契合的。十年可能才是一个数据库厂商刚刚度过童年,仍然不够强健,随时可能会夭折。能够坚持二十年以上的国产数据库厂商目前还寥寥无几。而很多国外商用数据库厂商死在了自己的三十岁左右。年少可以轻狂,不过当你还在自恋于自己的体系化优势的时候,切记这正说明你还比较弱小。看到这里可能朋友们完全明白了我都观点,体系化和碎片化是数据库产品的两个特性,在数据库成长的不同阶段,某些特性会占上风,发展到最后,通用关系型数据库一定是体系化大框架下的碎片化的产品。
目前来看,数据库国产化替代的时间要求很紧,国产数据库目前大多没有充分经受应用场景的磨练,存在问题很多。研发人员觉得产品是体系化的,但是到了用户现场却是项目化的,这实际上还是初级阶段的体系化或者说是设计上的体系化。等第一阶段的磨合完成了,才可能形成较为产品化的版本,进入真正的体系化,然后才能初步满足用户的需求,在用户各种各样变态的场景中继续磨练,逐渐形成体系化下的碎片化能力。不过O记不也是从不大易用,不大好用,不大稳定的时代经过了三十多年蜕变出来的。国产数据库在大量关键行业应用的锤炼下,所需的成长时间会大大缩短,我坚信5-10年里一定会出现优秀的国产数据库产品。
国产数据库需要用户的支持,政策的扶持和资本的加持,才能更加迅速的发展壮大。我衷心希望广大DBA也能对它们更加友善一些。值得庆辛的是国产数据库的生态环境正在改善,大量的企业和个人正在接近和接触国产数据库,政策层面也给了国产数据库极大的支持。今天第一支纯数据库概念股票达梦也将挂牌上市,资本市场能够给数据库产业巨大的支撑。
我也希望看到数据库厂商对各种客户场景应对自如,其知识库丰富得让人看不过来。到那一天,国产数据库就不仅能在政策的扶持下艰难生存,而且还能扬帆出海。新能源汽车的今天说不准就是国产数据库的明天。
今天有幸在现场见证数据库第一股的上市,我这段时间也在回顾子衿技术团队和达梦的这十多年的各种往事,还没写完,等明天再和大家分享吧。