NewSQL

190 阅读2分钟

NewSQL

兼顾了 Old SQL 和 No SQL 的优点:

  • 完整地支持 SQL 和 ACID,提供和 Old SQL 隔离级别相当的事务能力;
  • 高性能、高可靠、高可用,支持水平扩容。

像 Google 的 Cloud Spanner、国产的 OceanBase 以及开源的CockroachDB都属于 New SQL 数据库。

CockroachDB

架构图:

image.png
  1. 最上层是 SQL 层,SQL 层支持和关系型数据库类似的逻辑数据结构,比如说库、表、行和列这些逻辑概念。
  2. SQL 层向下调用的是一个抽象的接口层 Structured Data API
  3. 实际实现这个 API 的是下面一层:Distributed, Monolithic KV Store,这就是一个分布式的 KV 存储系统。

这个架构是二层架构:执行器和存储引擎。它的 SQL 层就是执行器,下面的分布式 KV 存储集群就是它的存储引擎。

分片算法:范围分片,对查询最友好 一致性协议:Raft,保证高可靠、高可用、强一致 元数据:存储在所有存储节点上,依靠gossip协议传播

实现ACID: 先解析 SQL 生成语法树,转换成逻辑执行计划,再转换为物理执行计划,优化后,执行物理执行计划返回查询结果,这样一个流程。

它的物理执行计划面对的是一个分布式 KV 存储系统,在涉及到查找、聚合这类操作的时候,有可能需要涉及到多个分片(Range)。大致过程就是类似于 Map-Reduce 的逻辑,先查找元数据确定可能涉及到的分片,然后把物理执行计划转换成每个分片上的物理执行计划,在每个分片上去并行执行,最后,再对这些执行结果做汇总。

支持的事务隔离级别:

  • SI:不会有脏读、不可重复读、幻读,会有写倾斜,即因为是基于快照,有并发写时出现写冲突不会加锁,导致数据错误。
  • SSI:在 SI 的基础上,加入了冲突检测的机制,通过检测读写冲突,然后回滚事务的方式来解决写倾斜的问题,当然这种方式付出的代价是降低性能,并且冲突严重的情况下,会频繁地出现事务回滚。

此文章为3月Day23学习笔记,内容来源于极客时间《后端存储实战课》