摘要
NewSQL是真的优于传统的RDBMS,还是只是销售的噱头?
如果是真的优于传统的RDBMS,那么其科学依据是什么?
DBMS历史
1960年IBM’s IMS.
1970年IBM SYSTEM R, INGRES, Oracle.
1983年IBM DB2.
1990年MySQL,PG.
2000年,数据库中间件,中间件只能执行简单的操作,对于多表更新,多表连接无能为力。
2000年末,NOSQL,抛弃了事务特性和关系模型,取而代之的是最终一致性和替代模型,如KV,Document等模型 典型代表:Google BigTabel & Amazon Dynamo & MongoDB.
很多使用NOSQL的开发人员发现需要自己处理最终一致性,导致开发效率低下,NewSQL应运而生。
NewSQL定义
NewSQL同时包含NOSQL的可扩展性以及传统RDBMS的事务特性,关注于OLTP场景。
一些数据仓库如GP,关注于OLAP场景,不能称之为NEWSQL。
NewSQL的特点:
- 事务较短
- 每个语句涉及到的数据量很少
- 语句可重复性强
更技术的定义是:
- 使用lock-free并发控制
- share-nothing架构
NewSQL分类
大概分为三类:
- 采用新架构的全新系统
- 2000s左右的中间件系统
- DaaS
单节点的引擎替换不属于NEWSQL,比如TokuDB,ScaleDB等。这类系统基本都走进了衰落。
新架构
特点:
- 新架构基于share-nothing的方式,包含多节点并发控制,复制的容错技术,流量控制,以及分布式SQL执行器。
- 分布式执行器是此类系统的特性,各个节点可以交换数据,不用像中间件那样,所有数据必须经过中间件处理。
- 负责后端数据的分布,而不是依赖于一些分布式存储比如HDFS. SQL ON Hadoop我们不认为是NewSQL。
新架构的问题是:
- 使用的人太少
- 用户之前的工具和程序没法直接使用
透明中间件
优点是用户应用程序兼容性好。
缺点是每个节点后端存储使用现成的MySQL,优化程度有限。而且对于复杂查询处理难度很大。但是可以利用每个后端节点的执行器。
DaaS
大部分DaaS都是提供单点服务。这类称不上NewSQL。
Amazon的Aurora使用LSM提升了并发IO。
ClearDB只提供DaaS软件。
目前DaSS做的并不是特别好。
先进的架构
内存架构
内存性价比已经提升,大内存,价格降低,已经可以讲很大的数据量放进内存。
基于内存的优化可以不用再考虑对数据的等待,以及不用存在buffer pool的管理和非常繁重的并发控制模式。
目前内存数据库根据内部的内存追踪系统可以将部分内存swap到磁盘,从而达到可以处理的数据量大于实际内存容量的情况。
分片
通过指定分片列,对数据进行水平切分,分散到不同的数据节点。
尽量将相关联的数据分配到同一个切片,这样可以将执行下放到一个节点,而且不需要使用2PC来维护分布式事务的原子性。
NUODB和MemSQL使用异构架构。
NuoDB架构:
- Storage Manager SM 负责存储数据,将数据切分成atoms。
- Transaction Engine TE 是atom的内存镜像,每个atom只会出现在一个TE中。
MemSQL架构:
- 只负责执行的聚集节点
- 只负责存储的叶子节点
两个架构的区别在于数据的缓存。NuoDB TE会缓存atom,MemSQL的聚集节点不缓存数据,但是叶子节点会执行部分语句,
来减少返回给聚集节点的数据。
分片另一个方面是在线迁移功能,包括数据迁移以及数据的rebalance。
主要两种技术手段:
- virtual partition
- 根据range分区做更细粒度的balance.
并发控制
并发控制分为中心化和无中心化两种。
中心化存在一个中心事务协调器。
去中心化系统每个节点维护事务状态,需要和其它节点通信来发现事务冲突。
去中心化系统扩展性好,但是需要一个强同步的时钟系统,保证事务的全局顺序。
2PL两阶段锁,开销比较大,处理死锁复杂。目前大多NewSQL系统采用2PL + MVCC。修改操作加锁,读不加锁,使用基于Time Order的MVCC获取对应的版本数据即可。
二级索引
二级索引的分片方式和表的分片列不一致。
二级索引设计要点:
- 存储在什么位置
- 在事务中如何维护他们
所有的NewSQL系统都使用分片二级索引的方式。分片方式和复制方式的区别:
- 分片方式查找的时候可能找多个节点,更新只更新一个节点。
- 复制方式,只查找一个节点,更新的话,所有副本都要更新。
复制
数据库复制设计要点:保证各个节点数据的强一致性
- 2PC消耗大
- active-active 多点写方式,很难实现,不同节点的执行顺序可能不一致。
- active-passive 单点写,给副本传递状态
宕机恢复
传统单机的宕机恢复是找到最近的检查点,从此检查点开始重新应用WAL日志。NewSQL不能简单使用单机的策略。
因为分布式数据库一个master宕机后,其replica会提升为master,原master重启后,不仅仅需要应用WAL,还需要与当前的master同步数据。
趋势
可预见的未来,数据库的发展是朝向HTAP,即OLTP+OLAP混合型的方向发展。