这篇文章介绍的面很广,提到了诸多系统,不过每个点都不太细。另外虽然是16年的文章,但不知道为啥还是感觉有点陈旧了。。。简单来说,当个手册看吧,遇到具体细节问题,可以找文中提到的具体系统参考下。这里捡我感兴趣的点罗列了一下,详细内容读者可以看原文。
DBMS简史
1968年第一个DBMS上线,IBM在数据库领域发力甚早,比如System R,不过没有对外。
70年代,Oracle发布了第一个版本。
1983年IBM推出了DB2。
80年代,面向对象的数据库问世,不过缺乏像SQL一样的标准接口而未能广为使用,不过面向对象数据库中一些想法,如支持XML等,在后来的NoSQL中又得到了应用。
90年代,出现了一些开源的数据库产品,如MySQL、Postgres。
00年代,大规模互联网应用给数据库带来了很大的冲击,这一阶段有些中间件的解决方案。有公司开始尝试搞分布式DBMS,最终导致了NoSQL运动。NoSQL里面最著名的是Google Bigtable和Amazon Dynamo。
00年代末,很多应用更强调强一致、支持事务,使用NoSQL的接口往往导致应用代码很复杂,这些因素最终促使了NewSQL的诞生。
NewSQL的分类
NewSQL是指一类关系型数据库,即有NoSQL的扩展性,又支持ACID事务。
NewSQL分成三类:New Architecture、Transparent Sharding Middleware、Database-as-a-Service。
New Architecture
分布式设架构设计,一般是share-nothing的架构,支持mutli-node concurrency control、fault tolerance through replication、flow control、distributed query processing。因为针对分布式环境设计,所以可以做的优化空间更多,比如查询优化、节点间通信(不必依赖中间件中心节点)等。该思路下一般(Spanner不是)要自己管理数据存储和分布,以支持将请求发到数据而不是将数据带到请求节点。
因为是全新的架构,兼容和系统生态会是一个大问题。以我看到的情况,坦白地说,这些工作都是偏离core-tech之外的dirty work。
典型系统:Clustrix、Google Spanner、H-Store、HyPer、MemSQL、NuoDB、Pivotal GemFire XD、SAP HANA、VoltDB。
Transparent Sharding Middleware
中间件思路下,有一个中心组件用来路由请求、协调事务(应该是协调完成分布式事务)、管理数据分布、副本复制、数据在节点间分区。每个节点上都运行一个单机版的数据库实例,上面有一个组件用于该实例与中心组件交互。整个集群对外是一个逻辑实例。
优势:应用往往已经很适合这种架构,所以不需要做什么改动。
劣势:单节点上的传统数据库是面向磁盘设计的,针对大内存和多核机器无法高效利用;另外就是复杂查询的查询计划和优化在中间件和各节点上会有重复工作。
典型系统:dbShards、MariaDB MaxScale、ScaleArc、ScaleBase。
Database-as-a-Service
云数据库
典型系统:Amazon Aurora、ClearDB
最新的技术点
这一节新东西不多,只提一下我觉得有点意思的点。
面向内存的存储设计
内存要自己管理起来,不要依赖OS。
Partitioning / Sharding 略
Concurrency Control 略
Secondary Index
分布式集群里面维护全局索引不好解决(产生大量分布式事务)。
业务可以额外再搞个纯内存cache系统来放索引,索引失效要自己搞(要仔细考虑原子性、一致性这些问题)。数据库内核开发者成功将难题扔给了应用开发者……
Replication 略
Crash Recovery 略
扫描二维码,分享此文章