提到数据库,可能很多人会很陌生。
但据库其实已经渗入我们生活的方方面面,像网上购物、扫码点餐、抢红包等等应用背后都离不开数据库的支持。
可以说数据库是支撑各类应用软件运行的基础,因此数据库也被誉为基础软件上的皇冠明珠,与操作系统并驾齐驱。
今天我们就一起来聊聊数据库。
▉ 什么是数据库?
下面我们来看下数据库的官方定义:数据库是"按照数据结构来组织、存储和管理数据的仓库",是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
看到这个定义,可能很多人依然云里雾里。其实简单来说,数据库就是是存放数据的仓库。它的存储空间很大,可以存放上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。
我们来打个比方:我们每个人家里都会有衣柜,衣柜是用来存放衣服的地方。那么数据库就是存放数据的地方。
数据库也像衣柜一样,只不过帮我们存储的是数据。我们也可以通过数据库找到我们存储在里面的东西。例如你每天使用余额宝查看自己的账户收益,就是从数据库读取数据后给你的。
理解了数据库的概念后,我们来深入的了解下数据的作用。
▉ 为什么我们需要数据库?
可能很多人会问:我的数据就存放在自己电脑的Excel表里不就可以了,为什么还要搞个数据库呢?
这是因为数据库比excel有更多的优势。比如数据库可以存放大量的数据,允许很多人同时使用里面的数据。下面我们来看下数据库的三个重要价值:
首先,方便用户存储、访问数据。数据库可以存储大量的数据信息,方便用户进行有效的访问。数据库还可以对数据进行分类保存,并且能够提供快速的查询。例如:我们平时使用谷歌搜索内容时,谷歌也是基于数据库和数据分类技术来达到快速搜索的目的。
第二,帮助我们安全的保存数据。数据库可以满足应用的共享和安全方面的要求,把数据放在数据库中在很多情况下也是出于安全的考虑。例如:如果一个公司把员工所有资料都放在电脑上,资料的保密性就不是很好了。如果把员工的资料存到数据库中,就可以设置一些权限,从而保证数据的安全性。
3、利用数据库可以进行数据分析,提升数据价值。例如:超市中把物品销售信息保存在数据库中,每个月销售情况的排名决定了下半月的进货数量。数据库查询的结果实际上产生了新的数据信息。
了解了数据库的价值,下面我们来看下数据库的发展史。
▉ 数据库的发展史
1946年,有个叫冯·诺依曼的人发明了计算机,最开始的计算机的主要用途是将程序指令存储器和数据存储器合并在一起,然后进行相应的运算。
这时候的数据管理非常简单。主要是通过大量的分类、比较和表格绘制的机器运行数百万穿孔卡片来进行数据的处理。
然而,随着计算机的诞生和成熟,数据管理技术也迅速发展。传统的文件系统难以应对数据增长的挑战,也无法满足多用户共享数据和快速检索数据的需求。
在这样的背景下,20世纪60年代,数据库应运而生。
网状数据库和层次数据库时代
1964年,世界上第一个数据库系统---IDS(Integrated Data Storage,集成数据存储)诞生于通用电气公司。IDS是网状数据库,奠定了数据库发展的基础,在当时得到了广泛的应用。
网状数据库是数据库历史上的第一代产品,它成功地将数据从应用程序中独立出来并进行集中管理。网状数据库基于网状数据模型建立数据之间的联系,能反映现实世界中信息的关联,是许多空间对象的自然表达形式。
5 年后,美国数据库系统语言协会(Conference on Data SystemsLanguages,CODASYL)下属的数据库任务组(Database Task Group,DBTG)发布了一份报告,阐述了网状数据库系统的许多概念、方法和技术,成了网状数据库的代表。
在20世纪70年代与80年代初,网状数据库系统十分流行,在数据库系统产品中占据主导地位。例如,配备在富士通公司M 系列机上的AIM(Advanced Information Manager)系统和配备在UNIVAC(UNIVersal Automatic Computer)上的DMS1100 系统都是网状数据库系统。
紧随网状数据库后出现的是层次数据库,其数据模型是层次数据模型,即使用树结构来描述实体及其之间关系的数据模型。在这种结构中,每一个记录类型都用节点表示,记录类型之间的联系则用节点之间的有向线段来表示。每一个子节点只能有一个父节点,但是每一个父节点可以有多个子节点。这种结构决定了采用层次数据模型作为数据组织方式的层次数据库系统只能处理一对多的实体联系。
1968年,世界上第一个层次数据库系统---IMS(Information Management System,信息管理系统)诞生于IBM 公司,这也是世界上第一个大型商用的数据库系统。
如上所述,网状数据库系统和层次数据库系统在数据库发展的早期比较流行。网状数据库模型对于层次和非层次结构的事物都能比较自然地模拟,相比层次数据库应用更广泛,在当时占据着主要地位。
1973年,Charles W.Bachman获得图灵奖,以表彰他在数据库领域,尤其是在网状数据库管理系统方面的杰出贡献。但是,网状数据库也存在一些问题:首先,用户在复杂的网状结构中进行查询和定位操作比较困难;其次,网状数据的操作命令具有过程式的性质;最后,网状数据库对于层次结构的表达并不直接。
Charles W.Bachman
关系数据库时代
虽然对于数据的集中存储、管理和共享的问题,网状数据库和层次数据库已经给出较好的解答,但是在数据独立性和抽象级别上仍有较大的欠缺。为了解决这些问题,关系数据库应运而生。
1970年,IBM 的研究员Edgar F.Codd发表了A Relational Model of Data forLarge Shared Data Banks 论文,提出了关系数据模型的概念,奠定了关系数据模型的理论基础,这是数据库发展史上具有划时代意义的里程碑。
Edgar F.Codd
随后,Edgar F.Codd又陆续发表了多篇文章,论述了范式理论,用数学理论奠定了关系数据库的基础,为关系数据库建立了一个数据模型---关系数据模型。
关系数据模型的概念非常简单,结构特别灵活,能满足所有布尔逻辑运算和集合运算规则形成的查询要求;可以搜索、比较和组合不同类型的数据;使用关系数据模型进行数据增加和删除操作非常方便,关系数据模型具有较高的数据独立性和更好的安全保密性。然而,当数据库比较大的时候,查找满足特定关系的数据比较耗时,同时也难以描述空间数据关系。
在关系数据模型的基础上,IBM 公司从1970年就开始了关系数据库项目SystemR的研究和开发。然而,由于IBM 已有层次数据库产品IMS,System R产品化进程十分缓慢,直到1980年才完成产品化,作为一个产品正式推向市场。后来,IBM 公司在System R的基础上发布了DB2数据库系统。IBM 公司研发进程缓慢,没能在产品上抢占先机。
1973年,加州大学伯克利分校的Michael Stonebraker和Eugene Wong利用IBM 公司已发布的信息,以及关系模型的理论,开始开发自己的关系数据库系统Ingres。1976年,霍尼韦尔公司(Honeywell)开发了世界上第一个商用关系数据库系统---Multics Relational Data Store。
1974年IBM 的Ray Boyce和Don Chamberlin将Edgar F.Codd论述的关系数据库的12条准则的数学定义以简单的关键字语法表现出来,里程碑式地提出了SQL(Structured Query Language,结构化查询语言)。
SQL是一种操作关系数据库的标准语言,它包括了对数据进行定义、操纵、查询和控制功能的类型分句。用户只需要在高层数据结构上进行数据处理,无须用户指定数据的存取方法,也不需要用户了解具体的数据存储方式,就可以使用SQL对不同关系数据库进行数据操作。SQL有着一体化、使用方式灵活、非过程化和简单易用的特点,几乎所有的关系RDBMS(Database Management System,数据库管理系统)产品都支持SQL,例如Oracle、DB2、Sybase、SQL Server、MS Access、MySQL、PostgreSQL等。
1978年,Larry Ellison在为美国中央情报局做一个数据项目的时候,敏锐地发现关系数据库的商机。几个月后,Oracle 1.0诞生了,它除了完成简单关系查询之外,不能做任何事情。但是经过短短十几年,Oracle公司的数据库产品不断发展成熟,成为了数据库行业的巨头。至此,关系数据模型的理论才通过SQL在商业数据库Oracle中使用。
虽然加州大学伯克利分校的Ingres项目结束于20世纪80年代早期,但在Ingres的基础上产生了很多商业数据库软件,包括Sybase、Microsoft SQL Server以及Informix等其他众多的数据库系统。在20世纪80年代中期,加州大学伯克利分校又启动了Ingres的后继项目Postgres,该项目产出了很有影响力的PostgreSQL数据库系统。Ingres作为比较早的数据库系统,对关系数据库的发展产生了重要影响,是数据库发展史上最有影响力的项目之一。
关系数据库系统以关系代数为坚实的理论基础,经过几十年的发展和实际应用,技术越来越成熟和完善,直到今天,关系数据库仍然在数据库领域占据着最重要的地位,应用范围非常广泛。由于Edgar F.Codd在关系数据库理论和实现方面的杰出贡献,他于1981年被授予图灵奖。为了表彰Michael Stonebraker在数据库系统原型和初步商业化方面的巨大贡献,2014 年Michael Stonebraker被授予图灵奖。
虽然关系数据库系统的技术很成熟,但随着市场和信息技术的发展,其局限性也逐渐暴露出来,即它能很好地处理所谓的"表格型数据",却无法处理当前出现的越来越多的复杂类型数据(如文本、图像、视频等)。
分布式数据库时代
在数据库发展早期阶段,使用单机数据库就能满足数据存储和管理的规模,但是随着互联网的不断普及,特别是移动互联网的兴起,数据规模爆炸式增长,单机数据库越来越难以满足用户需求。解决这种问题的一个直观方法就是增加机器的数量,把数据库同时部署在多台机器上,分布式数据库就这样应运而生了。
20世纪70年代中期分布式数据库的研究就已经开始了,这个时期也出现了一些分布式数据库系统。例如,1979 年,美国计算机公司(Computer Corporation of America,CCA)在DEC(Digital Equipment Corporation)计算机上实现了世界上第一个分布式数据库系统SDD-1。随后,在不到十年的时间内,分布式数据库的发展十分迅猛。例如,IBM 公司在System R的基础上研制了分布式数据库R* ,加州大学伯克利分校开发了分布式Ingres等。
1987年,C.J.Date提出了完全的、真正的分布式数据库系统应遵循的原则,该原则被作为分布式数据库系统的理想目标。20世纪90年代以来,分布式数据库系统进入商业化应用阶段,传统的关系数据库产品均发展成以计算机网络及多任务操作系统为核心的分布式数据库产品。
2005年左右,研究人员对分布式数据库的探索,推动了NoSQL数据库的发展,这些数据库解决的首要问题是单机上无法保存全部数据,其中以HBase、Cassandra、MongoDB为代表。2012-2013年,业界在谷歌(google)发表的Spanner和F1系统的论文中看到了关系模型和NoSQL的扩展性在一个大规模生产系统上融合的可能性,这些探索极大地推动了NewSQL数据库的发展。
进入大数据和移动互联时代后,因为数据的特性和应用场景的变化,注定着不论是传统的关系数据库,还是新型的NoSQL和NewSQL数据库都会向着分布式的方向发展,分布式数据库也成了数据库领域的主流方向之一。但是分布式数据库也存在一些问题。例如,众多节点之间通信会花费大量时间;数据的安全性和保密性在众多节点之间会受到威胁;在分布式系统复杂的存取结构中,原本在集中式系统中有效存取数据的技术可能不再适用;分布式的数据划分、负载均衡、分布式事务处理和分布式执行技术缺乏新的突破。
云数据库时代
云计算(Cloud Computing)的迅猛发展使得数据库部署和虚拟化在"云端"成为可能。云数据库即是数据库部署和虚拟化在云计算环境下,通过计算机网络提供数据管理服务的数据库。因为云数据库可以共享基础架构,极大地增强了数据库的存储能力,消除了人员、硬件、软件的重复配置。
云数据库将传统的数据库系统配置在"云上",有专门的云服务提供商进行这些"云上"数据库系统的管理和部署工作,用户只需要通过付费的方式就能获取数据库服务。不同于传统数据库,云数据库通过计算存储分离、存储在线扩容、计算弹性伸缩来提升数据库的可用性和可靠性。代表性的云数据库是亚马逊的Aurora,它首先提出了日志即是数据库的理念,减少了网络消耗,提升了系统的可用性。
云数据库也能分成关系数据库和非关系数据库。典型的基于关系数据模型的云数据库就有亚马逊的Aurora、微软的SQL Azure云数据库。常见的基于非关系数据模型的有亚马逊的DynamoDB,该数据库采用键值存储。
2019年6月,Gartner发布The Future of the Database Management System(DBMS)Market Is Cloud 报告,明确提出传统的部署数据库的方式已经过时,云是未来,所有组织,无论大小,都将越来越多地使用云数据库。但是,云数据库中存在的问题也不可忽略,云计算中最值得关注的是安全问题,云计算对数据安全带来了极大威胁,数据极易泄露,存在意外丢失的风险。
▉ 常见的数据库管理系统排名(DBMS)
目前互联网上常见的数据库管理软件有Oracle、MySQL、MS SQL Server、DB2、PostgreSQL、Access、Sybase、Informix这几种。以下是2024年1月7日DB-Engines Ranking 对各数据库受欢迎程度进行调查后的统计结果:(查看数据库最新排名:db-engines.com/en/ranking)
▉ 为什么要发展国产数据库?
数据库是企业的核心资产,其中存储了大量的敏感信息和重要数据。国外数据库产品存在被国外政府或商业机构窃取、篡改数据的潜在风险,这就需要国产数据库来确保数据的完整性和安全性。
当时九十年代,Oracle席卷中国,占据了中国很大的市场。说到Oracle历史,这里提到一个小事,那就是:
1997 年 1 月 27 日,埃里森乘专机飞临北京,冯星君通过关系安排国宾车队去接,国宾车队的车一直开到跑道上,一大队车闪着灯很威风。机舱门开了,但人总是不出来,等了 20 分钟,从飞机上跳下来一个穿防弹衣的黑人保镖,他对迎接的车队说:「所有的车门全部打开,我要检查有没有炸弹。」一边是美国来的大老板,一边是同样惹不起的国宾车队,这哥们太难受了,他忍了。
第二天,埃里森要到长城拍推广网络计算机的电视片,事前吩咐冯星君找了 20 个小学生参与拍摄。约好早上 8 点,直到 9 点,埃里森都不起床。当天零下 20 多度,大巴没有暖气。冯星君去求埃里森:「那些小孩要冻死了。」冯星君眼泪都快流出来了,埃里森才勉强答应启程。
去了没多久,埃里森让副手打回电话给冯星君说:「埃里森挺喜欢长城,玩得挺高兴,中午就不回来了,你取消下午 3 点跟XX(某位领导人)的会面吧。」这哥们差点晕过去。「下午的会面不是开玩笑的,如果我 2 点钟看不见埃里森,我辞职,我要走了,这个责任我担不起。」那边一听怕了,埃里森一行匆匆赶回人民大会堂,那个黑人保镖还要跟着进去,说要保护老板,吵闹得不可开交。
虽然是一件疯传的小事,但足可以看到Oracle在当时有多牛,而随着国产数据的发展。2019年,甲骨文干脆裁掉了北京研发中心的500名员工。甲骨文走到这一天也不奇怪,一方面是甲骨文在中国的业绩在走下坡路;另一方面是埃里森的傲慢和偏见,他之前说过一句很现实的话:"中国工程师绝不能超过美国工程师,因为中国是美国最大的竞争对手"。
小了,格局真的小了。
所以说,无论是芯片、操作系统的国产化发展史,还是数据库的国产化经历,都在提醒着我们,核心东西没有捷径,市场换技术在绝大多数时候都是一厢情愿,你能依靠的永远只有自己。
▉ 国产数据库的分类
由于国产数据库发展较晚,所以大多会仿照国外数据库来发展。经过一段时间的整理后,发现虽然国产数据库种类很多,但归根结底,都是参考了国外大厂数据库来开发的,因此,根据收集来的国产数据库,我们进行了归类总结,各位看官向下看:
可以看到基本上可以分为Oracle、MySQL、Postgresql、Informix等四个系列。
Oracle系
K-DB由浪潮和韩国第一大企业级软件提供商Tmax公司共同研发的企业级数据库系统,这个库和Oracle很像很像,要是不提醒你,在操作的时候可能你会觉得,这不就是Oracle么,具体Tmax是如何能够开发出这么牛掰的数据库,这不是咱们今天的话题,只要清楚,他和Oracle很像很像就行了,况且还和浪潮共同研发,国产之中跑不了了。
达梦MD达梦一直宣传自己很像Oracle,包括集群,DG,包括开发的SQL,运维的命令。这和K-DB有一拼的,他们到底是不是亲兄弟,我们也无从而知。稳定性有待测试,功能上和Oracle比较像。它自己都说就是为了去O的发展战略。
MySQL系(均分布式)
SequoiaDB 巨杉数据库,官网称已经有超过50家银行核心生产系统规模使用,100%兼容MySQL语法。从根源上来讲,MySQL数据库处理事务关键在于存储引擎,我们常用的是Innodb(MySQL 5默认存储引擎),归Oracle所有。而巨杉自研数据库,是将存储引擎换为巨杉自己的,因此也不难理解100%兼容MySQL语法了。
GoldenDB 中兴研发的数据库,基于MySQL开发,据了解中信银行核心使用的就是GoldenDB。
TDSQL 腾讯自研数据库,基于MySQL开发,分布式,主打云上
TIDB 由PingCAP研发,GO开发,兼容MySQL协议和生态,分布式。目前亿联银行以其为主。
OceanBase阿里出品,阿里内部据说目前已经用OB完全替代了Oracle,能够支撑起双十一真的是很厉害了。但具体能否应用到传统金融上,那还要去实践。
PolarDB阿里出品,到底和OB啥关系,有人说是内部竞争,但从介绍来看,PolarDB主打的还是云上,定位和腾讯的TDSQL差不多。
PostGreSQL系
GaussDB 华为出品的高斯数据库,已经在工行进行了大量的实践,将Teradata进行了充分的替换,恐怖吧,华为确实是干大事的企业。相信不久的将来也能像做手机一样,厚积薄发!
KingBaseES 人大金仓数据库,由中国人民大学及一批最早在国内开展数据库教学、研究与开发的专家基于PG研发的。
HighGo DB 关于瀚高的资料不多,从百度百科上找到瀚高是中国唯一一家涉及基础数据库系统软件开发研究的民营企业,是国内优秀软件企业、高新技术企业。
Informix系
Informix 老牌数据库了,为什么也纳入国产了呢?这是因为IBM将Informix源代码出售给了中国的南大通用。话又说回来,这不是买断,是授权!后期IBM再将Informix升级改造,南大通用要想使用,还得再拿票子。早期Informix被Oracle已经替换的差不多了,现在再替换会Informix系,还是挺难。
Gbase 南大通用基于Informix研发的国产数据库,又收了Informix源代码,可谓如虎添翼。就看中国用户买不买账吧!
▉ 国内数据库迎来井喷发展?
数据库系统的萌芽出现于20世纪60年代。当时计算机开始广泛地应用于数据管理,对数据的共享提出了越来越高的要求。传统的文件系统已经不能满足人们的需要。能够统一管理和共享数据的数据库管理系统(DBMS)应运而生。
随着关系模型有了完善的理论支撑后,以Oracle、DB2到SQL Server为代表的数据库开始在各大企业中应用,商业数据库迎来了第一波高速发展。
但关系数据库有一个比较大的问题就是贵,只有那些比较大的企业才能用得起数据库,对于一些中小企业来说,随着业务的增长,也急需要一款能用的数据库出现,于是MySQL、PostgreSQL 等数据库以开源、免费和简化版的形态推动了数据库历史上第二波更加广泛而影响深远的发展,形成了数据库发展的第二波浪潮。
2000 年左右,基础架构还没有反应过来,从应用层到中间件层开始解决集中式解决不了的问题,以 Cobar,MyCAT 为代表的中间件方案的分布式架构出现。一直到 2010 年左右,以 Google Spanner、 OceanBase 等为代表的原生分布式架构出现,陪伴互联网高速发展的十余年,产品逐渐打磨成熟并开始商业化。
随着互联网的发展,现代应用处理的数据量更大,也会经常面对脉冲业务的冲击,应用架构通过服务化架构和容器技术具备了更大的数据处理能力和弹性伸缩能力,从而间接要求数据库具备海量数据处理能力和弹性伸缩能力,同时业务的分布式和垂直拆分会要求数据库也是分布式的,但分布式有状态数据如何保证一致性,又如何应对大量数据库实例管理的复杂度,这在传统集中式数据库的架构上是极大的挑战。
所有这些新的问题表明,互联网时代的架构已经无法用传统的数据架构和思路来解决这些新问题了。如果还是治标不治本,通过外挂或者各种外部软件和数据库软件拼装组合的方式来应对这些复杂问题,只会让复杂度和风险变得更高。因此,要构建现代应用架构的摩天大厦必须彻底重构数据架构的地基。
近年来,国际局势复杂多变,国外持续加大对中国科技产业的制裁力度,先后将数百家中国高科技企业列入出口管制实体清单;俄乌冲突爆发后,众多头部 IT 厂商陆续停止对俄罗斯的产品供应。在不可控国际因素及国内数字经济转型需求的驱动下,我国IT 产业自主可控的紧迫性愈加凸显,为了解决核心技术"卡脖子"的问题,科技自立自强已是我国的一项国家战略,通信、计算机、军工和医疗器械行业将成为国产替代产业的重要领域。
如今,国产数据库已是百花齐放。
除了传统数据库厂商(人大金仓、达梦、神舟通用、南大通用等),也有大厂的"云数据库"(阿里云、腾讯云、华为云等),还有新兴数据库,比如PingCAP的通用数据库TiDB,涛思数据的时序数据库TDengine、欧若数网的图数据库Nebula Graph。此外还有巨杉、中兴、浪潮、易鲸捷等的数据库产品,都登上了国内外流行度榜单。
国产数据库的发展,将迎来属于自己的时代!
END