从零开始学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会根据信息进行调度。

相关推荐
for_ever_love__8 分钟前
Objective- C学习: 手动内存管理
c语言·学习·ios·objective-c
gechunlian889 分钟前
Spring Security 官网文档学习
java·学习·spring
2401_8534482330 分钟前
Maix例程代码学习
学习
FPGA小迷弟40 分钟前
FPGA工程师面试题汇总(二)
学习·fpga开发·verilog·fpga
arvin_xiaoting1 小时前
OpenClaw学习总结_I_核心架构_9:Multi-Agent详解
网络·学习·架构·系统架构·ai agent·multi-agent·openclaw
倾心琴心1 小时前
【agent辅助pcb routing coding学习】实践7 length matching 算法学习
学习·算法·agent·pcb·routing
weiabc2 小时前
今日C/C++学习笔记20260223
c语言·c++·学习
我的xiaodoujiao2 小时前
3、API 接口自动化测试详细图文教程学习系列3--相关Python基础知识2
python·学习·测试工具·pytest
~光~~2 小时前
【嵌入式linux学习】0_3位运算整理
linux·学习
hssfscv2 小时前
软件设计师下午题二 E-R图
java·笔记·学习