数据库的前世今生

作为一个IT相关的从业人士,去年美国政府对华为的封杀事件,限制对华为手机芯片的出口,导致华为不得不剥离荣耀业务,虽然说华为是做通信起家的,但是手机行业还是为其带来了不少的利润,从情感上来说,我还是非常痛恨老美这种做法的。典型的小人做派。但从技术角度上来看,对于老美的科技制霸。我们目前确实没什么好的办法。

中国的互联网经济是非常繁荣的,尤其是这10多年来,中国经济的高速发展,互联网行业的高速发展,也实实在在诞生了不少top级别的互联网企业。也就是说在国内,对于上层服务应用软件的开发和使用我们是做得相当成功的,但是必须承认一个事实,上层应用,只是空中楼阁,如果没有底层的支持,极其容易被人限制。而在底层方面,美国无疑是最发达的。这里底层主要泛指两类,一种是硬件,包括芯片,存储,显卡,显示面板等,另外一种就是基础软件,包括操作系统,数据库系统,中间件等。在全球十大IT企业榜单中,微软和甲骨文位列前三,大名鼎鼎的windows系统就出自微软,而同样有名的oracle数据库就出自甲骨文。

何为数据库

数据库技术是20世纪60年代开始兴起的一门信息管理自动化的新兴学科,是计算机科学中的一个重要分支,随着计算机应用的不断发展,数据的爆炸式增长,数据处理也越来越占主导地位,而数据库技术的应用也变得愈加广泛。从概念上来说,数据库是指以一定的方式存储到一起,能为多个用户共享,具有更可能小的冗余,与应用程序彼此独立的数据集合。从功能上来说,就是数据管理软件。

数据库发展史

数据库从理论概念诞生到现在,发展时间也已经超过大半个世纪,其历史也经历了三个阶段,人工管理,文件系统,数据库系统。

人工管理阶段 人工管理阶段受限于当时的硬件,那个时期的计算机内存空间少,计算速度低,外部存储只有磁带,卡片和纸带,没有磁盘这样能快速存取的设备,加之没有计算机操作系统,数据库管理软件也不具备,数据处理只能以批处理的方式进行。其主要有以下特点:

数据不保存:内外存储有限,数据量较少,仅应用于科学计算。

人工管理:没有相应的软件系统负责数据的管理工作,应用程序中涉及的数据需要由程序员自己管理,包括数据逻辑结构的代码,数据物理结构的代码。数据存储结构的代码,数据存取和输入的代码。

不能共享:数据和应用程序是严格绑定的,一组数据只能对应一组程序,有大量的冗余数据存在。

不具备独立性:由于数据的相应结构(逻辑,物理)都是在应用程序中定义,如果需要改变数据的结构时,就要对应用程序作相应的更改,也就是说,数据和应用程序之间不具备独立性,耦合性极高,在使用层面上来看,也很不方便。

文件系统阶段 文件系统阶段是指从20世纪50年代后期到60年代中期,这个时期的计算机应用范围已经不在局限于科学计算,还被大量应用于信息管理,计算机硬件也有了进一步的发展,出现了磁盘,磁鼓等能直接存取的外存储设备。在软件层面上,高级语言和操作系统也已经有了完善的产品。操作系统中也有专门负责管理数据的文件系统功能,数据的处理方式也从批处理,衍生到联机实时处理。其主要有以下特点:

数据长期保存:计算机需要重复使用数据,把数据以文件的形式保存在磁盘等外存储器上面,为数据的长期保存和使用提供了保证

文件的多样化和结构化:磁盘的出现,顺序文件,索引文件,随机文件等文件组织形式也相应诞生,数据库的数据是以数据文件形式保存的,每一条数据(记录)由一些字段按照特定的结构组成的,每条数据的长度又是相等的,故数据文件又是记录的集合,文件系统实现了记录内部的结构性。

管理性:文件管理系统是应用程序和数据文件的专门接口,应用程序对数据的存取是由文件管理系统自动完成的,数据文件的逻辑结构和物理结构的转换是由文件系统自动完成的,不需要应用程序来参与,因此数据和应用程序具备了一定的独立性。

数据库系统阶段 数据库系统阶段是指从20世纪60年代后期到现在,正式进入数据库阶段有几个标志事件,1968年美国IBM推出层次模型的IMS(Information Management System)系统,1969年美国CODASYL组织颁布了DBTG报告,提出了网状模型 ,1970年美国IBM的E,F,Codd连续发表论文,提出关系模型,奠定了关系型数据库的理论基础。顺便提一句,数据库的底层理论建设都是在美国进行的。确实牛逼!数据库系统主要有以下特点:

基于数据模型:采用数据模型使数据结构化,数据结构化是文件系统和数据库系统最本质的区别,在文件系统中,相互独立的文件,内部是具备结构的,文件是多个等长的记录的集合,但是记录之间又是相互独立的,没有关联性。这种独立性对于单个应用来说,是有效的。具备局限性,不适用多个用户,多应用共享数据的需求。而数据库系统可以为用户提供一个抽象的数据视图。通过数据模型来实现抽象视图,保证了整体数据的结构化,数据模型其最大的特点在于描述数据时,不仅仅是描述自身,还要描述不同数据之间的联系。

独立性高:数据库系统提供了三级数据抽象(视图级抽象,概念级抽象,物理级抽象)能力和三种数据库模式(外模式,模式和内模式)。真正实现了数据的物理独立性和逻辑独立性,数据和程序的相互独立。使得可以把数据的定义和描述从应用程序中独立出去,而数据的存取统一由DBMS管理,用户和应用程序不用考虑存取路径细节,简化了应用程序对于数据访问能力。

冗余性和共享性好:数据库允许多个用户或多个应用程序同时访问数据库中的相同数据,数据不再面向单个应用,数据的共享,节省了存储空间,大大减少了数据冗余,避免了数据之间的不相容性和不一致性。

方便访问:用户可以使用查询语句进行访问(SQL)或者终端命令对数据库进行访问,也可以借助高级语句如JAVA,C等程序对数据库进行访问。

统一的数据管理:数据库系统的数据由DBMS统一管理,不同的用户或者应用对相同的数据有自己的使用理解,可以称之为视图,DBMS提供了定义,维护和操作视图的机制,使得多个用户可以为他们自己的应用定义,维护和使用自己的视图。在共享性方面,DBMS还提供了数据控制功能,即数据的安全性控制(也就是权限),数据的完整性控制,并发控制(MVCC机制),数据库恢复等

数据库关键人物

数据库经历了半个多世纪的发展,在此有必要膜拜下数据库方面的大神。正是他们的贡献,数据库才有如今的成果。

埃德加·考特(EdgarF Codd) ,计算机界公认的关系型数据库之父,其在IBM工作期间,发明了关系模型理论,并持续完善和发展关系型理论,关系型模型是现代数据库最重要的理论模型。也是他最大的成就。1983年以其对数据库的卓越贡献,获得了ACM的图灵奖(图灵奖被称为计算机界的诺贝尔)C.J.戴特(C J Date),他是最早认识到Codd在关系型模型上所做的开创性学者之一,也是关系型数据库技术领域中的非常著名的独立撰稿人和学者,为关系型模型的概念普及化,作出了相当大的贡献, 同时也参与了IBM公司的SQL/DS和DB2两大产品的技术规划和设计。其著作《数据库系统导论》也影响了很多人,数据库理论学习的经典之作。

吉姆·格雷(Jim Gray),数据库内核大神。他使关系型模型技术实用化,将理论落地成产品,其为数据库的成熟并顺利进入市场起到了关键性的作用。在IBM期间,参与和主持过IMS、System R(oracle数据库,db2数据库的原型)、DB2等项目的开发。除了System R作为研究原型,没有成为产品,其他几个都成为IBM在数据库市场上有影响力的产品。其最大的成就在于解决了一系列技术问题。随着数据库的规模愈来愈大,用户愈来愈多的情况下,在共享模式下,保证数据访问的完整性,安全性,和并发性,以及数据故障情况下,如何恢复。在当时看来,如果这些问题,没法解决。其对应的产品也就不能被用户接受,解决问题的方案可以归结为四个字—-事务处理。格雷在事务处理方面取得了突出的贡献,使他成为了该技术领域公认的权威,他也成为了1999年的图灵奖得主。

Michael Stonebraker,是Ingres的创始人,著名的数据库学者,其于1992年提出对象关系型模型,并主导了postgres项目,并将postgres放在了BSD版权保护,目前国内不少的商业数据库,都是基于postgres,学院派数据库的代表人物。

以上人物只是列举了一些在数据库发展史上的关键性人物,其他的如:Oracle创始人Larry Ellison,创建了Oracle公司。Bob Miner, 引领整个时代的DBA前辈,Oracle的技术先驱,Monty,编程天才,Mysql 之父,maiar db之父,后面由于mysql被oracle收购,又重新基于mysql的另一个分支开发了maiar db,并开源。

数据库现状

在传统关系型数据库层面,Oracle、SqlServer、DB2等作为商业数据库常年占据国内高低端市场,Mysql和postgres作为开源数据库的代表,前者号称最流行的开源数据库,在国内大部分公司都有使用,社区相当发达,09年Oracle并购了Sun公司,Mysql也归Oracle所有,Mysql也有随时闭源的风险。后者号称最先进的数据库,在国内使用率占比不高,但是功能性相对Mysql来说,更加强大。开源版本更新速度很快,最近一两年,在国内有流行起来的趋势。

传统数据库从侠义上来说就是关系型数据库,但是随着互联网的高速发展,海量数据的诞生,传统的关系型数据库在应对大规模,超大流量的时候就显得力不从心。借此,nosql数据库,newsql数据库就此登场。

no sql 全称 “not only sql”,所有非关系型的数据库都统称为no sql数据库,no sql数据库主要有四种类型,文档数据库(MongoDb为代表),键值数据库(Redis为代表),宽列存储(Hbase为代表)和图形数据库(Neo4J为代表)。no sql 抛弃了传统数据强事务保证和关系模型,重点放在高可用,可扩展性和高性能上。但是由于不支持sql语句,兼容性是个大问题。

new sql 数据库,提供了与no sql相同的扩展性,但仍属于关系型模型,还保留sql作为查询语言,保证了ACID事务性。代表数据库有Spanner,CockroachDB,限于篇幅关系后面会单独出文章来讲解nosql和newsql的特点。

结语

这个时代可以称之为”数据”时代,无论是传统企业,还是互联网企业,数据库都是核心构成,其重要性不言而喻。从最初的人工管理,文件管理,到后面的数据库系统,以及新兴的nosql,newsql数据库,都伴随着时代的发展在更替前进。作为一个数据库相关的从业者,也是很有感触,希望数据库行业能发展得越来越来的同时,也能带动我们国产数据库行业的发展吧!

来源:网络,作者:DBA成长日记(百家号)