最近,关于数据库国产化替代的话题甚是热门。OSCHINA开源中国特别邀请了欧冶云商股份有限公司数据库首席薛晓刚就这一话题发表看法。

为什么要替代Oracle?

去IOE的背景,要从阿里巴巴去IOE谈起,I是IBM小型机大型机,O是Oracle数据库,E是EMC存储。这几个搭配起来使得阿里轻松走过了最初的技术发展阶段。这个配置组合也是当年这条街最靓的仔。这个穿搭在大型银行和运营商中也很常见。这种组合的好处是就稳定,而且非常稳定。缺点可能只有一个,就是贵。

随着阿里业务的增加,阿里人考虑继续这样使用的成本很高。再加上阿里开始了云计算的规划,所以提出了去IOE的口号。这个在其他互联网公司是不可能有的。因为其他互联网公司一开始就没有IOE所以不需要去。只有阿里一开始的架构是这样的。所以只有阿里提出了。

阿里做阿里云,希望用户上云。上云的核心就是数据上云。数据上云后存在哪里?自然是数据库中,如果用的数据库是Oracle的,那么可能要分给Oracle利润(要采购许可)。所以阿里打算用MySQL以及后来自研替代Oracle。

从最开始的去IOE,直到现在还经常看到各种大会上提到去O,这用了十几年,去掉了I和E。有些企业完成了去O,而有些企业还在使用O。

那么为什么只提去O,那不用去DB2和SQLServer吗?本质上也要去的。只是其他的数据库不如Oracle的使用广泛,例如现在使用和维护DB2的人是很少了。之所以没人提去DB2,是因为从总体来说DB2,已经被去掉了。所以狭义去O是去掉Oracle数据库,而广义的去O其实可以扩大为去M(美国化)。

在今天不少人观点认为用MySQL去替代Oracle是无意义的。因为MySQL和Oracle同属于甲骨文公司。甚至在有的场合中还会提到要去掉MySQL。

当前数据库国产化进程情况如何?

当前在信创和安可这些趋势下,国产数据库如雨后春笋般出现。在国内某权威数据库排行榜上,已经有280多个数据库了。实际上的数字可能比这个还要多一点。

在一些政府、金融、运营商行业都有一些国产化替换。这些替换其实不仅仅是数据库了,还包括服务器、CPU、操作系统等等。从宣传上看有些是全栈替换,有些是部分替换。也还有一些公司或者企业没有替换。然而这些都是国产厂商的宣传,至于实际的替换情况只有用户自己知道。而即使替换的用户也没有进行相关的宣传,这就使得整个情况非常的模糊。不过这个过程还在继续,还是会有一些系统从Oracle、DB2、SQLServer等数据库切换到国产化上来的。只是现在不确定因素太多了。

今年年初,TiDB、TDengine、TDSQL、OceanBase四位数据库界掌门人在一场直播中大致达成一致,三年后在中国健康运营的数据库不超过20家。所谓健康运营是,企业能有正常营收,员工发薪正常。目前国产数据库有280多个产品,有的一个公司有几个产品。即使这样也是有绝大部分产品或者公司会因为无法盈利而退出舞台。用户现在也意识到了这一点,也在等情况明朗后再去选择。没有企业愿意看到花了很大代价切换的数据库无人维护了,不得不继续再次替换。

国产数据库有完全自研的,例如达梦、OceanBase等,也有一些是基于MySQL做改造的,还有一些事基于PostgreSQL改造的,还有购买外国源码然后进行修改的。

替代Oracle的难点在哪里?

技术上,Oracle确实领先,在数据库领域是一个标杆一样的存在。即使我们国产数据库的头部企业都认为自己和Oracle有较大的差距,作为学习者不断地在向Oracle学习。

Oracle领先的其实不仅仅是技术,还有设计理念和前瞻性。2020年信通院发布的白皮书中写了数据库的未来几大趋势,而在那时候这几个趋势当时Oracle已经部分实现和深度实现了。其实Oracle产品线很多,不仅仅是数据库。其中间件、硬件、操作系统等等是全方面的输出。

具体到几个方面:

兼容性。对于替换国产数据库,兼容性是一件绕不开的话题,特别是对于存量系统来说,大多数重要系统是运行在Oracle数据库上的,那么对于Oracle的基本SQL语法、PL/SQL、存储过程、触发器等的兼容性肯定是十分重要的,毕竟这涉及代码变更的问题。如果在国产数据库替换过程中出现业务适配新数据库代码变更量太大、数据库功能缺失需要业务侧代码补充、适配分布式数据库过程中对数据库设计和业务逻辑变更等现象的话,开发层面对国产数据库的抵触会非常大。

性能。性能和硬件以及优化器都有很大的关系。优化器这方面目前没有能超过Oracle优化器的。因为这些底层都是数学算法。2021年信通院发布的数据库发展白皮书显示,我国数据库企业针对数据库领域的平均专利数量(含国内外专利)为38个,最高为500个左右规模,数量为0的企业个数是19个,占比24%。拥有专利数0-4个的企业占比最高为51%,专利数5-10个的企业次之,占比14%,专利数21-50个的企业数量排名第三,占比12%。从企业专利数量上看,Oracle以1.4万个全球领先,SAP居次席。

稳定性。Oracle的稳定性还是毋庸置疑的,这也就是为什么在过去那么多年中,其一直占据着领导地位,以及使用如此广泛。企业负责人都不希望看到自己的数据库经常出问题,每次数据库的问题都可能导致故障,从而影响到在线业务。不仅仅要面对直接和间接的经济损失,还有问责的压力。

Oracle等国外数据库有足够的全球市场,专心在技术上投入做数据库,而国产数据库厂商只能在国内有限的数据库市场内卷,需要投入大量的内卷、恶性竞争和关系处理上,无法专心把全部精力放在做数据库上。甚至还是为了如何生存而谋划。

国产数据库的出现并不是技术问题,而是其他因素。

数据库领域的人都知道,在信创活动结束之后就没有替换动力了。而最终国内市场无法容得下几百家供应商,所以大部分国产数据库的消失也不是技术问题。

有哪些能够替代Oracle的国产数据库?

这个替代要讲清楚是怎么替代?如果说就是把系统关停,然后把数据导过来,然后再修改数据库的连接字符串就可以和之前一样正常使用而且稳定的。目前没见过也没听说过。

如果说换了一个国产数据库,然后把链接这个数据库的所有业务系统的软件代码进行修改(这个修改可能是30-100%),即软件重写适配数据库或者部分需求和功能放弃,那么这样的替换还是有一些的。OceanBase、TiDB、TDSQL等都有在不同程度上有,具体的都是应实际情况而定。

这些替换的优势,可能在于满足了政治要求。

这些替换的劣势,有多方面:

由于同等硬件下不如Oracle的性能,所以增加硬件导致成本的上升。或者分布式数据库的硬件就是比集中式硬件的多导致的硬件成本上升。

由于数据库特性和功能的缺失,所以应用程序需要改造的成本上升。这部分可能占替换总成本的60%-80%。因为这是调动大量应用开发人员重写适配的过程。

由于稳定性上不如Oracle,所以需要增加大量运维人员,导致运维的成本上升。

由于部分国产数据库需要许可才可以运行,所以增加了大量的许可费用。相比较之前很少采购Oracle许可或者甚至不采购许可来说,这部分采购费用占比很大。

以上这些成本可能会是使用Oracle数据库的数倍甚至几十倍甚至上百倍。而很多计算中都忽略了第二和第三项的成本。

现有国产数据库跟Oracle相比,有多大的差距?

从技术上来说,我们和Oracle相比有代差。

可能不同的人有不同的见解。我个人感觉有以下多方面的差距(但是不限于此):

数据库的优化器上:有人说为什么Oracle快,你可能不知道多少满头白发的数学教授在那里研究着这些。有人说:你别逼我,逼急了我什么都做的出来。”“是吗?,那你把这道数学题给做做?”人被逼急了还真不是什么都做的出来,起码数学就不是。各种复杂查询的核心是优化器和统计信息。而这全部都是数学问题。没有在数学上的基础投入是无法在这个领域攻坚克难的。

体系架构上:如今越来越多的国产数据库考虑RAC架构。在经历了互联网的分布式数据库的洗礼后,越来越多的用户觉得集中式更加适合自己。所以才有了各种国产数据库厂商开始实现RAC的计划,达梦、优炫等。即使分布式数据库厂商在研发过程中发现Oracle的各种体系设计,没有一个是多余的,都是设计极其精妙的。而这些很多设计都是30年前甚至更早就已经设计到位的。

与操作系统的融合上:数据库是运行在操作系统之上的,如何与CPU打交道?SQL调用指令集的多少都是有讲究的。甚至有些操作是绕过操作系统直接操作的。这些都是需要深耕操作系统才能解决的。

与硬件的融合上:数据库必然要和存储设备打交道。数据库的优化几乎等同于IO优化。所以Oracle直接做出来自己的存储。这些存储上都是带有CPU的,更好的存储和读取数据上发挥了很大的作用。做数据库是从上至下的深入解决。

趋势把握上:数据库的多模和超融合这些都是Oracle在引领着数据库技术的前进方向。我们定义为趋势的,Oracle基本都是已经实现的。而很多理念从设计到实现需要8-10年的过程。

国产数据库未来要怎么走?

我个人角度认为,应该静下心来踏实的做技术。

最好是没有政治因素的干扰去市场上竞争,避免大跃进式的百家齐放,而是规范市场,让国内外数据库厂商同台竞争。用户结合自己的预算进行抉择,是选择廉价的还是性价比高的,让一切回归到技术本身来。而不能用政策限制其他产品进入,只能强制使用国产。这样会导致自我封闭和外部的排斥。既然我们用政策限制其他人,那么对等的就会出现别人限制我们。从而更加无法走出去。

如果真正能走出去,在国外用得起来,那么就是国产数据库的成功。中国的高铁就是因为走出去了才成为了中国的一张名片。