TiDB-从0到1-体系结构

在这里插入图片描述

TiDB从0到1系列

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

一、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特性)。

在这里插入图片描述

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

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

相关文章

【机器学习】【深度学习】批量归一化(Batch Normalization)

概念简介 归一化指的是将数据缩放到一个固定范围内,通常是 [0, 1],而标准化是使得数据符合标准正态分布。归一化的作用是使不同特征具有相同的尺度,从而使模型训练更加稳定和快速,尤其是对于使用梯度下降法的算法。而标准化的作用…

软件功能测试的类型和流程分享

在现代社会,软件已经成为人们生活中不可或缺的一部分,而在软件的开发过程中,功能测试是不可或缺的环节。软件功能测试指的是对软件系统的功能进行检查和验证,以确保软件在各种情况下能够正常运行,并且能够按照用户需求…

2024年国内最全面最前沿人工智能理论和实践资料

引言 【导读】2024第11届全球互联网架构大会圆满结束。会议邀请了100余位行业内的领军人物和革新者,大会通过主题演讲、实践案例分享,以及前瞻性的技术讨论,探索AI技术的边界。 近日,备受瞩目的第十一届全球互联网架构大会&#x…

为什么会有websocket(由来)

一、HTTP 协议的缺点和解决方案 1、HTTP 协议的缺点和解决方案 用户在使用淘宝、京东这样的网站的时候,每当点击一个按钮其实就是发送一个http请求。那我们先来回顾一下http请求的请求方式。 一个完整的http请求是被分为request请求节点和response响应阶段的&…

iOS--工厂设计模式

iOS--工厂设计模式 设计模式的概念和意义类族模式UIButton作为类族模式的例子总结 三种工厂设计模式简单工厂模式(Simple Factory Pattern):代码实例 工厂方法模式(Factory Method Pattern):代码实例 抽象工…

C语言学习笔记--C语言的实型数据

实型常量的表示方法(掌握) 实型也称为浮点型。实型常量也称为实数或者浮点数。在C语言中,实数只采用十进制。它有两种形式:十进制小数形式,指数形式。 1十进制数形式:由数码0~9和小数点组成。 例如&…

新建一个esri_sde_gists的服务

需求 新建一个esri_sde_gists的服务 步骤: 需要拷贝ora11gexe目标为新的目录,例如ora11gexe_gists 运行drivers找到etc下面的services文件,添加端口5152: 检查sde的library并创建: CREATE or REPLACE LIBRARY ST_S…

黑马es0-1实现自动补全功能

1、安装分词器 上github上找人做好的分词器,放到es-plugin数据卷里,然后重启es即可 2、自定义分词器 elasticsearch中分词器(analyzer)的组成包含三部分: character filters:在tokenizer之前对文本进行处理。例如删除字符、替换字符 …

如何彻底卸载sql sever2022

目录 背景过程1、关闭sql sever服务2、打开控制面板,卸载SQL Sever3、手动删除 SQL Server 遗留文件4、清空注册表5、重启计算机以确保所有更改生效。 总结 背景 重装了电脑,安装sqlServer,一直报错,不成功,所以每次安…

论文阅读 - TIME-LLM: TIME SERIES FORECASTING BY REPROGRAMMING LARGE LANGUAGE MODELS

论文链接: https://arxiv.org/abs/2310.01728 目录 摘要 1 INTRODUCTION 2 RELATED WORK 3 METHODOLOGY 3.1 MODEL STRUCTURE 4 MAIN RESULTS 4.1 长期预测 4.2 短期预测 4.3 FEW-SHOT FORECASTING 5 CONCLUSION AND FUTURE WORK 摘要 动机: 时…

设计模式19——观察者模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用,主要是下面的UML图可以起到大作用,在你学习过一遍以后可能会遗忘,忘记了不要紧,只要看一眼UML图就能想起来了。同时也请大家多多指教。 观察者模式(Observ…

C++学习/复习8--STL简介/六大组件/缺陷

一、STL简介 二、六大组件 三、面试题 四、STL缺陷

读后感:《SQL数据分析实战》运营SQL实用手册

学习SQL,先有用起来,有了使用价值,之后才是去了解它的原理,让使用更加顺畅。 在大部分业务场景中,通过SQL可以快速的实现数据处理与统计。《SQL数据分析实战》区别于其他工具书,它并没有介绍SQL是什么&…

视图【mysql数据库】

目录 一、视图的创建、查看、修改、删除 二、cascaded、local检查选项 cascaded和local的区别 三、视图的更新 四、视图的作用 一、视图的创建、查看、修改、删除 二、cascaded、local检查选项 上面的几句SQL中,我们虽然给视图插入了id 30的数据,但…

【vue-4】遍历数组或对象v-for

1、遍历数组 <ul><li v-for"(value,index) in web.number">index>{{index}}:value>{{value}}</li> </ul> 知识点&#xff1a; <ul>标签定义无序列表 举例&#xff1a; <ul><li>Coffee</li><li>Tea…

Windows UWP ContentDialog去掉阴影(全透明)的实现

一、前言 在WIndows开发中&#xff0c;使用UWP&#xff08;Universal WIndows&#xff09;项目开发过程中&#xff0c;使用ContentDialog 的过程中&#xff0c;我们可能并不满足现有的样式&#xff0c;这时就需要自定义样式。笔者在自定义样式过程中&#xff0c;遇到了一个难题…

使用prometheus监测MySQL主从同步状态方案

说明&#xff1a;本文介绍如何使用prometheus、alertmanager监测MySQL主从&#xff0c;当从节点中断同步时&#xff0c;发送邮箱报警&#xff0c;并使用grafana将数据视图化。 结构图如下&#xff1a; 安装 &#xff08;1&#xff09;安装应用 首先&#xff0c;来安装promet…

【Linux】线程安全及锁的使用

文章目录 前言一、锁1.定义一个锁变量2.pthread_mutex_init3.pthread_mutex_destroy4.pthread_mutex_lock/pthread_mutex_unlock5.静态变量锁和全局变量锁的初始化 二、问题描述及锁的运用三、RAII风格的锁 前言 临界资源: 在多个线程或进程间共享的资源. 临界区: 代码中访问临…

5 分钟快速上手图形验证码,防止接口被恶意刷量!

5 分钟快速上手图形验证码&#xff0c;防止接口被恶意刷量&#xff01; 大家好&#xff0c;我是程序员小白条&#xff0c;今天来给大家介绍一个快速实现图形验证码的优秀框架 AJ-Captcha。 需求分析 如果注册接口没有验证码这种类型的限制&#xff0c;很容易会被刷量&#x…

protobuf —— 快速上手

protobuf —— 快速上手 创建 .proto 文件添加注释指定proto3语法package 声明符定义消息&#xff08;message&#xff09; 定义消息字段字段定义基本格式字段名称命名规范字段类型字段唯一编号示例 转换关系示例&#xff1a;增加姓名和年龄字段 字段唯一编号字段编号范围编码效…