分布式关系数据库探索 - NewSQL 演化过程

2018-10-18 16:22:31 浏览数 (1)

导语

回味过去,展望未来,开始分布式数据库探索之旅,首先了解历史,本文大致梳理一下数据库发展过程,从1970年到2018年,数据库的发展过程,仅供参考,交流和学习,感谢您阅读!

概述

“数据(data)”一词来自拉丁文“datum”,意思是“给予某物”。表示从测量或研究中获得事实,数字或想法,可以是数字,单词或图像等。数据库是经过组织的数据集合,按需存储、处理和访问,数据库中的数据按数据模型组织储存在一起、以尽可能小的冗余度、较高的数据独立性和易扩展性,在一定范围内为用户共享。数据库管理系统(DBMS)是一组软件,用于定义,存储,操作和控制数据库中的数据。当数据规模大到一定程度时,会有哪些挑战? 往往一个问题解决了,不得不面对另一个新问题,NewSQL就是在这样挑战中一步一步演变过来,NewSQL是在线事务处理(OLTP)的下一代可扩展的关系数据库管理系统(RDBMS),支持关系数据模型,保持ACID,采用分布式架构,无共享存储,支持横向扩展,使用SQL作为接入和修改数据库状态,支持无锁并发控制,遵循三层模型:管理层,事务层和存储层。

信息处理推到计算机的发展,20世纪初由 Herman Hollerith 发明的穿孔卡记录美国人口普查数据,并使用机械系统处理卡片并将结果制作成表格,从前期平面文件系统到关系和对象关系系统,到今天的NewSQL 和 自动系统(Self-Driving),从20世纪60年代发展到现在,数据库管理系统(DBMS)大致演变过程如下。

1950年 - 1960年:(早期DBMS)

1960年以前,数据不在磁盘上存储,而是由程序员定义数据逻辑结构和物理结构,如存储结构,访问方法,I/O模式等,每个程序对应一个数据集,数据高度冗余,没有持久化; 没有数据库之前,数据维护在一个平面文件(flat file)中,磁带介质决定其处理过程,包括程序接口文件(逻辑文件)和数据文件(物理文件),一个文件对应一个或多个程序,存在各种访问方法,如,顺序的,索引的,随机的,使用第三代语言(如COBOL,BASIC)进行编程。扁平文件的限制:

  1. 分离和隔离:每个程序维护自己的数据集,一个程序的用户可能不知道其他程序的持有或阻塞。
  2. 复制:不同程序保存相同的数据,因此浪费空间和资源。
  3. 高维护成本,如确保数据一致性和控制访问。
  4. 粗粒度共享。
  5. 安全性差。

1960年-1970年:(层次&&网状模型)

  1. 20世纪60年代,阿波罗登月计划中出现DBMS,负责该计划的美国北美航空公司(NAA)开发出软件GUAM(Generalized Update Access Method), 提出多个较小构件组成大构件,直到组装成最终产品,发展成IMS(Information Management System),IMS属于层次数据模型,基于二叉树,父记录和子记录之间的一对多关系;高效的搜索功能;减少数据冗余;数据独立性,数据库安全性和完整性。缺点是实现复杂,难以管理和缺乏标准,不易处理多关系,且缺乏结构独立性,增加应用程序编程和使用的复杂性。
  2. 20世纪60年代中期,美国通用电气公司研发的IDS(Integrated Data Store),一种新型网状的DBMS,带节点和边的有向非循环图,包括3个数据库组件:网络模式; 每个用户的数据库子视图; 数据管理语言-低级别和过程语音,每条记录可以有多个父记录,缺点是:系统复杂,难以设计和维护; 缺乏结构独立性。1965年成立CODASYL, 1967年更名为DBTG,定义数据库环境的标准规范,涉及数据库创建和操作等, 1971年,CODASYL组织对其进行标准化。

1970年-1990年:(关系数据库)

  1. 1970年,关系模型(Relational model) 由特德·科德(E. F. CODD)在《A Relational Model of Data for Large Shared Data Banks》提出,其主要基于集合论和谓词逻辑。
  2. 1976年,由P.Chen提出的一种新的数据库模型ER模型(Entity-Relationship),Codd试图通过一个称为RM/T和RM/V2等关系模型扩展版本,并出现关系数据库管理系统(RDBMS),加利福尼亚州的IBM San Jose 研究实验室开发System R项目,通过实现数据结构和操作证明关系模型,并产生结构化查询语言SQL.
  3. 1979年,出现商品化的RDBMS, 如Oracle, DB2, Ingres等,
  4. 1985年,出现面向对象的DBMS(OODBMS),因不能证明将数十亿字节的数据转换成新格式后有什么成本优势,商业上没成功案例。
  5. 1987年,SQL由ISO 标准化,相继推出SQL:1989,SQL:1992,SQL:1999,SQL:2003,SQL:2008,SQL:2011等标准。

1990年-2000年:(商业数据库时代)

在关系型DBMS中结合面向对象产生新的应用领域,如数据仓库和OLAP,Web和Internet,文本和多媒体的兴趣,企业资源规划(ERP)和管理资源规划(MRP)系统。

  1. 1991年,Microsoft提供Access 数据库,作为个人DBMS逐渐取代所有其他产品。
  2. 1994年,两个UC Berkeley大学的研究生 Andrew Yu和Jolly Chen 增加SQL语言解释器来替代早先基于Ingres的QUEL系统,创建了Postgres95,在1996年 为反映数据库的新SQL查询语言,Postgres95变成PostgreSQL,第一次PostgreSQL发行版本6.0。
  3. 1995年,MySQL在瑞典启动,基于早期ISAM-base的mSQL系统,并产生了第一个面向Internet的数据库应用。
  4. 1997年,XML应用于数据库处理,解决长期存在的数据库问题,主要数据库厂商开始将XML集成到DBMS产品中。
  5. 1998年,Strozzi NoSQL是一个基于shell的关系数据库管理系统,由Carlo Strozzi初始开发,在类Unix操作系统或其他具有兼容性层(例如,Windows下的Cygwin)下运行。它的文件名NoSQL仅反映它不使用结构化查询语言进行查询; NoSQL RDBMS与2009年的NoSQL数据库概念不同,后者通常是非关系数据库,与NoSQL RDBMS不同。

2000年-2010年:(NoSQL && 数据仓库)

随互联网应用到来,数据呈现出大容量,多样性,流动性等特点,2009年初,Eric Evans在开源分布式数据库的讨论中提出NoSQL一词,用于指代那些非关系型的、分布式的,且一般不保证ACID的数据储存系统,专注高可用和高可靠性,放弃强事务和传统关系模型,遵循CAP(一致性,可用性,分区容差)理论,符合BASE(基本上,可用,软状态,最终一致)规则,无Schema,采用自定义API代替SQL等,典型的NoSQL 产品包括谷歌的BigTable,亚马逊的Dynamo,Facebook的Cassandra(基于BigTable和Dynamo)和PowerSet的Hbase(基于BigTable),以及MongoDB,Redis等。

代码语言:txt复制
[TODO] 这里埋下许多NoSQL...

2010年-2017年:(NewSQL)

  1. Google:Google于2012年发表论文《Spanner: Google’s Globally-Distributed Database》描述一个全球分布式系统,其特点包括:可扩展性、自动分片、容错性、一致性复制、外部一致性,和数据广域分布等,提供多行事务、外部一致性、跨数据中心的透明故障转移等功能。于2017年发表论文《Spanner: Becoming a SQL System》,描述查询执行的切分、瞬态故障情况下查询重新执行、驱动查询做路由和索引查找的范围查询,以及改进的基于块的列存等分布式查询优化技术。
  2. Amazon: Amazon Aurora于2014年10月开发并提供的托管关系数据库服务,作为Amazon Relational Database Service(RDS)的一部分提供,2017年,Amazon发表论文《Amazon Aurora: Design Considerations for High Throughput Cloud Native Relational Databases》描述Amazon 的云数据库 Aurora 的架构。于2018年发表《Amazon Aurora: On Avoiding Distributed Consensus for I/Os, Commits, and Membership Changes》 描述如何通过不变量和利用局部瞬态来避免大多数情况下的分布式共识问题。自2017年10月发布以来一直提供MySQL兼容服务,并且自2017年10月起兼容PostgreSQL。
  3. Microsoft: 微软2014年发布Azure DocumentDB,支持对任意文档的SQL查询,无显式schema或辅助索引或视图,将JavaScript执行直接集成到数据库引擎中,提供四种不同的一致性级别:Strong, Bounded Staleness, Session, and Eventual。2015年,发布Azure SQL Database,其是智能、完全托管的关系型云数据库服务,提供最广泛的 SQL Server 引擎兼容性,在不更改应用的情况下迁移 SQL Server 数据库,内置的智能能够学习应用模式并进行适应性调整,提供最优的性能、可靠性和数据保护。2017年5月,发布Azure Cosmos DB 是以全球分布和横向缩放为核心全新构建的,通过透明地缩放和复制数据,在任意数量的 Azure 区域提供统包全球分布。
  4. CockroachDB: CockroachDB 由Spencer Kimball于2014年1月编写发布第一个CockroachDB迭代版本,CockroachDB 按Spanner Google白皮书上技术构建的数据库,于2014年2月在GitHub开源,高度自动化,启用分布式事务,始终在线,支持工具处理关系数据,构建全球,可扩展,灵活的云服务。
  5. PingCap: PingCap公司受Google Spanner/F1 论文启发而设计开源分布式 HTAP (Hybrid Transactional and Analytical Processing) 数据库,其结合传统 RDBMS 和 NoSQL 特性,于2016年12月31日,发布RC1,于2017年10月16日,发布 GA 版(TiDB 1.0),该版本对 MySQL 兼容性、SQL 优化器、系统稳定性、性能做大量工作。于2018年4月27日,发布 2.0 GA 版。
  6. Tencent: 2015年 由腾讯技术工程事业群计费平台部针对金融联机交易场景开发的高一致性数据库集群产品TDSQL,发布第一个版本,承载公司数字支付相关业务,包括Q币Q点、包月、各类点券等核心支付数据的托管;2014年被WeBank选中,作为其核心系统的数据库解决方案;2015年,在腾讯金融云上正式推出,兼容MySQL的关系数据库,提供的金融数据库解决方案,保证数据安全性、高可靠性,对数据丢失零容忍;高可用的容灾架构,完善的水平扩展能力。腾讯云PostgreSQL-XZ(PGXZ)经过公司内部多年业务的打磨,在2017年改名为TBase后,正式对外推出,在PostgreSQL 2017中国技术大会上,展示腾讯分布式数据库 Tbase, 从技术角度各个方面验证TBase保障分布式系统的可靠性。2017年,由腾讯云技术团队打造的面向云计算2.0时代的新一代企业级分布式云数据库CynosDB,兼容MySQL和 PostgreSQL, 参考Amazon Aurora 架构,面向通用硬件,结合新硬件,新网络特点,重新定义分布式软件架构,其核心设计理念:Comprehensive:全面兼容新版的开源数据库,Cohesive:极致的内核级优化与新硬件技术相结合,Creative:实现全托管智能运维,Cost Effective:无服务器架构的按需按量计费。2018年3月,腾讯云推出云上时序数据库CTSDB(Cloud Time Series Database),CTSDB 是一款分布式、可扩展、高可靠的时序数据库,适用于有海量时序数据的物联网、大数据分析和互联网监控等场景。
  7. Alibaba: 2015年,OceanBase由阿里阳振坤带领团队研发的商业数据库的OceanBase,于2013年,开始OceanBase 1.0总体设计,2014年开始编码、测试,2015年底正式上线服务,于2016年3月22日对外开放,邀请测试阶段,直到2016年中才正式上线蚂蚁核心业务,包括会员视图、花呗、账务等。2012年 阿里云团队研发DRDS,与ScaleBase、VoltDB等系统类似。阿里云在2017年9月21日发布自研另一个新一代商用关系型云数据库POLARDB。
  8. 巨杉: 2017年, 巨杉云数据库( Database as a Service )是基于SequoiaDB的,稳定可靠、可弹性的在线数据库服务,SequoiaDB是一款支持SQL、高并发、实时性、分布式、可扩展、灵活存储的操作型NewSQL数据库,于2013年02月20日发布SequoiaDBV1.0,该版本采用全新分布式架构,2016年发布SequoiaDB V2.0稳定版本,现在发展到SequoiaDB 3.0。
代码语言:txt复制
[TODO]  还有许多如Baidu, 华为,京东云,青云,白山云等国内公司在NewSQL上发布相应的产品, 都发生在这里...

2017年-2018年 (NewSQL - Self-Driving DBMS)

  1. IBM: 2004年 IBM 发表论文《DB2 Design Advisor: Integrated Automatic Physical Database Design》提出一种工具DB2 Design Advisor Universal Database(DB2 UDB)版本8.2,其对于给定的工作负载,能自动推荐物理设计功能(包括任何子集索引),物化查询表(也称物化视图),无共享数据库分区和多维表格聚类,还具有内置模块,可自动减少给定的工作量,并具有可扩展性。
  2. Oracle: 2017年,Oracle Open World 大会上,Oracle 总裁拉里·埃里森公布Oracle自治数据库云,集成人工智能和自适应的机器学习技术,实现全面自动化。自治数据库云的实现,是基于 Oracle Database 18c的,在性能、内存优化、可用性、安全性、数据仓库等方面都作出优化提升,向 HTAP 数据库的目标更进一步。
  3. CMU: 2017年,CMU Peloton发表论文《Self-Driving Database Management Systems》 提出自治数据库,一种专为自主设计的新架构,该系统由集成的计划组件控制可以优化当前工作负载,预测未来的工作量趋势,可以通过深度学习算法提升硬件能力。
代码语言:txt复制
[TODO] 这才刚刚开始,有待进一步挖掘....

Reference

  1. A Brief History of Database Systems
  2. Kristi Berg, Dr,Tom Joseph Seymour. History Of Databases DOI:10.19030/ijmis.v17i1.7587 December 2012
  3. A B M Moniruzzaman.NewSQL: Towards Next-Generation Scalable RDBMS for Online Transaction Processing (OLTP) for Big Data Management
  4. Andrew Pavlo,Matthew Aslett.What’s Really New with NewSQL? 2016.06
  5. Ryan CrawCour.Introducing Azure DocumentDB. 2014
  6. Andy Pavlo.What is a Self-Driving Database Management System. 8th Biennial Conference on Innovative Data Systems Research (CIDR ‘17) January 8-11, 2017 ,
  7. Daniel C. Zilio1,Jun Rao2, Sam Lightstone1,Guy Lohman2.DB2 Design Advisor: Integrated Automatic Physical Database Design,Proceedings of the 30th VLDB Conference, Toronto, Canada, 2004

0 人点赞