从零开始学TiDB(2)深入了解TiDB Server模块

TiDB Server 架构

 TiDB Server 的主要功能:

一条SQL的执行流程:

1.将整个SQL语句解析成一个个的token,生成一个树形结构。

 2.编译模块

1.首先需要做一个合法性验证,比如表存不存在等。

2.做逻辑优化:依据关系型代数等等价变换的规则做一些逻辑变换,比如:列裁剪,最大最小消除,谓词下推,子查询,谓词下推,把外连接变为内连接等等。

3.做物理优化:根据数据的分布,数据的大小,决定用哪个算子。比如:用全表扫描还是用索引扫描,用哪个索引等。

4.最终生成执行计划,拿着执行计划就到TiKV节点中取相应的数据,此外我们还需要统计信息(数据分布与行数)和元数据(表名,列名,索引名是什么等属性)。

关系型数据 进行KV转化操作流程

假设现在有一张聚簇表 编号为主键PK。

聚簇表其实就是把相同聚簇键放在相同或相邻的数据块中,这样从而提高了聚簇因子的效率,从而提高了查询速度。

首先主键就是天然的Key,把主键和其它数据分开。 

但在数据库中 编号为1的key肯定不止一个,也就是说它再数据库层面全局不是唯一的。所以我们需要再加一个表的编号

 这时候Value的每一行都有了一个唯一的Key。这样就转换成了KV的形式

 把所有的KEY VALUE存储在一块,就形成了region(每个region在96M-144M之间)。

 当region 达到144M的时候,会有一个region分裂的过程。把一个region分成两个region

 

 读写相关模块协作:

Onlie DDL相关模块协作:

 

 如图,TiDB Server可以有很多个 ,可能向多个TiDB Server 上执行DDL,在对于整个TiDB 数据库来讲,同一时刻只能由一个TiDB Server 做DDL操作,也就是workers。 也就是同一时刻,只有一个TiDB Server 中的workers可以做操作。

TiDB  DDL流程:

首先一个DDL过来,首先由TiDB Server 中的start job模块接收。接收之后,start job模块会把这个DDL 以job的形式放到TiKV中的job队列中。(感觉这里有点疑问,之前说TiDB Server的操作都要由TiKV client 发给TiKV,所以这里应该由start job模块发给TiKV client ,TiKV client 再以job的形式发给TiKV)

这个队列是所有TiDB Server接收的DDL job一个总的队列。在同一时间只有一个TiDB Server的角色为owner,owner中的worker模块负责从job队列中去取第一个job去执行(这个job可以不是owner发出的DDL,但也是由owner去执行),执行完再把该job放到history job。每个TiDB Server是轮换当owner的,谁成为owner,谁就激活workers去执行job队列。

job放到TiKV中是为了持久化 

GC机制与相关模块:

GC负责定期清理MVCC历史版本的数据。有一个GC会当选为GC leader,由它来执行GC操作。比如,现在是下午两点,计算出上午十点钟是一个safe point。 那么从上午十点到下午两点的数据都会保留,之前的数据将会由GCleader 清除。 

TiDB 会定期进行 GC。每次 GC 时,TiDB 首先会计算一个时间戳,称为“安全点”。然后,TiDB 会在确保安全点之后的所有快照都保留数据完整性的前提下,清除过时的数据。具体来说,每次 GC 过程涉及三个步骤:

  1. 解决锁。在此步骤中,TiDB 会扫描所有 Region 上安全点之前的锁,并清除这些锁。
  2. DROP TABLE删除范围。在此步骤中, /操作生成的整个范围的过时数据DROP INDEX将被快速清除。
  3. 执行 GC。在此步骤中,每个 TiKV 节点都会扫描其上的数据并删除每个键的不需要的旧版本。

默认配置下,每10分钟触发一次GC,每次GC会保留最近10分钟的数据,也就是说GC生命周期默认为10分钟(安全点=当前时间-GC生命周期)。如果一轮GC运行时间过长,在这一轮GC完成之前,即使到了触发下一次GC的时间,下一轮GC也不会启动。另外,为了让长事务在超过GC生命周期后仍能正常运行,安全点不会超过正在进行的事务的开始时间(start_ts)。

TiDB Server 的缓存

 

 热点小表缓存

当一张表只占一个region,又不能拆散,那么所在TiKV就会繁忙。

解决问题就是不要访问TiKV 了,直接把这张表放在内存的 cache table中。

 热点小表缓存原理:

首先,存到内存中的表大小需要小于64M。

如何保证读写一致?

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/63505.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

贪心算法专题(四)

目录 1. 单调递增的数字 1.1 算法原理 1.2 算法代码 2. 坏了的计算器 2.1 算法原理 2.2 算法代码 3. 合并区间 3.1 算法原理 3.2 算法代码 4. 无重叠区间 4.1 算法原理 4.2 算法代码 5. 用最少数量的箭引爆气球 5.1 算法原理 ​5.2 算法代码 1. 单调递增的数字…

241207-通过Docker部署Wiki.JS并设置ElasticSearch进行中文搜索

A. 最终效果 B. 配置文件 version: "3" services:wiki:image: ghcr.io/requarks/wiki:2container_name: wikijsports:- "3000:3000"volumes:- /home/lgk/Projects/WikiJS/config:/configenvironment:- DB_TYPEpostgres- DB_HOSTdatabase- DB_PORT5432- DB…

Spring Boot如何实现防盗链

一、什么是盗链 盗链是个什么操作,看一下百度给出的解释:盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的…

springboot394疫情居家办公系统(论文+源码)_kaic

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统疫情居家办公系统信息管理难度大,容错率低&a…

RabbitMQ七种工作模式之 RPC通信模式, 发布确认模式

文章目录 六. RPC(RPC通信模式)客户端服务端 七. Publisher Confirms(发布确认模式)1. Publishing Messages Individually(单独确认)2. Publishing Messages in Batches(批量确认)3. Handling Publisher Confirms Asynchronously(异步确认) 六. RPC(RPC通信模式) 客⼾端发送消息…

模型训练数据-MinerU一款Pdf转Markdown软件

模型训练数据-MinerU一款Pdf转Markdown软件-说明 简介: MinerU是什么 MinerU是上海人工智能实验室OpenDataLab团队推出的开源智能数据提取工具,专注于复杂PDF文档的高效解析与提取。MinerU能将包含图片、公式、表格等元素的多模态PDF文档转化为易于分析…

STM32F103 PWM配置

在《STM32F103定时器配置》中我们介绍了PWM的产生原理,本节介绍介绍如何编码实现PWM的输出。 一、PWM相关寄存器 TIMx如果要产生PWM,除了我们上一节提到的如下寄存器: 控制寄存器(TIMx_CR1);DMA/中断使能寄存器(TIMx_DIER)&#x…

Flink Python作业快速入门

Flink Python快速入门_实时计算 Flink版(Flink)-阿里云帮助中心 import argparse # 用于处理命令行参数和选项,使程序能够接收用户通过命令行传递的参数 import logging import sysfrom pyflink.common import WatermarkStrategy, Encoder, Types from pyflink.data…

三菱CNC数采超详细,资料全备教程,后续更新发那科数采教程

三菱数采详细教程 文章目录 三菱数采详细教程一、介绍1.背景2.需要掌握知识3.需要资料①三菱SDK包:A2②三菱com接口文档③C#代码:④VStudio⑤资料存放网盘 二、程序运行1.调试设备①条件②命令 2.运行软件①打开软件②运行程序 三、数据采集1.代码了解2.…

常见限流算法详细解析

常见限流算法详细解析 分布式系统中,由于接口API无法控制上游调用方的行为,因此当瞬时请求量突增时,会导致服务器占用过多资源,发生响应速度降低、超时、乃至宕机,甚至引发雪崩造成整个系统不可用。 限流,…

java+ssm+mysql高校学籍管理系统

项目介绍: 使用javassmmysql开发的高校学籍管理系统,系统包含超级管理员,系统管理员、教师、学生角色,功能如下: 超级管理员:管理员管理(可以新增管理员);专业管理&…

(5)JS-Clipper2之PolyNode

1. 描述 PolyNodes是被封装在PolyTree的容器中,同时提供了一个数据结构来代表由Excute()方法返回的多边形轮廓中的父子关系。 一个PolyNode对象代表一个多边形;它的“IsHole”属性表明它是一个“外轮廓”还是一个“内孔”,PolyNodes可能包含…

Java项目实战II基于微信小程序的无中介租房系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着城市化进程的加速,租房市场日益繁荣&a…

MATLAB稀疏感知图像和体数据恢复的系统对象研究

稀疏感知图像和体数据恢复是一种用于恢复损坏、噪声或不完整的图像和体数据的技术。它利用了信号的稀疏性,即信号在某种基础下可以用较少的非零系数表示,从而实现高质量的恢复。 在进行稀疏感知图像和体数据恢复的研究时,需要定义一些系统对…

安卓调试环境搭建

前言 前段时间电脑重装了系统,最近准备调试一个apk,没想到装环境的过程并不顺利,很让人火大,于是记录一下。 反编译工具下载 下载apktool.bat和apktool.jar 官网地址:https://ibotpeaches.github.io/Apktool/install…

【工具】音频文件格式转换工具

找开源资源、下载测试不同库的效果,然后找音频、下载音频、编写代码、测试转换、流程通畅。写一个工具花的时间越来越多了!这个 5 天 这个工具是一个音频文件格式转换工具,支持对 mp3.aac.wav.caf.flac.ircam.mp2.mpeg.oga.opus.pcm.ra.spx.…

在ARM Linux应用层下使用SPI驱动WS2812

文章目录 1、前言2、结果展示3、接线4、SPI驱动WS2812原理4.1、0码要发送的字节4.2、1码要发送的字节4.3、SPI时钟频率 5、点亮RGB5.1、亮绿灯5.2、亮红灯5.3、亮蓝灯5.4、完整程序 6、RGB呼吸灯7、总结 1、前言 事情是这样的,前段时间,写了一个基于RK3…

BERT:用于语言理解的深度双向 Transformer 的预训练。

文章目录 0. 摘要1. 介绍2. 相关工作2.1 无监督的基于特征的方法2.3 无监督微调方法2.3 从受监督数据中迁移学习 3. BERT3.1 预训练 BERT3.2 微调 BERT 4. 实验4.1 GLUE4.2 SQuAD v1.14.3 SQuAD v2.04.4 SWAG 5. 消融研究5.1 预训练任务的影响5.2 模型大小的影响5.3 使用 BERT …

在算网云平台云端在线部署stable diffusion (0基础小白超详细教程)

Stable Diffusion无疑是AIGC领域中的AI绘画利器,具有以下显著优势: 1、开源性质,支持本地部署 2、能够实现对图像生成过程的精确控制 虽然SD在使用上有很多的有点,但缺点也是不言而喻的,由于AI绘画的整个过程以及现…

设计模式——Chain(责任链)设计模式

摘要 责任链设计模式是一种行为设计模式,通过链式调用将请求逐一传递给一系列处理器,直到某个处理器处理了请求或所有处理器都未能处理。它解耦了请求的发送者和接收者,允许动态地将请求处理职责分配给多个对象,支持请求的灵活传…