基于开源代码开发一个大型集中式通用关系型数据库很难吗?

2023年 12月 27日 47.0k 0

临近年底,这也是我今年的最后几篇文章之一了。今年冬天特别冷,穿啥衣服都不觉得暖和。翻了一阵子发现数据库厂商送的衣服大多比较厚实,适合这个寒冬穿。于是最近经常穿着各种数据库的衣服上班下班。前些天穿了一件IvorySQL的衣服坐飞机,空姐看了我半天后问我:“这件始祖鸟的衣服好像没见过别人穿过”。我笑着说:“这是高端品牌,一般人买不着”。上周一个朋友约我小聚,脱掉外套后发现俩人都穿了一件同款的PingCap蓝色厚T恤。看样子不止我一个人发现了国产数据库的这个好处。

今天聊聊自研数据库的难点,在看到这个问题的时候肯定有些朋友会问:“为什么我们需要大型数据库,把自己的数据库拆小不就解决问题了吗?”,我也经常会听到:“为什么非要这样,为什么不那样”。每个企业的实际情况不同,其需求是不同的,作为一个用户你说不需要某个功能是完全没毛病的,不过作为数据库厂商,需要为各种各样的应用场景提供解决方案。

进入正题,对于这个问题大家的观点可能比较一致,不管采用哪种方式,自研确实很难,因为关系型数据库发展这么多年,很成功的大型商用集中式通用数据库就那么几个,最成功的不外乎Oracle、SQL SERVER、DB2这三巨头。连曾经风光无限的SYBASE、 INFORMIX在大浪淘沙中都已经变成路人甲了。

这些年国产数据库替代的需求很旺盛,以中国如此大的数据库市场,能不能培养出一个像Oracle一样的数据库产品呢?我想应该能,不过从零开始从头研发似乎难度有点大,比如说一个类似Oracle的数据库,其核心代码一般来说要超过1000万行,就按1200万行计算吧。按照一个人月2000行核心代码计算(这个代码量不是全流程代码量,数据库核心研发全流程评估代码量不会超过1000行/人月),那么一人年的代码量是2.4万,那么需要500人年。

按照最理想的状态,我们能招到100个高水平的核心代码研发工程师,从0开始最乐观需要5年时间才能拿出一个初级产品,再花上两三年在实际用户那里去磨合提升,才能初步成型。按照数据库核心代码研发人员100万的平均年薪(这个是比较低的,国外的数据库核心代码研发人员年薪要在30万美金以上),需要投入的研发经费是5亿。在市场不明朗的情况下,每年投入一亿,砸5年才能上市。这种买卖除非是航天军工这种举国体制下,恐怕很少会有企业能如此投入。如果再算上周边工具与接口需要投入的数倍研发人员,以及三五百人起步的销售人员,数百人的营销市场人员与管理人员,一家成功的数据库企业每年要投入的资金至少也要几个小目标。而目前又有几家企业每年能真正卖出几个亿的数据库许可证与服务呢?

基于此我一般不太敢相信中国真的存在很多这样的完全自研的数据库企业和产品。算一算账我们大体上也知道数据库厂商动不动就说我们核心研发几百人上千人是件多么不靠谱的事情,大部分国产数据库厂商的年收入都不足1个小目标,如何能长期支撑如此烧钱的核心研发团队?我所了解的很多数据库厂商的核心研发人员不过二三十人而已,甚至一些小企业只是一个个位数。

既然现在从零开始干不大现实,那么基于开源代码是否简单一些呢?确实这是难度较低的做法,也是目前大多数国产数据库厂商采用的方案。基于开源代码可选的是MySQL或者Postgresql,MySQL虽然很强大,长期霸占数据库流行榜的TOP 2,但是MySQL的核心代码不足以支撑它成为一个大型的集中式数据库,其GPL开源协议也不支撑在它的基础上大幅度修改代码,并做成开源的商用数据库。

因此PG变成了唯一的选择了。可惜的是,PG在整体架构,核心代码以及一些核心算法上也不具备直接成为Oracle这样的大型通关系型数据库的潜质。astore存储引擎、XID64、FULL PAGE WRITE、DOUBLE BUFFER、不太完善的checkpoint设计、低效率的lwlock代码、由于缺乏pmon/smon导致的kill -9灾难、优化器能力不足、缺乏高并发与增量备份能力、没有类似ORACLE RAC的高可用方案等因素都阻碍了PG作为一个大型关键数据库的基础平台。 要想达成我提的目标,必须对PG的核心代码做大手术才行。   

要对PG动大手术,依然需要大量高水平的数据库核心开发人员参与,这也不是一般企业能玩得起的。所以说目前国产数据库虽然有200多家了,不过大多数企业都选择去搞分布式数据库,而不去碰大型集中式数据库这个烫山芋。这是因为数据库核心研发的难度太大了,分布式数据库可以把有限的研发放到分布式集群上,从而避免更加花钱的对数据库核心的深度优化所需要的投入。

花大力气去研发数据库核心不仅仅是技术上有难度,甚至有些时候有钱都不一定能干好,因为可能找不到足够的高水平的研发人员。在没有占有足够大的市场的情况下,不敢投入巨资去做研发。产品水平不够又无法吸引足够多的用户。这个先有鸡还是先有蛋的问题是目前困扰国产数据库发展的最大障碍。

虽然说研发一个大型集中式数据库很难,但是中国自主可控的市场又必须有这么个产品,中国的数据库市场规模也支撑得了这么一个产品,因此我还是对中国能够出现这么一个产品持有乐观态度的。只不过在目前千军万马争夺这个制高点的情况下,绝大多数企业会在这场长跑中落败,只有少数企业最后会在竞争中活下来,就像30年前国外商用数据库市场的那场大战一样。    

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论