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

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
3月前
|
存储 关系型数据库 分布式数据库
喜报|阿里云PolarDB数据库(分布式版)荣获国内首台(套)产品奖项
阿里云PolarDB数据库管理软件(分布式版)荣获「2024年度国内首版次软件」称号,并跻身《2024年度浙江省首台(套)推广应用典型案例》。
|
6月前
|
存储 NoSQL 数据库
Redis 逻辑数据库与集群模式详解
Redis 是高性能内存键值数据库,广泛用于缓存与实时数据处理。本文深入解析 Redis 逻辑数据库与集群模式:逻辑数据库提供16个独立存储空间,适合小规模隔离;集群模式通过分布式架构支持高并发和大数据量,但仅支持 database 0。文章对比两者特性,讲解配置与实践注意事项,并探讨持久化及性能优化策略,助你根据需求选择最佳方案。
201 5
|
3月前
|
存储 NoSQL MongoDB
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
181 8
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
|
7月前
|
Cloud Native 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
阿里云PolarDB云原生数据库在TPC-C基准测试中以20.55亿tpmC的成绩刷新世界纪录,展现卓越性能与性价比。其轻量版满足国产化需求,兼具高性能与低成本,适用于多种场景,推动数据库技术革新与发展。
|
3月前
|
存储 监控 分布式数据库
ClickHouse分布式数据库动态伸缩(弹性扩缩容)的实现
实现ClickHouse数据库的动态伸缩需要持续的维护和精细的操作。从集群配置到数据迁移,再到监控和自动化,每一步都要仔细管理以确保服务的可靠性和性能。这些活动可以显著提高应用的响应性和成本效率,帮助业务根据实际需求灵活调整资源分配。
205 10
|
4月前
|
存储 关系型数据库 分布式数据库
【赵渝强老师】基于PostgreSQL的分布式数据库:Citus
Citus 是基于 PostgreSQL 的开源分布式数据库,采用 shared nothing 架构,具备良好的扩展性。它以插件形式集成,部署简单,适用于处理大规模数据和高并发场景。本文介绍了 Citus 的基础概念、安装配置步骤及其在单机环境下的集群搭建方法。
320 2
|
6月前
|
Cloud Native 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
|
6月前
|
SQL 存储 分布式数据库
分布式存储数据恢复—hbase和hive数据库数据恢复案例
分布式存储数据恢复环境: 16台某品牌R730xd服务器节点,每台服务器节点上有数台虚拟机。 虚拟机上部署Hbase和Hive数据库。 分布式存储故障: 数据库底层文件被误删除,数据库不能使用。要求恢复hbase和hive数据库。
211 12
|
12月前
|
SQL 关系型数据库 MySQL
乐观锁在分布式数据库中如何与事务隔离级别结合使用
乐观锁在分布式数据库中如何与事务隔离级别结合使用

热门文章

最新文章