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

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: NewSQL分布式数据库,例如TIDB用K/V的底层逻辑

内容参考


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


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


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


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


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


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


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


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


20210310220137996.png


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


TiDB的架构特征


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


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


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


20210310220138637.png


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


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


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


20210310220138854.png


实际上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方式具有写入数据的巨大优势并保证数据可靠性,形成很多小的顺序分组,同时又得到局部热点上的惊人查询优势,在内存中完成查找。


20210310220139708.png


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


相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
4月前
|
SQL 关系型数据库 MySQL
乐观锁在分布式数据库中如何与事务隔离级别结合使用
乐观锁在分布式数据库中如何与事务隔离级别结合使用
|
2月前
|
SQL 关系型数据库 MySQL
乐观锁在分布式数据库中如何与事务隔离级别结合使用
乐观锁在分布式数据库中如何与事务隔离级别结合使用
|
18天前
|
Cloud Native 关系型数据库 分布式数据库
PolarDB 分布式版 V2.0,安全可靠的集中分布式一体化数据库管理软件
阿里云PolarDB数据库管理软件(分布式版)V2.0 ,安全可靠的集中分布式一体化数据库管理软件。
|
4月前
|
存储 SQL 分布式数据库
OceanBase 入门:分布式数据库的基础概念
【8月更文第31天】在当今的大数据时代,随着业务规模的不断扩大,传统的单机数据库已经难以满足高并发、大数据量的应用需求。分布式数据库应运而生,成为解决这一问题的有效方案之一。本文将介绍一款由阿里巴巴集团自主研发的分布式数据库——OceanBase,并通过一些基础概念和实际代码示例来帮助读者理解其工作原理。
423 0
|
1月前
|
关系型数据库 分布式数据库 数据库
PostgreSQL+Citus分布式数据库
PostgreSQL+Citus分布式数据库
67 15
|
2月前
|
SQL 关系型数据库 分布式数据库
Citus 简介,将 Postgres 转换为分布式数据库
【10月更文挑战第4天】Citus 简介,将 Postgres 转换为分布式数据库
112 4
|
2月前
|
SQL NoSQL MongoDB
一款基于分布式文件存储的数据库MongoDB的介绍及基本使用教程
一款基于分布式文件存储的数据库MongoDB的介绍及基本使用教程
55 0
|
2月前
|
存储 分布式计算 负载均衡
|
4月前
|
存储 SQL 安全
【数据库高手的秘密武器:深度解析SQL视图与存储过程的魅力——封装复杂逻辑,实现代码高复用性的终极指南】
【8月更文挑战第31天】本文通过具体代码示例介绍 SQL 视图与存储过程的创建及应用优势。视图作为虚拟表,可简化复杂查询并提升代码可维护性;存储过程则预编译 SQL 语句,支持复杂逻辑与事务处理,增强代码复用性和安全性。通过创建视图 `high_earners` 和存储过程 `get_employee_details` 及 `update_salary` 的实例,展示了二者在实际项目中的强大功能。
47 1
|
4月前
|
存储 缓存 负载均衡
【PolarDB-X 技术揭秘】Lizard B+tree:揭秘分布式数据库索引优化的终极奥秘!
【8月更文挑战第25天】PolarDB-X是阿里云的一款分布式数据库产品,其核心组件Lizard B+tree针对分布式环境优化,解决了传统B+tree面临的数据分片与跨节点查询等问题。Lizard B+tree通过一致性哈希实现数据分片,确保分布式一致性;智能分区实现了负载均衡;高效的搜索算法与缓存机制降低了查询延迟;副本机制确保了系统的高可用性。此外,PolarDB-X通过自适应分支因子、缓存优化、异步写入、数据压缩和智能分片等策略进一步提升了Lizard B+tree的性能,使其能够在分布式环境下提供高性能的索引服务。这些优化不仅提高了查询速度,还确保了系统的稳定性和可靠性。
103 5