写点什么

NewSQL 分布式数据库,例如 TIDB 用 K/V 的底层逻辑

用户头像
读字节
关注
发布于: 2021 年 03 月 10 日
NewSQL分布式数据库,例如TIDB用K/V的底层逻辑

内容参考

对分布式对定义参考这篇文章:

微服务都想用,先把分布式和微服务之间的关系说清楚

对分布式架构中心或无中心对比参考这篇文章:

分布式存储单主、多主和无中心架构的特征与趋势

对 HDFS 对内部机制参考这篇文章:

Hadoop分布式文件系统I/O原理机制的深度解读

分布式文件系统 HDFS 无索引就无 K/V

首先分布式数据并不是绝对的喜欢使用 kv 存储模式,例如分布式数据库里面 mongodb 和 elasticsearch 是文档形式存储,若把 HDFS 也算进去的话,它是无索引的存储。



上图是 HDFS 作为分布式数据存储的文件分块存储模式,简单直接,并没有进行任何的 kv 索引建立。我们可以看到图中 Nginx 日志被切割成 duo 多份,然后分布在三台数据节点上,要注意的是,HDFS 的副本一般是三份,图中只做了两份代表副本的意思,但实际上是三份。客户端在进行访问通信是时候,都是通过数据块 scan 的方式进行,没有索引,就没有随机访问机制。

TiDB 的架构特征

像 cockroach,tidb,明明是关系库,为啥非要弄个 key,即使业务逻辑不需要表有 unique key,也要给每条记录硬加一个 key,这是什么目的?

其实 cockroach,tidb 都叫 NewSQL,是 NoSQL+关系型数据库的合体,认为它们是关系库,说得不恰当。

例如:tidb 分为 PD、TIKV、TIDB,PD 管理者 kv 的关系结构,这部分可以对标关系型数据库。


上图是 TIDB 的架构图,图中可以看到 TIDB 形成的集群主要是接收外部应用的 SQL,处理 SQL 的逻辑,与 PD 交互获取 KV 地址,与 KV 交互获取数据;

PD 组成的集群主要是通过元数据的语义理解 kv 在集群中的位置,实现对 KV 集群的调度和负载均衡,分配全局事务 ID;

TIKV 就是我们说到的重点,通过 Key-Value 存储引擎,提供分布式事务能力。每个节点有多个 Region,Region 存储一个范围 Key 的数据——Key Range,主要是为了形成连续的小组,在局部提供写入和读取的性能优势。并且以 Region 作为原子单元,实现集群跨节点的副本复制,复制方式用 Raft 协议实现。


实际上 TIKV 部分就是标准的 NoSQL 为基础的数据持久化层了,TIKV 的持久化数据层就是 RocksDB,同样的 cockroach 持久化数据层也用的是 RocksDB,RocksDB 的就是 LSM-Tree 的日志追加方式 WAL (write ahead log)快速写入数据,再通过 LSM-Tree 的 memtable,sstable 结构,索引 key,获取 value,所以就是个标准的 key/value 数据库。

RocksDB 的核心优势 LSM-Tree 结构

为什么它们不约而同的都选择了 RocksDB,因为作为核心结构 LSM 树的 WAL,memtable,sstable 方式具有写入数据的巨大优势并保证数据可靠性,形成很多小的顺序分组,同时又得到局部热点上的惊人查询优势,在内存中完成查找。

而且 LSM-Tree 配合 Bloom Filter 又能将时间线作为优先级,快速索引数据在磁盘中的位置范围,这就大大减少扫描磁盘的动作。

若遇到大范围随机查找,Bloom Filter 有也查不到位置的情况,才会通过二分查找,并在树的不同层进行多路合并,取优先级最高的数据。

那么通过这种思路,就能比关系型数据库的 b/b+树索引在写的性能方面带来质的提升,而且对于局部热点,也就是近期数据带来惊人的查询性能,虽然全局范围的查询有所降低,数据段合并会带来的资源消耗(rocksdb 通过多线程合并提升了这一过程的效率),但数据库读写的整体性能的平衡性变得更合理了,总之将来通过集群处理读的问题总是比处理写的问题更容易,这就是选择 key/value 数据库的底层逻辑。

NewSQL 相对于 MySQL 的优势

反观关系型数据库,例如要给 MySQL 加上一条索引,那么索引字段就是 key。所以 RDBMS 也不能说自己跟 key/value 存储没啥联系。

作为业务逻辑上不需要 unique key 而非要加一个 key,这是因为关系型数据库设计的初衷就不是为了海量数据的快速写入和查找所设计的,即便没有索引,行集扫描也没有问题,这才是常态是其本质,这和 Hadoo HDFS 的按块扫描一样,都是一种原始的状态,HDFS 之上依然需要 HBase 数据库来解决海量数据的随机查找场景,本质上作为列族分类的 HBase 也是 Key/Value 模式。

NewSQL 选择了 RocksDB,也就是选择了业务记录中 key 存在的必须,但换来的是海量数据的高效写入和查找,非常划算。


公众号 read-byte “读字节” 大数据,分布式软件架构的深度,专业解读

前往读字节的知乎——了解更多关于大数据的知识

https://www.zhihu.com/people/fangshun/answers


发布于: 2021 年 03 月 10 日阅读数: 18
用户头像

读字节

关注

公号“读字节”大数据、软件架构的深入解读 2018.05.29 加入

西安守护石信息科技 创始人 方顺

评论

发布
暂无评论
NewSQL分布式数据库,例如TIDB用K/V的底层逻辑