谈谈国产关系数据库

发布时间 2023-11-11 20:56:24作者: 正在战斗中

因为国家战略等原因,公司的项目已经逐渐在使用国产数据库替代开源的数据库。

本文就说说国产数据库在目前国内的一些使用情况,主要讨论研发和应用情况。

一、概述

1.1现状

这几年国产数据库逐渐走入生产环境,原因多样,但不管什么原因,事实就是这样。

国产数据库非常多,简直太多,据说有400多个产品。

这里有两个比较全的名录:

https://www.modb.pro/db/24797

https://zhuanlan.zhihu.com/p/608581340

 

400多个中不乏滥竽充数或者浑水摸鱼或者不可告人等等,或兼而有之。当然也有真心干实事企业研发的。

至于部分只是做发行的,我觉得大家都不需要费心关注。例如有部分企业就是做gauss的发行,这样也算一个数据库企业,从某个角度讲。


这些数据库大体分4类:关系数据库、nosql/newsql,内存数据库、大数据和计算引擎

市场根本不需要那么多,最终应该剩下10家左右就可以了,每个类型3~4家即可。

个人希望不要再浪费国家钱了,希望这份名单能够在2025的时候缩减到30个左右。

1.2 知名产品

目前看国产数据库主要和3~5种数据库有较深的渊源。这里的渊源包括相似度或者就是代码的高度复用,或者就是换个皮肤,具体什么类型的渊源,需要看具体的产品而定。

oracle系

  • 首推达梦,这是因为大梦大概在本世纪初就开始仿制oracle。它们主要是外在类似oracle,无论开始的时候它的代码来自什么,现在应该是很纯净了,这是我相对佩服达梦的地方。

这多少说明达梦是来真的。

      达梦的外在和oracle十分相似,甚至某些情况下,应用直接迁移问题也不大,因为二者的字段类型、系统表、系统视图、逻辑结构、物理结构都什么相似,甚至是基本一样。从用户迁移的角度出发这是一大利好。

  • 其他-人大金仓、南大通用都有兼容oracle的版本,据说gauss之类也有兼容oracle的版本

      兼容orale是国产数据库需要首先考虑的路径,因为以往Oracle几乎一统天下,现在如果要切换,那么无疑迁移到兼容oracle的数据库中成本是最小的,工程师也最高兴。

mysql系列

     这个比较多,有阿里、腾讯、华为、百度等等。

  •      阿里:  ocenbase for mysql
  •      腾讯:tdsql
  •      华为:gaussdb for mysql
  •      百度:doris,GaiaDB
  •      其他小厂商略-这些小厂商缺乏足够资金和人才,不知道做这个图什么

pg系列

    这个也巨多,因为和mysql一样,居于开源的pg容易开发自有的。

  •      阿里: rds,polar for postgresql
  •      腾讯:tdsql for pgsql
  •      华为:gaussdb for pgsql
  •      其他小厂商略

informix等

    需要特别提一下,这是因为南大通用常常处在榜单前列。informix非常小众。

 

1.3自研成分

     由于本人不可能得到这些大厂的源码,除了部分开源的。所以如果企图从仅仅从源码来判断自研成分必定是不可靠。

     在研究上,有一种技术称为间接测量。例如我们测量大树的高度,在不爬树,砍树的情况下,可以通过阴影来测试其大概的高度。

     同样地,我们可以通过以下几个间接的指标来判断各个数据库的自研成分:

  •    开始研发时间

      这个标准并不可靠,但可以作为参考。

      理论上一个数据库如果仅仅是几年就开发出来,那么基本上是以“借鉴”为主。至于借鉴了多少,那么需要看看公司的实力和产品的结果

      我们都知道,数据库研发的成本是非常之大的,基本不是一个小公司短期内可以做到的,除非这个小团队成员以世界范围内天才和精英为主。如果你告诉我这个团队就是几十到上百人几年内搞好,我不会相信的。

      当然,如果仅仅是自嗨,或者只是为了满足非常特殊的业务场景则另当别论。

      常识告诉我们,如果一款数据库产品要面向大众,那么一般需要满足:精英级别的团队、较长的研发时间、至少在不上的业务场景中测试过

      所以,我的结论是时间可以作为一个参考,某些情况下是很重要的指标。

      以这个考量达梦,应该是可以相信的。

      此外,华为自研的时间也比较长,大概有10来年,另外基于其特殊的基因,还是比较可信的。 不过在官网上,华为自己说“基于20余年战略投入、软硬全栈协同所研发,核心代码100%自研,是企业核心业务数字化转型的坚实数据底座,给世界一个最优选择

  •    所基于的开源代码

      凡是基于mysql,pg的数据库基本上自研的成分大概介于0.5%~60%左右。

      国内厂商,自研的成分大概就是以下几种情况。

      (1) 0.5%左右的主要就是换个标题和门面之类的。这个估计占据了一部分

        (2)   修改几个工具的,此类自研占比大概最多10%左右。它们基本不动核心,以便能够快速根据开源更新核心代码,更上技术前言。

        (3)   花了一点心思的。例如创造了几个无关紧要的名词概念、添加一些无关紧要函数的,或者施展一些障眼法。

        (4)   真花了一番心思,但也仅仅限于在分布式、高可靠、维护性方面推出一些功能

        (5)   花费大力气的,大部分绝大部分都是自己写,或者是抄写(用另外一个语言翻译下之类的)。走上这条路之后,基本就不可以回头,因为我们都知道回头的代价是多大

    

      据说少数也有80~90%,例如tidb,gausedb,doris等。

      (1)tidb

              tidb因为以htap为主,所以对mysql得依赖主要在于语法和单实例的核心上,自创的应该居多。我们都知道数据库要支持大存储大并发并不容易,必须要在分布架构、底层存储、网络通讯之间花费一番功夫。

              所以tidb的自研成分应该还是有一些的。

              但是鉴于mysql自己也有分布式版本,所以不好说借鉴了多少。

      (2)gausedb

              这个听华为自己说是改用其他语言重写了。

      (3)doris、tidb等

              doris类似tidb,都是基于mysql开发,不过前者仅仅重在o而已。从个人经验猜测,应该改得不会有那么多,毕竟它子需要考虑o而不考虑t。修改的时候应该兼有阉割和创新。

  •    新功能

      这个方面,关系数据库基本没有什么大亮点,所以主要是no-sql,new-sql会有些亮点。

      当然关系数据库方面也不是完全没有亮点(注意以下这些亮点个人没有证实过,仅仅是厂商官网介绍摘取的):

     

      国产数据库有个很重要的工作要做:适配国产硬件(主要是cpu)和国产操作系统(各种基于linux的操作系统,例如麒麟,UOS;鸿蒙)

  •    公司的构成和实力

      华为、百度、阿里、腾讯等自然是第一梯队;达梦、人大、南大等大体是第二之类,其他等而下之。

      从综合实力看,华为的实力应该最为强劲,因为华为最有钱有人,还有一点干实事的精神。从长远看,想干实事,能干实事这个反而是极其重要的。

    

      以下是我个人目前认为自研比率较高的国产数据库:

  1. 达梦
  2. 华为gause
  3. tidb

      至于大厂门基于mysql,pg研发的大体也还行,但多是在分布式和高可靠上下了一些功夫,加法居多,对最核心的没有什么改动(可能也不够准确,毕竟我没有源码).。

      国产化要不要从新开始研发?我和大部分场上的想法一样:没有那个必要。 只要真心博采众长,努力向上就可以。

1.4如何发展数据库

      天时地利人和缺一不可,现在国产数据库的机会来了,目前大家天时地利差不多,毕竟国产化是不可逆的趋势。 关键看人和。

  1. 凡是挖社会主义墙角的,不要信它
  2. 凡没有什么资金和人力的,不要信它
  3. 凡是吹牛的不要信它
  4. 凡是不开源的,卖东西都要遮遮掩掩的,不要信它

       按照以往的经验,除了企业自身要努力,一个很关键的是要构建足够好的社区,甚至是开源。

       如果企业能够主动构建社区,主动和消费者亲近,而不是遮遮掩掩,那么还是有希望的。

       如果一个企业不愿意推出开源版本(社区版本),那么也不容易获得更多小厂商或者程序员的喜爱。没有程序员的喜爱,那么推广也不容易。当然如果认为走上层路线行得通,据不用考虑这个。

       比如我们要体会一个数据库软件,但是它只有试用版本,而且试用期限大概是3个月份到半年、也有一年的,但是到期后要续命就麻烦了,那么作为工程师自然不是那么乐意。

       工程师会想:如果不是因为国产化,我凭什么要花费时间去研究这些,还那么麻烦,还不太好用。

      

      所以,按照个思路,那么一定是大企业胜出,因为它有足够的业务和资金来开源项目,并通过开源占领社区和市场。

      当然,在中国,什么情况都有可能。只是按照常理,理应如此。windows、office、oracle、mysql、spring、安卓占领天下不都是这个套路吗?

      有钱的机构自然愿意购买企业版,而没钱的程序员和小企业自然愿意使用免费的。所以企业如果不能以其他方式占领市场,那么就应该走这一条路:开源+商用,这也是世界范围内的实践。               

      国内的市场比较大,国产数据库主要在几个地方下功夫:

  1.  党政军核心机构   -- 赚钱的大头。还可以细分机密等级
  2. 一般事业单位   -- 赚钱大头
  3. 国企央企   -- 赚钱大头
  4. 民营   -- 不好赚钱
  5. 个人  -基本不要想,老百姓就想白嫖

       数据库企业不能光想着拉拢要员或者地方诸侯,赚得了一时,赚不了一世。还是需要通过开源环境来检验和完善自身的产品。

       政府机构或者要员如果有一点理想或者不想惹麻烦,毕竟还是会趋向于选择比较成熟的产品,大厂的产品。

       有心为国产数据库贡献的小企业,还是早点卖身给大企业。至于浑水摸鱼的,迟早有被唾弃的一天。

       国家和企业需要努力推进标准的制定,这样能规范发展,保护用户利益,对外也更有战力。

     

1.5看好谁?

     按照前文的标准,那么以下厂商及其产品还是比较有希望的:达梦、高斯

     现在数据库的潮流,大体是这样:能够涉及的数据库种类都要插一脚。 所以没有足够的实例,还真不容易在惨烈的竞争中活下来。

     达梦

  • 达梦数据库管理系统DM8(单机+兼容多种操作系统+国产芯片)
  • 达梦数据共享集群DMDSC(集群+兼容多种操作系统+国产芯片),类似oracle rac的国内版本,是共享存储架构
  • 达梦数据主备集群DmDataWatch,没有仔细看,不太清楚和DMDSC有什么大区别
  • 达梦分布式数据库DMDPC(集群+兼容多种操作系统+国产芯片),也是集群,不过不共享存储,有点类似hadoop,doris那样的架构
  • 云数据库-没有具体看,不过应该也就是上三种的混合
  • 图数据库
  • 新云缓存数据库DMCDM

      达梦企图能够满足各种业务场景,从rdbms到OLTP,HTAP等。

     华为gauss

      打字累了,直接上图。

      

    华为GAUSS更多是一个企业品牌,不特指一种数据库,不过我们主要看看云数据库GaussDB。


二、为什么用国产

  •      因为我们是大国,要立足,必须自主,不能当冤大头
  •      因为很可能什么时候就被封锁了,要防患于未然

      我个人还是坚决拥护的,但也希望国内厂商有骨气,干点实事。

      如果可能,开发语言、编译器、ide这些我们都应该有自有的,毕竟这些东西在封锁的情况下,一样存在巨大风险。

      没有这些东西编译器,ide,难道我们还要用手工作坊的方式编程吗?

三、企业和工程师应该怎么办

     不同it企业的工程师、不同年龄段的工程师所面临的情况不一样。

3.1企业的选择

  1. 如果您的企业Toc为主,那么不需要考虑那么多,例如游戏企业当然考虑上开源的,   但依然还是需要强烈关注
  2. 如果企业tob而为主,务必强烈关注
  3. 如果主要是政府客户,一定要关注

       所以,从企业的角度出发,必定要开始招聘或者培养对国产数据库熟悉的员工。

       如果哪一天硬件都是国产的,那么开源的可能就无法在国产上运行了,那么怎么办?

3.2工程师的选择

       从长远看,工程师也应该学习国产数据库。当然我们应该学习大厂的数据库,小厂的就基本不怎么需要考虑,因为不划算,可能用了几次就不会有复用的场景。

四、个人体会

      由于公司的缘故,我已经接触了以下几个国产的厂商:

  1.     瀚高-基于pg的
  2.     海量-基于pg的,基本是华为阵营的
  3.     达梦

        对于前二者没有太多可以评价的,因为我目前仅仅在开发环境做过体验。

        瀚高有个开源的ivory,没用过,不评价。态度是好的,就不知道搞得怎么样。

        海量没有什么可说的,我认为是依附于华为的,大体是一个发行商。

        达梦的话,维护方面还是比较给力,不过达梦目前没有开源的。

        但毫无疑问达梦是三者中最好的。

        我们现在的几个项目用的都是达梦的数据库DM8,大体也没有什么大的毛病,大概是因为还没有上压力。

        达梦的文档和社区、维护都不错,但目前有一些小缺陷,就是开发周边的工程师还是需要再努力一些。

        它那个客户端工具和迁移工具有花费了心思,不过产品经理应该是没有尽力,毕竟这些工具都是没有什么技术含量的东西,也没有做得很好。不过另外一个方面也可以看出这些工具是自己写的

而不是基于某些开源工具修改的,要是再花费一些心思,就不错了。

        达梦在生态方面需要继续花费心思,例如java开发常见的技术框架应该考虑提供适配器或者插件,避免工程师的麻烦。当然语言也不是只有java,java仅仅是几十种语言种一种。

        为什么说开发数据库是投入巨大的生产活动,光适配这些开发语言就要耗费许多人力物力。

        以java为例,需要开发:

    •   jdbc
    •   开发或者适配mybatis方言
    •   开发或者适配pagehelper方言
    •   开发或者适配部分mq
    •   适配某些常见的etl工具
       

        其他常见的语言例如c,c++,rust,python,c#,go

        所以构建生态是要花费巨资的,这就是为什么很多国产数据库采取拿来主义,驱动直接兼容mysql,pg,因为那样兼容生态就能够剩下很多很多钱。

        国产数据库还要走很多路,现在天时地利已经具备了,就看从业者会不会创造人和了。不要把心思都用在人情世故上,眼光长远一些。