【数据存储】TIDB和MySQL的区别

1.TIDB和MySQL对比

对比内容MySQLTiDB
架构设计一个传统的单机数据库系统,采用主从复制和分区表等方式来实现水平扩展一个分布式的 NewSQL 数据库,采用分布式存储和分布式事务等技术,支持水平扩展和高可用性
事务支持 InnoDB 存储引擎来支持事务处理,支持 ACID 特性支持 ACID 特性,并在分布式环境下提供了分布式事务的支持
水平扩展水平扩展能力较弱,通常通过主从复制和分区表等方式进行扩展通过简单地增加节点来实现水平扩展,支持自动数据分片和负载均衡,适合大规模数据存储和处理
一致性一致性依赖于配置和复制机制,可能存在数据同步延迟或数据不一致的情况基于 Raft 算法实现了多副本之间的强一致性,确保数据的一致性和可靠性
SQL兼容性关系型数据库的代表,支持标准的 SQL 语法兼容 MySQL 协议和 SQL 语法,使得迁移和使用更加方便
自动化运维TiDB Ansible 工具和 TiDB Lightning 等工具,支持快速部署、备份恢复和在线迁移等功能,简化了运维管理借助第三方工具或脚本来实现自动化运维
存储引擎支持多种数据存储引擎,如InnoDB、MyISAM等使用TiKV作为默认的数据存储引擎,TiKV是一种基于RocksDB的分布式键值存储引擎

小结:TiDB 是一种分布式的 NewSQL 数据库,具有水平扩展、高可用性和分布式事务支持等特点,适合处理大规模数据和高并发的场景。而 MySQL 则是一种传统的关系型数据库系统,适用于中小型应用和对事务一致性要求不是特别高的场景。选择使用哪种数据库取决于具体的业务需求和技术架构

2.什么是TiKV

TiKV 是一个分布式事务型的键值数据库,提供了满足 ACID 约束的分布式事务接口,并且通过 Raft 协议 保证了多副本数据一致性以及高可用。TiKV 作为 TiDB 的存储层,为用户写入 TiDB 的数据提供了持久化以及读写服务,同时还存储了 TiDB 的统计信息数据。

2.1 TiKV整体架构

与传统的整节点备份方式不同,TiKV 参考 Spanner 设计了 multi-raft-group 的副本机制。将数据按照 key 的范围划分成大致相等的切片(下文统称为 Region),每一个切片会有多个副本(通常是 3 个),其中一个副本是 Leader,提供读写服务。TiKV 通过 PD 对这些 Region 以及副本进行调度,以保证数据和读写负载都均匀地分散在各个 TiKV 上,这样的设计保证了整个集群资源的充分利用并且可以随着机器数量的增加水平扩展。

2.2 Region 与 RocksDB

虽然 TiKV 将数据按照范围切割成了多个 Region,但是同一个节点的所有 Region 数据仍然是不加区分地存储于同一个 RocksDB 实例上,而用于 Raft 协议复制所需要的日志则存储于另一个 RocksDB 实例。这样设计的原因是因为随机 I/O 的性能远低于顺序 I/O,所以 TiKV 使用同一个 RocksDB 实例来存储这些数据,以便不同 Region 的写入可以合并在一次 I/O 中。

2.3Region 与 Raft 协议

Region 与副本之间通过 Raft 协议来维持数据一致性,任何写请求都只能在 Leader 上写入,并且需要写入多数副本后(默认配置为 3 副本,即所有请求必须至少写入两个副本成功)才会返回客户端写入成功。

当某个 Region 的大小超过一定限制(默认是 144MB)后,TiKV 会将它分裂为两个或者更多个 Region,以保证各个 Region 的大小是大致接近的,这样更有利于 PD 进行调度决策。同样,当某个 Region 因为大量的删除请求导致 Region 的大小变得更小时,TiKV 会将比较小的两个相邻 Region 合并为一个。

当 PD 需要把某个 Region 的一个副本从一个 TiKV 节点调度到另一个上面时,PD 会先为这个 Raft Group 在目标节点上增加一个 Learner 副本(虽然会复制 Leader 的数据,但是不会计入写请求的多数副本中)。当这个 Learner 副本的进度大致追上 Leader 副本时,Leader 会将它变更为 Follower,之后再移除操作节点的 Follower 副本,这样就完成了 Region 副本的一次调度。

Leader 副本的调度原理也类似,不过需要在目标节点的 Learner 副本变为 Follower 副本后,再执行一次 Leader Transfer,让该 Follower 主动发起一次选举成为新 Leader,之后新 Leader 负责删除旧 Leader 这个副本。

2.4 分布式事务

TiKV 支持分布式事务,用户(或者 TiDB)可以一次性写入多个 key-value 而不必关心这些 key-value 是否处于同一个数据切片 (Region) 上,TiKV 通过两阶段提交保证了这些读写请求的 ACID 约束,详见 TiDB 乐观事务模型。

2.5 计算加速

TiKV 通过协处理器 (Coprocessor) 可以为 TiDB 分担一部分计算:TiDB 会将可以由存储层分担的计算下推。能否下推取决于 TiKV 是否可以支持相关下推。计算单元仍然是以 Region 为单位,即 TiKV 的一个 Coprocessor 计算请求中不会计算超过一个 Region 的数据。

参考:TiKV 简介 | PingCAP 归档文档站

3.什么是RocksDB

RocksDB是一个高性能、可扩展、嵌入式、持久化、可靠、易用和可定制的键值存储库。它采用LSM树数据结构,支持高吞吐量的写入和快速的范围查询,可被嵌入到应用程序中,实现持久化存储,支持水平扩展,可以在多台服务器上部署,实现集群化存储,具有高度的可靠性和稳定性,易于使用并可以根据需求进行定制和优化。它广泛应用于互联网公司和数据密集型应用中。RocksDB使用了许多技术来实现其高性能和可靠性。

3.1 RocksDB主要的技术点

3.1.2 LSM树 

 LSM树(Log-Structured Merge Tree)是一种基于日志结构的数据结构,能够高效地存储和更新键值数据。它将数据分为多个层,每一层都是一个有序的键值存储文件,其中较旧的数据位于较低的层,较新的数据位于较高的层。当数据被写入时,它首先被写入到一个内存中的结构,称为内存表(MemTable),然后在后台异步地将内存表与磁盘上的某个层合并,最终生成新的文件。这种设计使得RocksDB能够高效地处理大量写入操作,并支持快速的范围查询。

3.1.2 压缩

RocksDB使用了多种压缩算法来压缩数据文件,减小了磁盘空间的占用,提高了存储效率。压缩算法包括LZ4、Snappy、Zlib等。

3.1.3 并发控制

RocksDB使用多种技术来实现并发控制,以支持高并发读写操作。例如,它使用锁、读写锁、CAS等机制来保证多线程并发的正确性和一致性。

3.1.4 内存管理

RocksDB使用了多种技术来管理内存,以保证高效的内存使用和低延迟的响应。例如,它使用了对象池、内存池等技术来减少内存分配和释放的开销,使用了缓存技术来缓存热点数据,使用了内存映射技术来快速加载数据文件等。

3.1.5 日志系统

RocksDB使用了可插拔的日志系统,可以将日志输出到不同的目标,例如文件、控制台、网络等,以支持不同的日志需求。

3.1.6 文件格式

RocksDB使用了一种自定义的文件格式,可以高效地存储键值数据,并支持快速的数据访问和查询。这种格式将数据划分为多个块,每个块包含多个键值对,每个块都有一个索引来支持快速的查找和范围查询。

参考:深入RocksDB原理 - 知乎

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

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

相关文章

一篇文章给你讲清楚正常卷积与深度可分离卷积

文章目录 正常卷积深度可分离卷积深度卷积逐点卷积 对比代码实现查看(torch实现)结果 正常卷积 也就是我们平常用的比较普遍的卷积: 它的参数量是:112,即: ( 卷积核大小) ∗ 输入通道 ∗ 输出…

【JavaEE】_Spring MVC项目获取URL中的参数

目录 1. 单参数 2. 多参数 1. 单参数 .java文件如下: package com.example.demo.controller;import com.example.demo.Person; import org.springframework.web.bind.annotation.*;import java.util.Arrays; import java.util.List;RequestMapping("/Para&…

MFC 打开类向导中方法时提示对com组件的调用返回了错误 HRESULT E_FAIL

解决:头文件中要分类,把virtual和afx_msg等放在一起,不要交叉错开。 MFC(Microsoft Foundation Class)中的virtual关键字用于声明虚函数。虚函数是C中实现多态的一种机制,它允许派生类重新定义基类中的虚函…

FreeRtos学习笔记(12)systemView 分析任务调度情况

FreeRtos学习笔记(12)systemView 分析任务调度情况 使用stm32f429 freertosV10.5.1 systemView 3.5 keil AC5 systemView 移植 从官网下载 systemView 软件 将下面文件添加到工程中 freertos 修改 systemView 需要 FreeRTOSConfig.h 开启如下宏, …

UE小:CesiumForUnreal使用教程

联网模式(需要翻墙) 直接打开工程并点击Cesium插件图标然后点击connect to Cesium ion进行账号注册即可使用 见到如界面后点击Allow并返回UE编辑器(如果无法打开认证界面请先访问https://ion.cesium.com/并且不要关闭,再次点击co…

Fendi Club啤酒:畅享时尚的味蕾之旅

在这个追求个性与品味的时代,Fendi Club啤酒以其时尚的魅力,领着时尚潮流与味蕾的完善结合。它不仅是一款啤酒,更是一种生活态度的象征,让我们一起踏上这场畅享时尚的味蕾之旅。 Fendi Club啤酒的特别之处在于它对品质的别致追求。…

SQL映射文件

一、SQL映射的xml文件 1.1 mapper元素 二、select 三、别名与Java映射 四、resultMap 啊

专题一_双指针(2)

目录 LCR 179. 查找总价格为目标值的两个商品 解析 题解 15. 三数之和 解析 题解 18. 四数之和 解析 题解 LCR 179. 查找总价格为目标值的两个商品 LCR 179. 查找总价格为目标值的两个商品 - 力扣(LeetCode) 解析 题解 class Solution { publi…

软件架构复用相关知识总结

一、软件产品线 软件产品线是指一组软件密集型系统,它们共享一个公共的、可管理的特性集,满足某个特定市场或任务的具体需求,是以规定的方式用公共的核心资产集成开发出来的。即围绕核心资产库进行管理、复用、集成新的系统。采用产品线能够提…

前端学习-HTML基础

一、简介 1.介绍 网页就是html文件,前端编写代码->浏览器解析代码->呈现网页 谷歌浏览器Blink内核最好 2.Web标准 让网页设计排版更统一规范 结构:对网页元素进行整理和分类,html 表现:设置网页元素的板式、颜色、大小等外…

工作中总结的30个常用Linux指令,实在记不住就别硬记了,看这篇就够了

写在开头 最近发现自己记忆力严重下滑,很多sql命令,linux命令都记不住,特别是linux命令,很多命令参数很多,一段时间不用,再去使用就需要从网上重查了,很烦人,为此花了一些时间把之前…

初始化hive数据库问题记录

1、问题复现:完成了初始化hive数据库后没有看到生成的表格 2、检查后发现是NaviCat连接时主机号写错了,写成了localhost,这里修改为node01的主机号 3、修改后再次刷新就看到之前初始化后自动生成好的数据库表格了

C++之模板和可变模板参数

目录 一、为什么要定义模板 模板的优点: 二、模板的定义 三、模板的类型 3.1、函数模板 3.1.1、实例化:隐式实例化与显示实例化 3.1.2、函数模板、普通函数间的关系 3.1.2.1易错点: 3.1.2.2重载例子: 3.1.2.3优先级与执行顺序: 3.1.3、模板头文件与实现文…

vue3+threejs新手从零开发卡牌游戏(十四):调整卡组位置,添加玩家生命值HP和法力值Mana信息

由于之前的卡组位置占了玩家信息的位置,所以这里将它调整到site区域: 修改game/site/p1.vue,在site右下角添加一个卡组区域: // 初始化己方战域 const init () > {let sitePlane scene.getObjectByName("己方战域Plan…

【工具-MobaXterm】

MobaXterm ■ MobaXterm简介■ MobaXterm下载安装■ MobaXterm主要功能■ 创建SSH session■ 创建串口session■ 远程文件传输和下载■ 运行图形应用程序■ Unix 命令集(GNU/ Cygwin)工具箱功能 ■ MobaXterm配置■ 设置黑色主题■ 设置终端字体■ 右键粘贴■ 右键复制■ 文件保…

【干货】Apache DolphinScheduler2.0升级3.0版本方案

升级背景 因项目需要使用数据质量模块功能,可以为数仓提供良好的数据质量监控功能。故要对已有2.0版本升级到3.0版本以上,此次选择测试了3.0.1 和 3.1.1 两个版本,对进行同数据等任务调度暂停等操作测试,最后选择3.0.1 版本 原因…

【每日力扣】70. 爬楼梯与746. 使用最小花费爬楼梯

🔥 个人主页: 黑洞晓威 😀你不必等到非常厉害,才敢开始,你需要开始,才会变的非常厉害。 70. 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢…

Java基础入门day21

day21 思考:构造方法能否实现重写 引申出来三个问题: 一个类是否可以继承它自身 一个类是否可以继承它的同名类 构造方法能否实现重写 结论: 一个类如果继承了自己,会出现递归构造调用 一个类可以继承它的同名类,必…

ESCTF-逆向赛题WP

ESCTF_reverse题解 逆吧腻吧babypybabypolyreeasy_rere1你是个好孩子完结撒花 Q_W_Q 逆吧腻吧 下载副本后无壳,直接拖入ida分析分析函数逻辑:ida打开如下:提取出全局变量res的数据后,编写异或脚本进行解密: a[0xBF, …

matlab和stm32的安装环境。能要求与时俱进吗,en.stm32cubeprg-win64_v2-6-0.zip下载太慢了

STM32CubeMX 6.4.0 Download STM32CubeProgrammer 2.6.0 Download 版本都更新到6.10了,matlab还需要6.4,除了st.com其他地方都没有下载的,com.cn也没有。曹 还需要那么多固件安装。matlab要求制定固件位置,然后从cubemx中也指定…