一、数据库是信息系统的核心
获取与分析信息,是人类推动社会进步的关键过程。如何持续提高信息处理的能力,是人类社会的持续性命题。人类先后利用骨制品、绳结、纸张、算盘等工具,提高信息处理效率。
在计算机发明之后,信息可经过其电子化编码后转化为数据。人类开始探索利用计算机算力优势,实现对数据的高效存储与计算,从而大幅提升信息处理效率。人类首先尝试开发出各类特定计算机应用程序完成相关工作,但由于各类特定应用程序复用性差,人类逐渐围绕数据存储和计算功能、抽象出满足组织信息化需求、逻辑关联的数据库。
数据库是支持一个或多个应用领域,按概念结构组织的数据集合,其概念结构描述这些数据的特征及其对应实体间的联系[1]。数据库中的数据按一定的数据模型组织、描述和存储,具有较小冗余度、较高数据独立性和易扩展性,并可为各种用户共享[2]。数据库由于综合成本低、处理能力高,扮演各类信息系统的核心角色。
首款企业级数据库产品诞生于上世纪 60 年代,六十余年发展过程中,数据库共经历前关系型、关系型和后关系型三大阶段。前关系型阶段数据库的数据模型主要基于网状模型和层次模型,代表产品为 IDS 和 IMS,该类产品在当时较好地解决了数据集中存储和共享的问题,但在数据抽象程度和独立性上存在明显不足。
关系型阶段以 IBM 公司研究员 E.F.Codd 提出关系模型概念,论述范式理论作为开启标志,期间诞生了一批以 DB2、Sybase、Oracle、SQL Server、MySQL、PostgreSQL 等为代表的广泛应用的关系型数据库,该阶段技术脉络逐步清晰、市场格局趋于稳定。
谷歌的三篇论文[3]开启后关系型数据库阶段,该阶段由于数据规模爆炸增长、数据类型不断丰富、数据应用不断深化,技术路线呈现多样化发展。随着各行业数字化转型不断深入,5G、云计算等新兴技术快速发展,传统数据库的应用系统纷纷优化升级。全球市场格局剧烈变革,我国数据库产业进入重大发展机遇期。
图 1 数据库发展历程重要节点
来源:中国信息通信研究院、虚谷伟业
二、数据库关键技术及发展趋势
数据库管理系统作为能够使用户定义、创建、维护和控制访问数据库的软件系统[4],其整体架构与技术路线不断深化发展,如今呈现集中式与分布式并存,数据模型不断拓展等技术现状。
(一)数据库管理系统典型架构
数据库管理系统由于不同产品实现细节不完全相同,此处仅对部分主流数据库产品做进一步抽象处理得出上述架构。数据库大致可以由内核组件集与外部组件集共同组成,其中外部组件集以数据库配套的独立支撑软件为主,例如数据库驱动。内核组件集则一般可以分为管理组件、网络组件、计算组件、存储组件四大模块。
图 2 数据库管理系统各模块架构图
来源:中国信息通信研究院
存储组件是负责数据持久化存储的组件,对数据库的日志、索引、堆数据等内容进行管理。
在新一代的存算分离体系下,数据库堆数据的存储可能是由外部的分布式存储系统承担;计算组件又可以称为协调组件、服务组件,负责响应数据库访问请求,并将 SQL 语言解析成为数据库对应的内部任务。计算组件在分布式、集群等架构下也承接大部分的计算任务,例如排序、联接等;管理组件用于对数据库全生命状态的管理,例如心跳管理、集群管理等,以及各类中心化任务承接,如死锁仲裁、存储映射管理、元数据管理、事务号管理等;网络组件管理整个数据库管理系统的网络通讯的组件。数据库的网络通讯有内部和外部之分。
内部一般指在集群环境或者分布式环境下的各节点之间的高速数据交换。外部一般指的是各个数据库通过对外访问协议与存在于客户端的驱动进行互联的网络交换;驱动组件是支撑数据库能正常提供服务的配套独立组件,数据库管理系统基于其通用特性,往往可以对不同语言开发的软件提供数据服务。但是由于数据库本身只对外提供网络通讯协议,对协议的封装则由客户端侧的不同驱动组件完成。通常有支持 JAVA 语言的 JDBC 接口、支持 C 语言的 ODBC 接口和 C-API 接口等。
(二)数据库技术发展历程
从 20 世纪 60 年代至今,数据库的发展历程大致分为以下三个阶段:
1. 前关系型阶段 (1960-1970):网状层次数据库初尝探索
图 3 网状模型与层次模型示意图
来源:中国信息通信研究院
1963 年,通用电气公司的 Charles Bachman 等人开发出世界上第一个数据库管理系统(以下简称 DBMS)也是第一个网状 DBMS——集成数据存储(Integrated Data Store,IDS)。网状DBMS的诞生对当时的信息系统产生了广泛而深远的影响,解决了层次结构无法建模更复杂的数据关系的建模问题[5]。
同时期为解决“阿波罗登月”计划处理庞大数据量的需求,北美航空公司(NAA)开发出 GUAM(Generalized Update Access Method)软件。其设计思想是将多个小组件构成较大组件,最终组成完整产品。这是一种倒置树的结构,也被称之为层次结构[6]。随后 IBM 加入 NAA,将 GUAM 发展成为 IMS(Information Management System)系统并发布于 1968 年,成为最早商品化的层次 DBMS。
2. 关系型阶段 (1970-2008):关系型数据库大规模应用
图 4 关系模型示意图
来源:中国信息通信研究院
第一阶段的 DBMS 解决了数据的独立存储、统一管理和统一访问的问题,实现了数据和程序的分离,但缺少被广泛接受的理论基础,同时也不方便使用,即便是对记录进行简单访问,依然需要编写复杂程序,所以数据库仍需完善理论从而规模化应用落地。
第二阶段开启的标志性事件为 1970 年,IBM 实验室的 Edgar Frank Codd 发表了一篇题为《大型共享数据库数据的关系模型》[7]论文,提出基于集合论和谓词逻辑的关系模型,为关系型数据库技术奠定了理论基础。
这篇论文弥补了之前方法的不足,并促使 IBM 的 San José实验室于 1973 年启动验证 RDBMS 的原型项目 System R。1972 年,持久化数据结构 B+树的存储模型被发表。1973 年,Charles William Bachman 获得数据库界的第一个图灵奖。
1974 年,使用 BSD 许可证的 Ingres 原型诞生,为后续大量基于其源码开发的 PostgreSQL、Sybase、Informix 和 Tandem 等著名产品打下坚实基础。同年,IBM 完成了第一版本的关系型数据库 System R,该项目想旨在通过实现数据结构和操作来证明关系模型的实用性 ,这对后来关系型数据库发展产生重大影响,该项目促进了结构化查询语言——SQL的问世以及之后各类商品化关系型DBMS产品的诞生。从关系模型理论面世至今已经诞生几百个面向大型机和PC环境的关系型DBMS。
1977 年 11 月,中国计算机学会在黄山召开第一次数据库年会,成为我国数据库理论研究的起源。同年,美国的 Larry Ellison、Bob Miner 和 Ed Oates 在硅谷共同创办了一家名为软件开发实验室(Software Development Laboratories,SDL)的计算机公司,收到的第一个订单是来自美国中央情报局的 Project Oracle 项目。1978 年,SDL 发布 Oracle 第一个版本。1979 年,SDL 更名为关系软件有限公司(Relational Software,Inc.,RSI)并发布了商用第二版产品。
20 世纪 80 年代,关系型数据库进入商业化时代。1980 年,关系型数据库公司 RTI(现名 Actian)成立并销售 Ingres,同年,名称取自“Information”和“Unix”相结合的 Informix 公司成立。1981 年,E.F.Codd 在洛杉矶 ACM 年会上获得数据库界的第二个图灵奖。1983 年,RSI 的 Miner 和 Scott 员工使用 C 语言重写了 Oracle 并发布第三版本,使其具备良好的移植性,同年 IBM 发布 Database2 (DB2) for MVS,标志 DB2 正式诞生。1984 年,Sybase 公司成立。创始人之一 Bob Epstein 是 Ingres 大学版的主要设计人员。1985 年,Informix 发布第一款产品。
1984 至 1985 年,Oracle 公司依次发布第四和第五版本,完善了产品的稳定性,于 1986 年公开上市,同年,数据库标准化迎来历史性进展,美国国家标准局(ANSI)数据库委员会批准 SQL 作为数据库语言的美国标准并公布标准 SQL 文本。
1987 年,国际标准化组织(ISO)也做出了同样决定,对 SQL 进行标准化规范并不断更新,使得 SQL 成为关系型数据库的主流语言。此后相当长的一段时间内,不论是微机、小型机还是大型机,不论是哪种数据库系统,都采用 SQL 作为数据存取语言,各个公司纷纷推出各自支持 SQL 的软件或接口[8]。同年 5 月,Sybase 发布首款产品 Sybase SQLServer1.0,也是首个基于 Client/Server 数据库体系结构思想的实现。1988 年,国内第一个数据库管理系统原型 CRDS 由华中理工大学(现为华中科技大学)的冯裕才团队研发成功。
20 世纪 90 年代,面向对象的数据库出现,但是没有商业应用成功案例。1991 年,微软发布 Access。1994 年,基于 Ingres 的 Postgres95 诞生,于 1996 年被命名为 PostgreSQL。1995 年,MySQL 在瑞典发行,开发出第一个面向互联网的数据库应用。1998 年,数据库界的第三个图灵奖授予了 James Gray,以表彰他在事务处理技术的开拓性成果。至此,关系型数据库理论得到了充分的完善、扩展和应用,在后关系型阶段,关系型数据库仍在发展演进,从未中止。
3. 后关系型阶段 (2008-至今):模型拓展与架构解耦并存
进入 21 世纪,随着信息技术及互联网不断进步,数据量呈现爆发式增长,各行业领域对数据库技术提出了更多需求,数据模型不断丰富、技术架构逐渐解耦,一部分数据库走向分布式、多模处理、存算分离的方向演进。谷歌在 2003 至 2004 年公布了关于 GFS、MapReduce 和 BigTable 三篇技术论文,为分布式数据库奠定基础,Mike Stonebraker 提出“one size does not fit all”并依照此理念推出多种数据模型、存储介质的数据库,数据库发展正式进入第三阶段。
图 5 部分非关系模型示意图
来源:中国信息通信研究院
数据模型不断拓展。步入互联网 Web 2.0 和移动互联网时代,许多互联网应用表现出高并发读写、海量数据处理、数据结构不统一等特点,关系型数据库并不能很好地支持这些场景。另一方面,非关系型数据库有着高并发读写、数据高可用性、海量数据存储和实时分析等特点,能较好地支持这些应用的需求。因此,一些非关系型数据库也开始兴起。为了解决大规模数据集合和多种数据类型带来的挑战,NoSQL 数据库应运而生,其访问速度快,适宜处理互联网时代容量大、多样性高、流动性强的数据。
图 6 集中式与分布式数据库架构示意图
来源:中国信息通信研究院
分布式架构逐渐成熟。由于传统基于集中式数据库在应对海量数据及复杂分析处理时,存在数据库的横向扩展能力受限、数据存储和计算能力受限、不能满足业务瞬时高峰的性能等根本性的架构问题。利用分布式计算和内存计算等新技术设计的分布式数据库能够解决上述遇到的性能不足等问题。
分布式数据库的数据分散在网络上多个互联的节点上,数据量、写入读取的负载均衡分散到多个单机中,集群中某个节点故障整个集群仍然能继续工作,数据通过分片、复制、分区等方式实现分布存储。每个数据节点的数据会存在一个或者多个副本,提供数据冗余。当某个数据节点出现故障时,可以从其副本节点获取数据,避免数据的丢失,进而提升了整个分布式集群的可靠性。
为保障分布式事务在跨节点处理时事务的原子性和一致性,一般使用分布式协议处理。常用两阶段提交、三阶段提交协议保障事务的原子性;使用 Paxos、Raft 等协议同步数据库的事务日志从而保障事务的一致性。分布式数据库技术架构大致可分为如下三类:
以 Apache Cassandra、Apache HBase 为代表的分布式存储为基础的数据库,底层存储基于分布式文件系统具备了分片或者分区存储的能力,扩大了普通存储设备的存储系统的上限。
以 Greenplum 为代表的 Shared-Nothing 架构,通过多节点协同工作扩大分布式存储能力的同时,相应的还通过 MPP 架构可以支持多级并行计算处理,增强查询和分析能力。
以 Kylin 为代表的多维数据库产品,以及以 OpenTSDB 为代表的时序数据库,使用其它分布式数据库作为后台存储,通过构建相应的数据模型和索引技术,扩展成为新的数据库。
其他还包括分库分表等中间件解决方案,严格来说不属数据库系统,但是提供类分布式数据库解决方案,适用于合适的业务场景对分布式数据库的需求。
免责申明:
本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!