从零开始学TiDB(1) 核心组件架构概述

首先TiDB深度兼容MySQL 5.7

1. TiDB Server

SQL语句的解析与编译:首先一条SQL语句最先到达的地方是TiDB Server集群,TiDB Server是无状态的,不存储数据,SQL 发过来之后TiDB Server 负责 解析,优化,编译 这条SQL语句,并生成执行计划。

处理客户端的连接:TiDB Server 还有一个特点是可以横向扩展,当并发很高,会话数很多,TiDB Server可以横向扩展增加节点,分走一部分会话。

关系数据与KV的转化:由于 TiDB 存储的数据不是行数据,是键值对 KV,所以当insert的时候还会做 行数据变成KV类型数据的转化。 所以region由一个个的键值对组成。

OnlineDDL:DDL语句不会阻塞线上的业务。

垃圾回收:一行数据修改频繁,经历了多次修改,之前修改的版本会保留下来。久而久之就会给数据库带来压力,TiDB Server 会进行自动垃圾回收(我们叫它GC)

智能选择:通过预测SQL,来确定是访问列存版本还是行存版本。

2. 数据存储节点-TiKV

TiKV 里面存储的数据并不是建的表,当写数据的时候,会经过 TiDB Server 把数据分成一个个的region (每个region在96M-144M之间)。并且为region创建副本,默认是三副本。

所以TiKV的作用就是存储打散的数据 ,并创建多副本保证高可用。所以如果空间不够的时候可以通过添加TiKV的方式来解决。

持久化:

TiKV中运行着rocksdb这个单机的KV存储引擎。 rocksdb 有两个实例

一个是rocksdb kv:存储KV类型的数据。

一个是rocksdb raft: 存储指令,对表的DML操作,都先存在rocksdb raft 中,再由rocksdb kv 进行应用。

强一致性和高可用性:

通过Raft协议,保证region在另外的TiKV中也有副本 。在三个副本中,只有一个副本负责读写,成为leader副本。其它的副本不能读写,复制同步leader副本。

MVCC:

MVCC实现数据库隔离性。

支持事务:

算子下推:

分布式数据库的优势,虽然数据存在多个节点中,会有一定的网络延迟,但每个节点都有CPU,每个节点可以处理一部分计算功能。

3. 列存组件-TiFlash

TiFlash 存的数据和TiKV里面的region是一样的,不过TiKV是行存储,TiFlash是列存储。

TiFlash也参与复制,TiFlash 的数据和TiKV是一样的,引入TiFlash 是为了分析型业务 的性能。

4.集群大脑 PD

当访问数据的时候,比如一条SQL 要进行全表扫描,经过TiDB Server后生成了执行计划,现在去找这张表组成的region 在个TiKV 或哪几个TiKV 上面? 这就需要 region和TiKV 的映射关系(我们叫他元数据),元数据就存储在PD节点上。

并且每个SQL 都有一个开始时间,也存储在PD上,我们叫它(TSO)

如果是事务提交,也会记录事务开始时间和事务结束时间。

当一张表存储在TiKV中,经过长期的运行,这张表越来越大, 这张表过分的集中在某个TiKV中,这时候DML会集中到某个TiKV中,所以 region和TiKV会以一定的时间间隔向PD汇报自己的状况,读写压力等。PD会根据信息进行调度。

相关推荐
递归不收敛18 分钟前
吴恩达机器学习课程(PyTorch 适配)学习笔记:3.4 强化学习
pytorch·学习·机器学习
StarPrayers.22 分钟前
卷积层(Convolutional Layer)学习笔记
人工智能·笔记·深度学习·学习·机器学习
能不能别报错1 小时前
K8s学习笔记(十五) pause容器与init容器
笔记·学习·kubernetes
ᖰ・◡・ᖳ1 小时前
JavaScript:神奇的ES6之旅
前端·javascript·学习·es6
小马学嵌入式~1 小时前
堆排序原理与实现详解
开发语言·数据结构·学习·算法
递归不收敛2 小时前
吴恩达机器学习课程(PyTorch适配)学习笔记:1.4 模型评估与问题解决
pytorch·学习·机器学习
又是忙碌的一天2 小时前
前端学习 JavaScript
前端·javascript·学习
ooo-p2 小时前
FPGA学习篇——Verilog学习之计数器的实现
学习·fpga开发
A9better2 小时前
嵌入式开发学习日志37——stm32之USART
stm32·嵌入式硬件·学习
zhangrelay3 小时前
ROS云课三分钟-使用动态参数重配置调试Teb导航案例-251008
笔记·学习