tidb存储基本原理

2023-10-29

tidb是什么?

tidb是分布式关系型数据库;需要从两个方面来理解tidb:

  1. 分布式数据库;
  2. 关系型数据库。

什么是分布式系统?

集中式系统,计算和存储在同一个节点上;

分布式系统,计算和存储位于不同的节点上;分布式系统把需要进行大量计算的工程数据分割成若干个小块,有多台计算机分别进行计算和存储,然后将结果统一合并到数据结论的科学;本质上就是进行数据存储与计算的分治;

分布式系统较集中式系统,需要做哪些额外工作?

故障率会更高;计算、存储需要冗余;

需要考虑节点之间的协调;调度中心;

  1. 计算与存储分离;
  2. 计算与存储分治;
  3. 调度中心,节点之间协调。

分布式系统需要解决的问题

  1. 如何最大程度实现分治;
  2. 如何实现全局的一致性;需要统一的时钟;tso, timestamp oracle;
  3. 如何实现故障与部分失效的容错?水平扩容;数据强一致性和高可用;
  4. 如何应对不可靠的网络与网络分区;异地多活;

CAP原则

一致性,all nodes see the same data at the same time;

可用性,reads and writes always succeed; 服务在正常响应时间内的可用;

分区容错性,节点或者网络分区故障时,依然能够提供一致性或者可用性服务。

redis cluster满足AP原则;

tidb满足CA原则,强一致性和高可用。

关系型数据库需要关心哪些问题?

关系型数据库的关键在于一定要具备事务;Nosql数据库无法支持完备的事务;

事物

事务的前提是并发;

事物的本质是并发控制的单元,是用户定义的一个操作序列;这些操作要么都做,要么都不做,是一个不可分割的工作单位;

目的是为了保证数据库系统始终处于完整性和正确性的状态。

ACID特性

  • 原子性

事务包含的全部操作是一个不可分割的整体;要么都执行,要么都不执行;

  • 一致性

事务的前后,所有的数据都保持一个一致的状态;不能违反数据的一致性检测;

  • 隔离性

避免串行化,使用MVCC和锁,一定程度破坏一致性;tidb使用snapshot isolation隔离级别,不存在幻读问题,但引入写偏移问题;

  • 持久性

分布式数据库除了要进行本地数据存储,还要考虑网络备份。

tidb解决了什么问题?

Mycat

tidb最初是用来替换数据库扩容Mycat这种解决方案的。

img

Mycat解决的问题:

  1. 读写分离;
  2. 分库分表;mysql计算和存储没有分离,要进行横向扩展,只能分库分表;500万数据默认是3层B+数,大于500万分裂为4层,所以需要进行分表;分库,每个db对应单独的线程数量和存储指标;分库分表,能够提升整体性能

Mycat proxy做了哪些事情?

  1. 数据汇总;数据在多个数据库里面,proxy进行数据汇总;
  2. 分布式事务 xa;分布式事务通常使用二阶段提交,会有中心节点,中心节点会成为整个系统的瓶颈;Mycat会有一个事务的最大值,同时能处理的事务条数;tidb使用一种去中心化的事务模型;

Mycat解决方案非常复杂,对运维来说增加节点、删除节点,数据迁移和数据管理非常麻烦;对于程序来说业务拆分也非常麻烦。

tidb解决问题

  1. 大量数据下的高并发读写问题,尤其是写;线性水平扩展的方式,对写友好;使用rocksdb,lsm-tree,磁盘利用率高,顺序写;
  2. 强一致、高可用,保证数据不丢不错;副本强一致,在多个物理节点中存储;使用raft一致性算法实现;
  3. 兼容mysql 5.7的协议;对于我们的程序,只需要更换端口,连接tidb;支持分布式事务,去中心化分布式事务;
  4. HTAP, Hybrid Transactional and Analytical Processing; OLTP, 业务处理,数据量大了之后,传统的解决方案是分库分表,Macat这种解决方案;OLAP,业务分析,数据量大了之后,转向大数据处理elk,hadoop,hbase,mapreduce;tidb将OLTP和OLAP融合到一起,同一个数据库,既可以做OLTP,又可以做OLAP;OLTP通过分布式事务实现;OLAP,通过并行计算MPP,物化视图,列式存储Tiflash,partition bitmap实现;

tidb整体架构

  • 由多模块组成,各模块相互通信,组成完整的tidb系统;
  • 前端stateless、后端stateful(raft);

img

img

TiDB server

img

客户端连接tidb server;tidb server负责计算,不存储数据,是无状态的;可以启动多个tidb server,可以再前面加一层haproxy,进行负载均衡;statistics数据来源于tikv,tikv有并行计算MPP;

PD(Placement Driver) server

存储集群的元数据,对集群进行管理;存储每个tikv节点实时的数据分布情况(如节点的region范围)和集群的整体拓扑结构;提供tso, timestamp oracle,统一的事务id;

TiKV server

负责存储数据;基于region;有并行计算功能;

img

TiFlash

TiFlash是一类特殊的存储节点;列式存储,只存储某些列;用于OLAP,数据分析,对某一列数据进行分析;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

tidb存储基本原理 的相关文章

  • 没有可用的符号表信息

    我正在测试第三方的库 它崩溃了 当我想查看崩溃的原因时 我的 gdb 告诉我没有可用的调试符号 Program received signal SIGSEGV Segmentation fault Switching to Thread 0
  • 如何使用 sed 仅删除双空行?

    我找到了这个问题和答案 https stackoverflow com questions 4651591 howto use sed to remove only triple empty lines关于如何删除三重空行 但是 我只需要对
  • arm-linux-gnueabi 编译器选项

    我在用 ARM Linux gnueabi gcc在 Linux 中为 ARM 处理器编译 C 程序 但是 我不确定它编译的默认 ARM 模式是什么 例如 对于 C 代码 test c unsigned int main return 0x
  • SONAR - 使用 Cobertura 测量代码覆盖率

    我正在使用声纳来测量代码质量 我不知道的一件事是使用 Cobertura 测量代码覆盖率的步骤 我按照以下步骤操作http cobertura sourceforge net anttaskreference html http cober
  • 信号处理程序有单独的堆栈吗?

    信号处理程序是否有单独的堆栈 就像每个线程都有单独的堆栈一样 这是在 Linux C 环境中 来自 Linux 手册页signal 7 http kernel org doc man pages online pages man7 sign
  • PHP 致命错误:未找到“MongoClient”类

    我有一个使用 Apache 的网站 代码如下 当我尝试访问它时 我在 error log 中收到错误 PHP Fatal Error Class MongoClient not found 以下是可能错误的设置 但我认为没有错误 php i
  • ansible 重新启动 2.1.1.0 失败

    我一直在尝试创建一个非常简单的 Ansible 剧本 它将重新启动服务器并等待它回来 我过去在 Ansible 1 9 上有一个可以运行的 但我最近升级到 2 1 1 0 并且失败了 我正在重新启动的主机名为 idm IP 为 192 16
  • 在 Mac OS X 上构建 Linux 内核

    我正在做一个修改Linux内核的项目 我有一台桌面 Linux 机器 在上面构建内核没有问题 不过 我要去旅行 我想在途中工作 我只有一台 MacBook 当我尝试构建 Linux 内核时 它抱怨说elf h was not found 我
  • 如何修复“iptables:没有该名称的链/目标/匹配”?

    我在我的 Linux 嵌入式系统上构建并安装了 iptables 如果我列出所有规则 则一切正常 iptables list Chain INPUT policy ACCEPT target prot opt source destinat
  • Unix 命令列出包含字符串但*不*包含另一个字符串的文件

    如何递归查看包含一个字符串且不包含另一个字符串的文件列表 另外 我的意思是评估文件的文本 而不是文件名 结论 根据评论 我最终使用了 find name html exec grep lR base maps xargs grep L ba
  • bluetoothctl 到 hcitool 等效命令

    在 Linux 中 我曾经使用 hidd connect mmac 来连接 BT 设备 但自 Bluez5 以来 这种情况已经消失了 我可以使用 bluetoothctl 手动建立连接 但我需要从我的应用程序使用这些命令 并且使用 blue
  • 无法加载 JavaHL 库。- linux/eclipse

    在尝试安装 Subversion 插件时 当 Eclipse 启动时出现此错误 Failed to load JavaHL Library These are the errors that were encountered no libs
  • 应用程序无缘无故地被杀死。怀疑 BSS 高。如何调试呢?

    我已经在CentOs6 6中成功运行我的应用程序 最近 硬件 主板和内存 更新了 我的应用程序现在毫无理由地被杀死 root localhost PktBlaster PktBlaster Killed 文件和 ldd 输出 root lo
  • 如何在 Linux 中编写文本模式 GUI? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 当我编写脚本 程序时 我经常想弹出一个简单的文本 gui 来提示输入 我该怎么做 例如 来自 Shel
  • nginx 上的多个网站和可用网站

    通过 nginx 的基本安装 您的sites available文件夹只有一个文件 default 怎么样sites available文件夹的工作原理以及如何使用它来托管多个 单独的 网站 只是为了添加另一种方法 您可以为您托管的每个虚拟
  • gdb查找行号的内存地址

    假设我已将 gdb 附加到一个进程 并且在其内存布局中有一个文件和行号 我想要其内存地址 如何获取文件x中第n行的内存地址 这是在 Linux x86 上 gdb info line test c 56 Line 56 of test c
  • 域套接字“sendto”遇到“errno 111,连接被拒绝”

    我正在使用域套接字从另一个进程获取值 就像 A 从 B 获取值一样 它可以运行几个月 但最近 A 向 B 发送消息时偶尔会失败 出现 errno 111 连接被拒绝 我检查了B域套接字绑定文件 它是存在的 我也在另一台机器上做了一些测试 效
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • arm64和armhf有什么区别?

    Raspberry Pi Type 3 具有 64 位 CPU 但其架构不是arm64 but armhf 有什么区别arm64 and armhf armhf代表 arm hard float 是给定的名称Debian 端口 https

随机推荐

  • winCE中采用DMA传输数据的方法

    转载请标明是引用于 http blog csdn net chenyujing1234 对于文章中有什么意见或是需要代码的可以留言联系我 1 DMA入口 DDM控制器能服务的外围设备配置信息的结构体 typedef struct BOOL
  • 单目相机测距

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 单目相机测距 一 理论 1 像素坐标系 1 相机坐标系 1 转换到大地坐标系 二 代码实现 1 使用matlab找到相机参数 2 使用opencv进行测距 总结 一 理论 先
  • Windows 环境下 Python3 安装 cryptography

    操作系统 win7 语言 Python 3 6 包 cryptography 3 4 7 因为工作需要 需要安装python的 cryptography包 但是屡次安装失败 特总结安装过程 以供大家借鉴 1 安装Rust 初次安装 cryp
  • 数字化变革的难点和解决方式

    了解了数字化企业的特征 还不代表企业能转型成功 从互联网1 0时期开始至今 中国传统 企业数字化转型十余年 整体效果并不理想 因为在推动转型过程中面临各种由于技能不足 和机制不足交织在一起形成的固有难点 转型推进难点 1 定义不清 这是企业
  • Sqlalchemy filter与filter_by查询语法

    摘要 https www cnblogs com kaerxifa p 13391722 html 摘要2 https blog csdn net gymaisyl article details 96601798 filter与filet
  • java部署和调用智能合约

    java部署和调用智能合约 下载安装npm和solc 1 安装gcc yum install gcc gcc c 2 安装node wget https npm taobao org mirrors node v10 14 1 node v
  • java中删除文件/文件夹的3种方法

    1 通过io删除文件 通过递归逐层删除文件信息 param filePath public static void deleteFileByIO String filePath File file new File filePath Fil
  • insert oracle用法,insert into select的实际用法,insertselect

    insert into select的实际用法 insertselect INSERT INTO SELECT语句 语句形式为 Insert into Table2 field1 field2 select value1 value2 fr
  • 【Linux】进程信号

    1 理解信号 1 信号 能够识别并做出行为的一种指令 2 信号来临的时候不一定能够立即对信号做出处理 但是并不影响信号的产生 3 信号来临 gt 时间窗口 gt gt 被处理 结果是要处理的但是需要时间 4 对待信号的处理方法 1 默认2
  • vue父组件向子组件传值

    子组件
  • JAVA IO流文本文件读入方法(read方法读入数据)

    在字符流通常都使用read方法读入数据 而read方法一般都两种调用方式 首先先创建一个文件 如Hello txt 里面输入HelloWorld 第一种是使用read的空参调用 read read 从输入流中读入一个字符 若当前位置无数据则
  • 进制转换方法

    常用计算机各进制的含义和相互之间的简单转换方法 文章目录 常用计算机各进制的含义和相互之间的简单转换方法 一 理解进制含义 1 二进制 2 八进制 3 十进制 4 十六进制 二 进制之间转换 1 1二进制转十进制 1 2十进制转二进制 除法
  • java--基础--17.7--线程--内存模型与线程

    java 基础 17 7 线程 内存模型与线程 1 内存模型 1 1 主内存和工作内存之间的交互 1 2 对于 volatile 型变量的特殊规则 关键字 volatile 是 Java 虚拟机提供的最轻量级的同步机制 一个变量被定义为 v
  • 微信小程序设置背景图铺满顶部

    由于微信小程序自带顶部导航栏 导致我们设置背景图时总是无法铺满顶部 其实想要铺满顶部只需要改变一个属性即可 将navigationStyle的默认属性修改为custom 在微信小程序需要设置背景图的文件下的 json文件中设置
  • VxWorks的环境配置

    转载请标记出处 http blog csdn net zgh1988 article details 7994538 1 准备工作 1 VMWare 2 一台安装Windows XP或Window 7系统的PC机 3 Tornado 2 2
  • 进阶训练技巧提升模型性能

    在深度学习的世界中 训练技巧的重要性不言而喻 进阶训练技巧 包括损失函数 学习率 模型微调和半精度训练 更是对提升模型性能和准确率有着关键作用 下面我们将对这些技巧进行详细的探讨 一 损失函数 Loss Function 损失函数 或者叫作
  • 遍历map

    keySet是键的集合 Set里面的类型即key的类型 entrySet是 键 值 对的集合 Set里面的类型是Map Entry 1 keySet Map map new HashMap Iterator it map keySet it
  • 代码审计之JAVA代码审计洞态IAST系统以及SecExample靶场

    目录 2 JAVA系列代码审计 2 1 工具介绍 2 2 SecExample靶场安装 2 3 洞态IAST安装 2 3 洞态IAST使用 2 JAVA系列代码审计 之前我们都是采用代码审计工具对PHP代码进行审计 但是在实际的工作中对于从
  • unipush2.0教程

    解释一下名词 透传消息 无论手机app 是否在运行 打开了 还是清了后台 关闭 都可以收到消息 通知消息 只能app打开了 才能收到 1 开通unipush 2 点击上图的unipush2 0下面的配置 进入以下页面 选择平台 将其余项配置
  • tidb存储基本原理

    tidb是什么 tidb是分布式关系型数据库 需要从两个方面来理解tidb 分布式数据库 关系型数据库 什么是分布式系统 集中式系统 计算和存储在同一个节点上 分布式系统 计算和存储位于不同的节点上 分布式系统把需要进行大量计算的工程数据分