TiDB-从0到1-体系结构

在这里插入图片描述

TiDB从0到1系列

  • TiDB-从0到1-体系结构
  • TiDB-从0到1-分布式存储
  • TiDB-从0到1-分布式事务
  • TiDB-从0到1-MVCC

一、TiDB体系结构图

在这里插入图片描述
TiDB基础的体系架构中有4大组件

  • TiDB Server:用于处理客户端的请求
  • PD:体系的大脑,存储元数据信息
  • TiKV:存储数据
  • TiFlash:用于数据分析(非必要组件)

二、TiDB Server

在这里插入图片描述

  • 处理客户端的连接
  • SQL语句的解析和编译
  • 关系型数据结构与KV数据结构的转换
  • SQL语句的执行
  • DDL语句执行
  • 垃圾回收(GC清除历史版本)
基础功能模块

Protocol Layer:主要用于连接协议、身份验证等。
Parse:词法分析、语法分析
Compile:逻辑优化、物理优化
Executor:执行计划
这几部分的整体逻辑还是非常清晰的,基本和传统关系型数据库模型相同。

MVCC版本回收功能模块

GC:垃圾回收、定时清理过期数据上的锁信息和历史版本数据。
后期讲到TiDB分布式事务的时候会详细说明。

在线DDL功能模块

schema load:记录并同步各个节点的元信息
worker:负责读取队列并执行
TiDB中DDL的执行流程是:
客户端提交DDL语句->TiDB Server将DDL发送到TiKV队列中->workers模块读取队列消息并执行
这里有两个细节:

  • 1、TiDB会将DDL队列分为三种,非加索引语句、加索引语句、执行过的语句
  • 2、并不是每个TiDB Server节点都能执行DDL,只有被设置为owner的节点才行

三、TiKV

  • 实现数据持久化
  • 保证副本的强一致性和高可用性
  • MVCC多版本并发控制
  • 提供分布式事务支持
  • 实现Coprocessor(算子下推)

其实TiKV底层真正存储数据的是rocksdb。rocksdb是一款高性能的kv数据库,有完善的持久化机制。当然这里不是说TiDB Server将关系型数据转为KV型数据后就直接丢进了rocksdb,其中间过程涉及到transaction,mvcc,raft等多个逻辑结构。

四、PD

在这里插入图片描述

  • 存储整个集群TiKV的元数据
  • 分配全局ID和事务id
  • 生成全局时间戳TSO
  • 收集集群信息进行调度
  • 提供TiDB Dashboard服务

PD就相当于TiDB的大脑,可以理解为存储了整个集群的数据字典(但不是数据结构,而是数据位置),同时还负责生成全局时间戳,该时间戳也直接作用于TiDB的分布式事务。

五、TiFlash

在这里插入图片描述

  • 异步复制实现最终一致性
  • 列式存储提高分析查询效率
  • 实现业务隔离
  • 支持智能选择

TiFlash不属于TiDB最基础组件,是否需要部署TiFlash完全由业务需求决定。
个人认为TiFlash存在的意义是为了支持“TiDB是一款支持HTAP的数据库”这一概念,说白了,就目前数据库的发展阶段下,任何数据库在精准度、实时性、大数据只能满足其2,所谓的都满足大多也都是通过原生“挂件”来实现,例如Oracle、PG等亦是如此。
说回TiFlash,是TiDB原生的列式存储,其属于TiKV的副本,当有大数据统计计算类的SQL时,TiDB Server会自动判断是否去TiFlash节点进行计算。

彩蛋

在这里插入图片描述
TiDB官方简介中说到“TiDB 是 PingCAP 公司受 Google Spanner / F1 论文启发而设计的开源分布式 NewSQL 数据库。”,不过猜测TiDB多少也借鉴了Mongodb-sharding的模型(MongoDB于2010年8月发布了1.6版本,该版本引入了sharding特性)。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

kvm--安装启动

前期 使用vmware workstation 时 安装kvm yum install qemu-kvm qemu-kvm-tools libvirt libvirt-client virt-manager virt-install -y systemctl enable --now libvirtd

【数据结构】二叉树运用及相关例题

文章目录 前言查第K层的节点个数判断该二叉树是否为完全二叉树例题一 - Leetcode - 226反转二叉树例题一 - Leetcode - 110平衡二叉树 前言 在笔者的前几篇篇博客中介绍了二叉树的基本概念及基本实现方法,有兴趣的朋友自己移步看看。 这篇文章主要介绍一下二叉树的…

使用cad绘制一个螺旋输送机

1、第一步,绘制一个矩形 2、使用绘图中的样条线拟合曲线,绘制螺旋线。 绘制时使用上下辅助线、阵列工具绘制多个竖线保证样条线顶点在同一高度。 3、调整矩形右侧的两个顶点,使其变形。 矩形1和矩形2连接时,使用blend命令&#…

Nginx(openresty) 开启目录浏览 以及进行美化配置

1 nginx 安装 可以参考:Nginx(openresty) 通过lua结合Web前端 实现图片,文件,视频等静态资源 访问权限验证,进行鉴权 ,提高安全性-CSDN博客 2 开启目录浏览 location /file{alias /data/www/; #指定目录所在路径autoindex on; …

2024-简单点-opencv图像处理实时可视化桌面程序

需求: 图片预处理的时候 想用常用的图像处理函数处理看看效果,但是每次都要写可视化程序,很麻烦。 于是自己写了一个可视化程序,可以调整滑块然后实时可视化 加功能也很好加,只要写个处理函数就可以 界面如此&#…

Window系统安装Docker

因为docker只适合在liunx系统上运行,如果在window上安装的话,就需要开启window的虚拟化,打开控制面板,点击程序,在程序和功能中可以看到启动和关闭window功能,点开后,找到Hyper-V,Wi…

AI 加持下的 DevOps 革新:提升软件开发和运维效率的未来策略

在数字化转型的浪潮中,DevOps 已成为提升软件开发和运维效率的关键策略。而随着人工智能(AI)技术的飞速发展,DevOps 正迎来全新的革新机遇。本文将深入探讨 AI 如何赋能 DevOps,优化软件开发流程,增强运维自动化水平,从而加速企业的数字化转型进程。我们将分析 AI 在需求管理、…

基础—SQL—DQL(数据查询语言)案例练习

一、需求 0、emp 表的初始数据 1、查询年龄为20,21,22,23岁的员工信息。 SELECT * FROM emp WHERE gender女AND age IN(20,21,22,23); 2、查询性别为男,并且年龄在20-40岁(含)以内的姓名为三个字的员工。 SELECT * FROM emp WHERE gender男 AND age BETWEEN 20 AND …

STL:copy简介

STL:copy STL算法&#xff1a;copy std::copy()函数使用 std::copy 函数在 中声明&#xff0c;属于变易算法(Modifying sequence operations)&#xff0c;主要用于实现序列数据的复制 template <class InputIterator, class OutputIterator>OutputIterator copy (InputI…

2024年度CCF-阿里云瑶池科研基金正式发布

2024年度CCF-阿里云瑶池科研基金正式发布 截止时间&#xff1a;2024年7月1日24:00&#xff08;北京时间&#xff09; 欢迎CCF会员积极申报 “CCF-阿里云瑶池科研基金”由CCF与阿里云计算有限公司于2024年联合设立&#xff0c;专注于数据库领域&#xff0c;旨在为领域学者提供…

KT6368A双模蓝牙芯片上电到正常发送AT指令或指令复位需要多久

一、简介 KT6368A芯片上电到正常发送AT指令&#xff0c;或者开启蓝牙广播被搜索到&#xff0c;或者指令复位需要多久等等系列问题总结 详细描述 其实这些问题归结到一起&#xff0c;就还是一个问题&#xff0c;芯片上电需要多久的时间 在另外一份文档里面&#xff0c;是有描…

闽盾杯 2021 DNS协议分析

今年CISCN的Tough DNS 的前戏就是DNS协议分析 直接可以查找到flag的base64形式Zmxh 发现就是请求的dnslog 携带的数据 过滤器就是 dns tshark -r dns.pcapng -T json -Y "dns" >1.json 字段选择 dns.qry.name tshark -r dns.pcapng -T json -Y "dns"…

鸿蒙开发接口媒体:【@ohos.multimedia.medialibrary (媒体库管理)】

媒体库管理 说明&#xff1a; 该组件从API Version 6开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 发前请熟悉鸿蒙开发指导文档&#xff1a; gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 导入模块 …

改进YOLOv8系列:构建新型单头transformer模块,加入到骨干尾部

改进YOLOv8系列:构建新型单头transformer模块,加入到骨干尾部 需要修改的代码self attention代码创建yaml文件测试是否创建成功本文提供了改进 YOLOv8注意力系列包含不同的注意力机制以及多种加入方式,在本文中具有完整的代码和包含多种更有效加入YOLOv8中的yaml结构,读者…

as keyof GlobalStore

解释 as keyof GlobalStore 在 TypeScript 中&#xff0c;as keyof GlobalStore 是一种类型断言语法。它告诉 TypeScript&#xff0c;返回的值是一个特定类型的值&#xff0c;这里是 GlobalStore 类型的键。这在编译时有助于确保类型安全。 关键点&#xff1a; 类型断言&…

JVM哪些区域可能出现内存溢出,哪些地方需要GC?

GC顾名思义也就是垃圾回收&#xff0c;有人的地方就有江湖&#xff0c;那有数据的地方也理应有垃圾回收&#xff0c;所以思考一下&#xff0c;沿着之前提到过的JVM内存分区&#xff0c;堆&#xff0c;栈&#xff0c;程序计数器&#xff0c;方法区 堆、栈、方法区…

2024.5.30学习记录

1 面经复习 LRU 手写 等 2 代码随想录二刷 3 rosebush完成 upload组件 初步完成 form组件

Stable Diffusion|背景替换只需要两分钟!

今天分享一个用Stable Diffusion换背景的小教程。在以往为产品或照片更换背景时&#xff0c;我们通常需要先仔细地将主体内容抠出&#xff0c;再利用PS或其他图像处理工具将主体与新背景进行融合。这个过程往往需要花费大量的时间和精力。这个方法虽然可行&#xff0c;但不够高…

linux同步搭建多台服务器

前言&#xff1a; 如果在安装服务器的过程中&#xff0c;需要安装多台服务器&#xff0c;同样的配置&#xff0c;同样的步骤就可以使用此方法&#xff0c;搭建集群同步安装 1.配置网卡 想要两台机器进行同步的话&#xff0c;必须网段是同样的&#xff0c;保持在同一网段并且能…

在Android Studio中使用谷歌Gemini代码助手

今天在做android开发的时候&#xff0c;一个项目使用到了gradle8.0&#xff0c;但是我的Android Studuio根本不支持&#xff0c;无可奈何只能从小蜜蜂版本升级了水母 | 2023.3.1版本&#xff0c;但突然发现AS已经集成了Gemini助手。 首先我们需要下载这个版本的&#xff1a; h…