乐趣区

关于分布式:NewSQL分布式数据库例如TIDB用KV的底层逻辑

内容参考

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

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

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

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

对 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 存在的必须,但换来的是海量数据的高效写入和查找,十分划算。

返回读字节的知乎——理解更多对于大数据的常识

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

退出移动版