在MySQL发展到今天,已经是每个后端人员都必须要精通的数据库,New SQL是未来的一种趋势
New SQL是什么呢?对于MySQL来说,是早起的关系型数据库,称为SQL或者Old SQL
后来出现了Redis和很多KV存储系统,性能上吊打MySQL,存储结构简单,而且支持集群,所以能够做到水平的扩展,高可靠,高可用,因为这些存储不支持SQL,所以称为No SQL
虽然性能好,但是因为不支持SQL和ACID存储,所以现在Old SQL还是生产系统中的主流数据库
这个时候,开源的团队开始努力加上了SQL,比如Spark Flink这样的流计算平台,也开始支持SQL,虽然说支持SQL,各个产品支持程度参差不齐,所以还是不可靠
这时候,New SQL是一种全新的发展趋势,兼顾了Old SQL和No SQL的优点
完整的支持SQL和ACID
高可用,高性能,支持水平扩展
类似Google的Cloud Spanner,国产的OceanBase,以及开源的CockroachDB都属于New SQLs数据库,Cockroach DB俗称小强数据库
我们拿着CockroachDB来查看数据分片,其架构图如下
其架构,最上层是SQL层,SQL层支持数据库类似的逻辑数据结构
表 库 行 列 等概念,SQL向下调用一个抽象的Structured Data API,实际实现的下面的DIstributed Monolithic KV Store,分布式的KV存储
从宏观上来看,整体架构是一个二层架构,执行器和存储引擎,SQL层就是执行器,KV存储就是存储引擎
MySQL 引擎 InnoDB,基于文件系统的B+树
Hive采用HDfs构建的
小强采用KV存储来进行构建
采用KV存储,可以进行水平扩容等操作
对于集群的部署,我们的分片算法采用的是范围分片,利用了Raft一致性协议,实现了高可靠和高可用和强一致性
对于节点的元数据,则是利用了流言协议进行传播
对于存储,则是利用RocksDB作为了KV存储引擎
然后是关于小强DB的事务问题
如何实现ACID,ACID事务决定了未来是否可以取代MySQL
首先是小强的SQL执行方式,和MySQL一样,都是先生成语法树,然后做出执行逻辑,然后执行
然后是小强的隔离级别,小强的隔离级别分别是Snapshot Isolation SI 和 Serailizable Snapshot Isolation SSI
其和原本MySQL的对比如下
主要是我们新增加了写倾斜这个问题,就是可能同时对一个数据进行更新视乎,导致的更新冲突,
换言之
没有进行检测读写重读,没有加锁,导致数据写错了
SSI在SI基础上,加入了冲突检测的机制,通过检测读写冲突,然后回滚事务方式来解决写倾斜的问题
所以在小强之中,提供的事务隔离几倍,和RC RR级别不相上下了,满足大多数在线交易的ACID要求