猿创征文|tidb架构分析&读写性能测试

放羊的牧码 放羊的牧码     2022-10-24     586

关键词:

TiDB 是由 PingCAP 公司开发的一个开源的分布式 HTAP(Hybrid Transactional and Analytical Processing) 数据库,基于 Google Spanner 和 Percolator 的设计思想,采用存储与计算分离架构,将整个系统划分为 TiDB、PD、TiKV、TiFlash 四个组件,各组件之间通过 gRPC 进行通信。TiDB 支持标准 SQL 和分布式事务,默认提供快照隔离级别。支持水平弹性扩展,按范围对数据进行切分,数据分片之间使用 Multi­Raft 协议维护数据的强一致性和高可用性。TiDB 整体架构如图所示。

TiDB 节点

TiDB 位于客户端和 TiKV 之间,是数据库的计算层,支持 MySQL 通信协议。在接收到客户端发送的 SQL 语句后,TiDB 节点首先对 SQL 语句进行词法检查和语法分析生成抽象语法树(Abstract Syntax Tree,AST),然后经过逻辑优化和物理优化,生成最终的执行计划,发送到 TiKV 节点进行执行。为了避免由于宕机而导致状态丢失,TiDB 节点被设计为无状态的,并不存储数据,因此当 TiDB 节点宕机时只需重新创建一个 TiDB 实例即可重新提供服务。在实际使用过程中,用户可根据系统的计算负载动态的添加或减少 TiDB 节点,通过 HAProxy 等组件将客户端的连接分散到多个 TiDB 实例,避免单点过热问题。

PD 节点

PD 负责集群授时和元数据管理,通过定期收集每个 TiKV 节点保存的数据范围,维护数据范围与 TiKV 节点之间的映射关系。当 TiDB 发起对 TiKV 的读写请求时,会首先从 PD 获取数据的位置信息。同时 PD 会动态检测每个 TiKV 节点的负载,通过数据分片的迁移实现 TiKV 的负载均衡,避免出现单点过热问题。PD 使用物理时钟拼接逻辑时钟的方式为整个集群提供中心化的授时服务,通过定期持久化一段时间后的时戳,实现全局严格单调递增的时戳分配。为了保证高可用性,会同时启动多个 PD 节点,节点之间通过 Raft 协议保证数据的强一致性。

TiKV 节点

TiKV 是数据库的存储层,是基于 Multi­Raft 协议在单机 KV 存储引擎 RocksDB 之上实现的分布式高可用的 KV 数据库。TiKV 将数据有序存储,根据 key 的范围将数据划分为多个大小接近的分片(Region),当单个分片的数据量过大或过小时,会自动进行分裂(split)或合并(merge)操作。TiKV 为每个分片维护多个副本存储在不同的 TiKV 节点上,分片的副本之间使用 Raft 协议进行同步,保证了数据的高可用和强一致性。TiKV 针对联机事务处理 (OLTP) 的场景而设计,在 TiKV 内部数据以行式的形式进行存储,提供了原生的分布式事务支持,通过检测并发事务间的写写冲突,实现了快照隔离。

TiFlash 节点

区别于 TiKV,TiFlash 针对联机分析处理 (OLAP) 的场景而设计,数据以列式的形式进行存储。TiFlash 以学习者(Learner)的角色添加到 TiKV的 Raft 集群中,只进行数据同步,并不参与 Raft 领导者的选举、日志提交等过程。

读写性能测试

对只读事务和只写事务的性能测试如图所示。其中横轴代表事务类型,纵轴表示每秒的事务吞吐量。Sysbench 使用 64 线程进行测试,测试结果表明,在使用内存锁表机制后,只读事务的处理性能相比于原始 TiDB 提升了 5.12%。内存锁表机制中,在磁盘只维护一个列族,读数据只读一次,而原始 TiDB 在磁盘维护三个列族,需要两次读操作才能访问到数据,因此对于只读事务,添加内存锁表机制后数据库的读性能得到提高。对于只写事务,因为内存锁表机制只在 Percolator
的提交阶段写一次盘,而原始 TiDB 分别需要在预写和提交阶段写锁写数据,需要写四次磁盘,所以使用内存锁表机制只写事务处理性能提高了 6.43%。

猿创征文|国产数据库tidb架构特性(代码片段)

前言TiDB是PingCAP公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理(HybridTransactionalandAnalyticalProcessing,HTAP)的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、... 查看详情

猿创征文|国产数据库实战之使用docker部署tidb集群(代码片段)

猿创征文|国产数据库实战之使用Docker部署TiDB集群一、TiDB介绍1.TiDB简介2.TiDB特性3.TiDB集群整体架构4.TiDB集群各部分介绍5.本次TiDB集群组件二、检查本地环境1.检查docker状态2.检查docker版本3.检查docker-compose版本三、下载tidb-docker-comp... 查看详情

猿创征文|国产数据库实战之使用docker部署tidb集群(代码片段)

猿创征文|国产数据库实战之使用Docker部署TiDB集群一、TiDB介绍1.TiDB简介2.TiDB特性3.TiDB集群整体架构4.TiDB集群各部分介绍5.本次TiDB集群组件二、检查本地环境1.检查docker状态2.检查docker版本3.检查docker-compose版本三、下载tidb-docker-comp... 查看详情

猿创征文|国产数据库实战之使用docker部署tidb集群(代码片段)

猿创征文|国产数据库实战之使用Docker部署TiDB集群一、TiDB介绍1.TiDB简介2.TiDB特性3.TiDB集群整体架构4.TiDB集群各部分介绍5.本次TiDB集群组件二、检查本地环境1.检查docker状态2.检查docker版本3.检查docker-compose版本三、下载tidb-docker-comp... 查看详情

猿创征文|国产数据库实战之tidb数据库快速入门(代码片段)

猿创征文|国产数据库实战之TiDB数据库快速入门一、系统检查1.检查系统版本2.查看本地IP地址3.TiDB集群介绍二、快速部署本地测试集群1.安装TiUP工具2.声明全局环境变量3.快速部署TiDB集群三、连接TiDB数据库1.新开一个session以访问T... 查看详情

猿创征文|程序员进阶架构师的专业知识系统分析

文章目录前言调查阶段收集资料开调查会个别访问书面调查抽样调查现场观摩参加业务实践阅读历史文档分析阶段现有系统分析组织结构分析系统功能分析业务流程分析业务流程分析方法业务流程建模数据分析需求规格说明书前... 查看详情

猿创征文|分布式国产数据库tidb从入门到实战(代码片段)

写在前面本文讲解的是目前欢迎程度最高分布式国产数据库TiDB,详细讲解了TiDB的由来、架构、SQL基本操作、SpringBoot整合TiDB等内容。目录写在前面一、概述二、与MySQL兼容性对比三、安装使用四、SQL基本操作4.1、库操作4.2、... 查看详情

猿创征文|国产数据实战之docker部署mywebsql数据库管理工具(代码片段)

猿创征文|国产数据实战之docker部署MyWebSQL数据库管理工具一、MyWebSQL介绍1.MyWebSQL简介2.MyWebSQL特点二、检查本地环境1.检查docker状态2.检查docker-compose版本三、下载MyWebSQL镜像四、部署MyWebSQL工具1.编辑docker-compose.yaml2.创建MyWebSQL容器... 查看详情

猿创征文|gaussdb(dws)如何实现实时,批量和交付式查询一站式开发

文章目录1数据分析平台的挑战1.1当前典型的数据架构1.2主要痛点1.3GaussDB(DWS)整体解决方案1.3.1解决思路:1.3.2周边配套的云服务:2GaussDB(DWS)如何支撑实时、批量和交互式查询的2.1GaussDB(DWS)产品策略:一套架构支撑实时、批量和交互式... 查看详情

猿创征文|机器学习实战——降维(代码片段)

目录1主成分2低维度投影3方差解释率4选择正确数量的维度5PCA压缩6增量PCA7核主成分分析8选择核函数和调整超参数9局部线性嵌入10其他降维技巧数据降维会丢失一些信息(好比压缩图像带来的效果一样),所以,... 查看详情

猿创征文|国产数据库新的飞跃(代码片段)

一、数据库类型首先,我们来说一下当前数据库的类型吧,当前数据库生态可以大致分类三类:一是传统商业数据库,以Oracle为代表,其在40余年时间里所创造的数据库帝国已拥有了极其完善的生态;二是开源数据库,以MySQL、Po... 查看详情

猿创征文|c++软件开发值得推荐的十大高效软件分析工具(代码片段)

目录1、概述2、高效软件工具介绍2.1、窗口查看工具SPY++2.2、DependencyWalker2.3、剪切板查看工具Clipbrd2.4、GDI对象查看工具GDIView2.5、ProcessExplorer2.6、PrcoessMonitor2.7、APIMonitor2.8、调试器Windbg 2.9、反汇编工具IDA 2.10、抓包工具Wire... 查看详情

猿创征文|国产数据库之使用pxd在docker环境下部署polardb-x集群(代码片段)

猿创征文|国产数据库之使用PXD在Docker环境下部署PolarDB-X集群一、PolarDB-X介绍1.PolarDB-X简介2.PolarDB-X特点二、PolarDB-X的产品架构1.产品架构图2.PolarDB-X架构介绍三、环境规划四、Docker安装1.安装系统工具2.配置docker的yum仓库源3.安装doc... 查看详情

猿创征文|使用docker部署opengauss国产数据库(代码片段)

猿创征文|使用Docker部署openGauss国产数据库一、openGauss介绍1.openGauss简介2.openGauss产品定位3.支持的架构和操作系统版本二、检查宿主机环境1.检查系统版本2.检查Docker状态三、下载openGauss镜像1.进入docker官方镜像仓库2.openGauss镜像介... 查看详情

猿创征文|ios经典面试题之深入分析图像的解码渲染与基本原理(代码片段)

一、iOS的图片加载如下所示,加载图片的代码:-(void)imageLoad UIImage*image=[UIImageimageNamed:@"xxxxxxx"]; _imageView.image=image;UlImage是iOS中处理图像的高级类,创建一个UlImage实例只会加载DataBuffer&# 查看详情

猿创征文|云原生领域之容器日常使用工具推荐(代码片段)

猿创征文|云原生领域之容器日常使用工具推荐一、云原生介绍1.云原生定义2.容器技术简介3.云原生相关工具导航二、Docker1.Docker介绍①Docker简介②Docker特点③Docker的三个基本概念④Docker的架构图2.Docker的优势3.Docker的使用效果①... 查看详情

猿创征文|万字长文搞定企业中的mysql数据库部署及使用(代码片段)

文章目录Mysql二进制安装及mycat读写分离1.学习环境2.初始化环境2.1关闭selinux、防火墙2.2修改主机名2.3配置域名解析2.4时间同步3.mysql安装3.1二进制包上传服务器3.2解压到/home3.3清除系统环境3.4创建mysql用户3.5创建数据目录并赋予权... 查看详情

猿创征文|一文分析过去几年中热门的java技术趋势何去何从?

在StackOverflow上,与某一技术相关的帖子数量越多,则说明该技术的开发者数量越多,也从侧面反映了该技术的流行程度和受欢迎程度。在第三章中我们介绍了数据的获取和预处理。在标签提取阶段,我们得到了提... 查看详情