Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >聊聊TiDB的那些事?

聊聊TiDB的那些事?

作者头像
SEian.G
发布于 2021-07-30 07:42:54
发布于 2021-07-30 07:42:54
1.1K0
举报
文章被收录于专栏:SEian.G学习记录SEian.G学习记录

TiDB这个词,相信大家或多或少都曾经耳闻过,但是很多人觉得他是分布式数据库,自己的业务是使用mysql,基本使用不上这个技术,可能不会去了解他或不会去深入了解。最近一个月,基于实际业务的应用场景,从测试环境测试基础学习,到生产环境性能压测、高可用测试、故障测试等的学习,到今天TiDB终于完成了线上业务的承接使命,而这一切只是开始,而非终点;

经过这一个月的学习,发现TiDB这些原理其实不仅仅局限于分布式数据库这一块,很多技术都是通用的,所以在这里写一下分享一下学习TiDB的一些心得。当然还有更深层次的东西需要后续慢慢的打磨;

先说说为什么选择TiDB吧,一般来说在咱们的业务中都是使用的mysql,但是单机数据库容量和并发性能都有限,对于一些大容量或者高并发的场景我们会选择mycat去做,使用mycat的确解决了问题但是增加了开发难度,开发需要对每一个表都设置分表key,并且每个查询都得带入这个key的值,这样就增加了查询限制,如果不带key的值就得所有库表都得查询一次才行,效率极低,而且也无法满足AP的业务场景。随着核心业务的逐步从SQL Server迁移到MySQL,怎么解决这个问题呢?经过对开源数据库对比测试,最终选择了TiDB;

经过一个月左右的对TiDB的学习,总体感觉,学习成本其实相对来说还是蛮高的,但是不得不说的是,TiDB的官方文档及社区非常的棒,TiDB文档是我见过做得算是比较顶级的文档了,可以说不叫做文档,其实是一个文章知识库,对新手学习来说,还是比较方便的;

在TiDB学习前,对TiDB总是会有很多的疑问:

TiDB如何保证无限扩展?因为平时使用的大多都是mycat的技术,这种其实无限扩展是比较麻烦的 如何保证id唯一,分布式数据库往往会进行分片,在单机数据库中的自增id就不成立,TiDB是如何保证的呢? TiDB是如何保证事务的呢? TiDB数据库是如何存储的?为什么即适用于TP场景又适用于AP场景?

带着这些问题,先来看看TiDB的架构,下面是官方的给出的架构图:

TiDB其实是典型的计算分离的架构

TiDB Server:计算层,对外暴露协议的连接端口,负责管理客户端的连接,主要做的就是执行SQL解析以及优化,生成分布式执行计划,由于这里是计算层是没有状态的,所以是可以无限扩展。 PD Server:PD是整个集群的大脑,负责存储每个 TiKV 节点实时的数据分布情况和集群的整体拓扑结构,提供 TiDB Dashboard 管控界面,需要保持高可用。 TiKV: k-v存储引擎,在tikv内部,存储数据的基本单位是Region。 Tiflash:这个是用于列式的存储引擎,类似于Clickhouse

我们首先来看TiDB如何做到扩展?

首先我们来看看计算层: tidb-server,刚才说过在计算层中,是无状态的,所以就可以进行无限扩展,如果你的场景并发度很高或者数据库连接很多,可以考虑多扩展tidb-server。

然后我们来看看存储层,作为保存数据的系统,首先要决定的是数据的存储模型,也就是数据以什么样的形式保存下来。TiKV 的选择是 Key-Value 模型,并且提供有序遍历方法。在每个tikv上会划分出多个Region,这个也就是我们的基本存储单位;

任何持久化的存储引擎,数据终归要保存在磁盘上,TiKV 也不例外。但是 TiKV 没有选择直接向磁盘上写数据,而是把数据保存在 RocksDB 中,具体的数据落地由 RocksDB 负责。这个选择的原因是开发一个单机存储引擎工作量很大,特别是要做一个高性能的单机引擎,需要做各种细致的优化,而 RocksDB 是由 Facebook 开源的一个非常优秀的单机 KV 存储引擎,可以满足 TiKV 对单机引擎的各种要求。这里可以简单的认为 RocksDB 是一个单机的持久化 Key-Value Map。

TiKV 利用 Raft 来做数据复制,每个数据变更都会落地为一条 Raft 日志,通过 Raft 的日志复制功能,将数据安全可靠地同步到复制组的每一个节点中。不过在实际写入中,根据 Raft 的协议,只需要同步复制到多数节点,即可安全地认为数据写入成功。

总结一下,通过单机的 RocksDB,TiKV 可以将数据快速地存储在磁盘上;通过 Raft,将数据复制到多台机器上,以防单机失效。数据的写入是通过 Raft 这一层的接口写入,而不是直接写 RocksDB。通过实现 Raft,TiKV 变成了一个分布式的 Key-Value 存储,少数几台机器宕机也能通过原生的 Raft 协议自动把副本补全,可以做到对业务无感知。

所以对于TiDB来说无论是存储层还是计算层,我们都可以无限扩展。

那么TiDB是如何保证id唯一的呢?

在mysql中我们可以对于主键直接设置 AUTO_INCREMENT来达到自增列的效果,mysql是怎么做到自增的呢?

在MySQL5.7及之前的版本:InnoDB引擎的自增值,自增值保存在内存里,并没有持久化。每次重启后,第一次打开表的时候,都会去找自增值的最大值max(id),然后将max(id)+步长作为这个表当前的自增值。 在MySQL8.0版本:将自增值的变更记录在了redo log中,重启的时候依靠redo log恢复重启之前的值。

在TiDB中同样支持 AUTO_INCREMENT,不能保证严格递增,只能保证趋势递增,具体原理是:,对于每一个自增列,都使用一个全局可见的键值对用于记录当前已分配的最大 ID。由于分布式环境下的节点通信存在一定开销,为了避免写请求放大的问题,每个 TiDB 节点在分配 ID 时,都申请一段 ID 作为缓存,用完之后再去取下一段,而不是每次分配都向存储节点申请。

TiDB还支持 AUTO_RANDOM,可以用于解决大批量写数据入 TiDB 时因含有整型自增主键列的表而产生的热点问题。因为region是有序的如果一段时间大量有序的数据产生有可能会在同一个region上,所以我们可以使用AUTO_RANDOM来将我们的主键数据打散。

好了,今天就先聊这些吧,后面会陆续分享一些TiDB相关管理的内容,包括从TiDB生产集群部署到性能压测、高可用、日常运维等常见问题;

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA的辛酸事儿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
三篇文章了解 TiDB 技术内幕:说存储
PingCAP
2017/05/18
2K0
三篇文章了解 TiDB 技术内幕:说存储
简单了解 TiDB 架构
大家如果看过我之前发过的文章就知道,我写过很多篇关于 MySQL 的文章,从我的 Github 汇总仓库 中可以看出来:
SH的全栈笔记
2022/08/17
7580
简单了解 TiDB 架构
TIDB TIKV数据存储到ROCKSDB探秘 与 ROCKSDB 本尊
为什么最近一直在看分布式数据库,因为第六感给我的指示是, 分布式数据库是国产数据库下一个要发力的点, 为什么. 如果作为一个产品经理, 首先一个产品要有用户的画像, 那么什么数据库是可以找到金主"爸爸"的, 分布式数据库,并且这些金主们, 应该都很有钱. 单体数据库能吸引大量资金的时代是要过去了. 一个维护费用低,稳定性强, 扩展能力强并且将之前数据库的"毛病" 都一一扫尽的数据库产品, 银行和金融机构应该是很欢喜的. 这也是一些银行自研分布式数据库,或者使用商用分布式数据库的原因吧.
AustinDatabases
2021/08/06
1.8K0
TIDB  TIKV数据存储到ROCKSDB探秘  与 ROCKSDB 本尊
美团点评 TiDB 深度实践之旅
在美团,基于 MySQL 构建的传统关系型数据库服务已经难于支撑公司业务的爆发式增长,促使我们去探索更合理的数据存储方案和实践新的运维方式。随着近一两年来分布式数据库大放异彩,美团 DBA 团队联合架构存储团队,于 2018 年初启动了分布式数据库项目。
PingCAP
2018/11/15
3.4K0
十问 TiDB :关于架构设计的一些思考
做 TiDB 的缘起是从思考一个问题开始的:为什么在数据库领域有这么多永远也躲不开的坑?从 2015 年我们写下第一行代码,3 年以来我们迎面遇到无数个问题,一边思考一边做,尽量用最小的代价来快速奔跑。
PingCAP
2018/06/20
1.1K0
十问 TiDB :关于架构设计的一些思考
TiDB 在华泰证券的探索与实践
文章转载自公众号华泰证券数字科技。 原文链接:https://mp.weixin.qq.com/s/Hp-ZJLdvd3z2w9IJ_32NRw?scene=25#wechat_redirect 作者
PingCAP
2019/08/20
1.1K0
单机版tidb数据库搭建
TiDB 是 PingCAP 公司受 Google Spanner / F1 论文启发而设计的开源分布式 HTAP (Hybrid Transactional and Analytical Processing) 数据库,结合了传统的 RDBMS 和NoSQL 的最佳特性。TiDB 兼容 MySQL,支持无限的水平扩展,具备强一致性和高可用性。TiDB 的目标是为 OLTP(Online Transactional Processing) 和 OLAP (Online Analytical Processing) 场景提供一站式的解决方案。TiDB 具备如下核心特点:
summerking
2022/10/27
7760
吴镝:TiDB 在今日头条的实践
TiDB 主要应用在今日头条核心 OLTP 系统 - 对象存储系统中,存储其中一部分元数据,支持头条图片和视频相关业务,比如抖音等。
PingCAP
2018/03/16
2.9K4
吴镝:TiDB 在今日头条的实践
别再分库分表了,试试TiDB!
TiDB 是一个分布式 NewSQL 数据库。它支持水平弹性扩展、ACID 事务、标准 SQL、MySQL 语法和 MySQL 协议,具有数据强一致的高可用特性,是一个不仅适合 OLTP 场景还适合 OLAP 场景的混合数据库。
码猿技术专栏
2023/05/01
1.4K0
别再分库分表了,试试TiDB!
写给社区的回顾和展望:TiDB 2019, Level Up !
同时在技术上,2018 年我觉得也交出了一份令人满意的答卷,TiDB 的几个主要项目今年一共合并了 4380 个提交,这几天在整理 2018 年的 Change Log 时候,对比了一下年初的版本,这 4380 个 Commits 背后代表了什么,这里简单写一个文章总结一下。
PingCAP
2019/01/03
6330
TIDB,面向未来的数据库到底是什么?
tidb这个技术名词很多同学或多或少都曾经耳闻过,但是很多同学觉得他是分布式数据库,自己的业务是使用mysql,基本使用不上这个技术,可能不会去了解他。最近业务上有个需求使用到了tidb,于是学习了一下基本原理,会发现这些原理其实不仅仅局限于分布式数据库这一块,很多技术都是通用的,所以在这里写一下分享一下学习tidb的一些心得。
用户5397975
2021/07/21
6780
分库分表:TIDB,你是来抢生意的?不讲码德?
如今硬件的性价比越来越高,网络传输速度越来越快,数据库分层的趋势逐渐显现,人们已经不再强求用一个解决方案来解决所有的存储问题,而是通过分层,让缓存与数据库负责各自擅长的业务场景。
狼王编程
2021/06/01
1.1K0
分库分表:TIDB,你是来抢生意的?不讲码德?
TiDB初探
翻了一下TiDB的文档,对TiDB有了个大概的了解。简单说,TiDB的实现架构是:底层是分布式KV引擎TiKV,上层是SQL引擎TiDB Servers。一般传统数据库也是这么分层实现的,只不过TiKV实现了一个分布式、强一致、支持事务的K/V,不像数据库是单机版K/V。在TiKV之上实现SQL引擎就简化了很多,因此TiDB Servers是无状态的。
mazhen
2023/11/24
2220
TiDB初探
TIDB 学习计划 --- 什么是分布式数据库和TIDB 整体架构
从今天开始就准备学习TIDB数据库,初期基础差,学习可能会比较困难入门后可能就会好很多
AustinDatabases
2020/06/23
1.3K0
蔚来汽车 x TiDB丨单表超 20 亿条数据,从 MySQL 到 TiDB 的迁移思考与实践
本文来自 TiDB 社区合肥站走进蔚来汽车——吴记老师的演讲《TiDB 在新能源车企的实践:MySQL 到 TiDB 的迁移思考》。
PingCAP
2024/08/05
2290
蔚来汽车 x TiDB丨单表超 20 亿条数据,从 MySQL 到 TiDB 的迁移思考与实践
余军:分布式数据库在金融行业的创新实践
分布式数据库系统通常使用较小的计算机系统,每台计算机可单独放在一个地方,每台计算机中都可能有DBMS的一份完整拷贝副本,或者部分拷贝副本,并具有自己局部的数据库,位于不同地点的许多计算机通过网络互相连接,共同组成一个完整的、全局的逻辑上集中、物理上分布的大型数据库。余军讲师为你讲解分布式数据库在金融行业的创新实践。 余军 PingCAP 高级技术总监,金融行业首席架构师;开源软件的忠实爱好者,负责金融行业基于 TiDB 产品的解决方案、产品架构咨询和建设规划。主要工作经历:富麦信息科技有限公司 CTO ,中
企鹅号小编
2018/01/15
2K0
余军:分布式数据库在金融行业的创新实践
1.深入TiDB:初见TiDB
本篇文章应该是我研究的 TiDB 的第一篇文章,主要是介绍整个 TiDB 架构以及它能支持哪些功能为主。至于其中的细节,我也是很好奇,所以不妨关注一下,由我慢慢讲述。
luozhiyun
2021/07/08
1.1K0
深入浅出 TiDB 框架
TiDB主要分为3个核心组件:TiDB Server ,PD Server 和TiKV Server,还有用于解决用户复杂OLAP需求的TiSpark组件。部署一个单机版的TiDB,这三个组件都需要启动。如果用生产环境,需要使用Ansible部署TiDB集群。
玄姐谈AGI
2021/07/06
8670
深入浅出 TiDB 框架
Tidb4.0五大核心功能 及 适应场景
TiDB是开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理(Hybrid Transactional and Analytical Processing, HTAP)的融合型分布式数据库产品,具备水平扩容、缩容、金融级高可用、实时HTAP、云原生的分布式数据库、兼容MySQL5.7协议和MySQL生态等重要特性。目标是为用户提供一站式OLTP(OnlineTransactionalProcessing)、OLAP(OnlineAnalyticalProcessing)、HTAP解决方案。
杨漆
2021/03/10
9220
Tidb4.0五大核心功能 及 适应场景
TIDB 初级课程体验 1 (为什么需要分布式数据库)
最近TIDB 开放了相关的初级课程,目前最火热的分布式数据库,那是的深入一下,最近一段时间都会围绕TIDB 的课程学习来写一写相关的总结和体会。
AustinDatabases
2021/08/06
5700
TIDB  初级课程体验    1  (为什么需要分布式数据库)
相关推荐
三篇文章了解 TiDB 技术内幕:说存储
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档