写点什么

# 分布式数据库新秀 TIDB 初探

  • 2022-11-18
    北京
  • 本文字数:1954 字

    阅读完需:约 6 分钟

作者: 凌云 Cloud 原文来源:https://tidb.net/blog/391051db

背景

随着社会数字化程度的加深,网络逐渐成为了社会的基础设施。随着互联网渗透程度的不断深入和互联网的进一步下沉,人们会在互联网上面 花费更多的时间,产生更多的数据。作为数据存储基石的 DB 面临着新的挑战和发展空间,由于数量的增长,之前的单机 DB 将面临越来越多的挑战,此时就出现数据库扩展的多种方案以满足海量数据的存储。目前主流的应对方案主要是分库分表,但是也存在着分布式事务,跨节点 join,扩容复杂等局限。

分布式数据 TIDB 简介

TIDB 是一款同时支持在线事务处理和在线分析处理数据(Hybrid Transactional and Analytical Processing, HTAP)的关系性分布式数据库。在线事务处理,一般日常的事务处理数据库类型。在线分析处理,指由于数据分析的数据库类型,侧重于数据分析与决策,大多是基于 MR 模型的分布式存储系统或者是列式存储,例如 clickhouse。


  • 一键水平扩容或者缩容


由于采用计算与存储分离,可针对不同场景对计算模块或者存储模块快速透明化扩容。


  • 金融级高可用


多副本存储,基于 raft 协议的事务日志


  • 实时 HTAP


通过基于两种不同的存储模型 TIKV 和列式存储 TiFlash,同时支持 OLTP 和 OLAP,通过 raft 协议保持两者数据的强一致性。


  • 云原生的分布式数据库


可以基于 TIDB 生态的 TI oprator,在私有云、公有云或者混合云实现工具化部署。


  • 兼容 MySQL 5.7 协议和 MySQL 生态


兼容大部分 Mysql 5.7 协议,用户可以在原有代码不做变更的基础上,在 Mysql 和 TIDB 之间实现透明化迁移。

架构


(图片来自 Pingcap 官网)


TIDB 整个集群主要分为 TIDB Server、PD Server、TIKV Server 、TIFlash(可选)


TIDB Server:这部分主要负责 Sql 解析、优化,生成执行计划,此部分是无状态的。TIDB 还扮演着计算下推的角色,


同步对 SQL 的解析和分析,推断是适用 TIKV 还是 TIFlash,将数据计算下推到数据存储层。例如要按照某一个字段的一段范围的内单位时间的度量,将会下推给 TIflash 引擎,利用列式存储提高查询性能。


PD Server: 元信息模块。主要负责数据在 TIKV 的分布情况和集群的拓扑情况,协调数据数据迁移。


并负责生成分布式事务的唯一 ID。


TIKV:TIKV 是基于 rocksdb 二次开发的 KV 存储引擎。Region 为最基本数据存储单元,在每一个 region 中按序存储一段数据,Region 的迁移、合并、迁移受 PDServer 的调控。


TIFlash:列式存储引擎、记得之前是基于 clickhouse 开发的存储引擎。作为 TIKV learner 的角色提交数据。异步复制、一致性(读之前会校验与 Leader 的数据同步状态)。clickhouse 特点,多线程并发查询,海量数据情况下并能比较优异,确定就是并发度不高。

分布式事务

TIDB 的分布式事务是基于 Google 的Percolator二阶段提交算法实现的。从 3.0 开始默认实现是悲观事务, 参考TiDB 新特性漫谈:悲观事务。并且基于 MVCC 多版本控制实现了事务的并发控制,详细可以参考TiKV 的 MVCC(Multi-Version Concurrency Control)机制

Region 存储模型

大数据量的 KV 存储目前有两种存储方案。


  1. 基于 Hash 的 Map 存储方案,例如 redis。

  2. 基于 LSM Tree 的有序分块存储的方案,例如 mongodb,rocksdb。


TIDB 的 KV 实现 是基于第二种的实现,Region 是数据在 TIKV 中的存储基本数据模型,为了方便数据在 rocksdb 的存储和迁移,tidb 将数据以 region 为单位组织存储。在每一个 region 中数据均顺序组织(startKey,endKey),方便 PD 的调度迁移与写入。并且数据的复制与分发也已 region 为单位组织。


详细可以参考TIDB 存储 -region

性能分析

下面是之前做的一份压测数据。


  • 1 TIDBServer,3 TIKV,同城三机房部署。

  • 并发 10qps,同时查询数 8SQL。

  • 工具 Jemter

  • 数据量 200-300G

  • TIDB 4.x 版本


机器性能暂时没有打满,可以看到响应时间基本在 15ms 左右



除了这份数据和 pingcap 公布的官方 tpc 数据,还有其他部分公司 DBA 在自己测试环境做了压测。得出结论,在数据量达到一定程度下,与 mysql 性能相比差距不大,并且在某些场景会超过 mysql 的性能。当然刚刚发布的 5.0 版本性能又有了一定提升其他以官方公布的数据为准 TiDB Sysbench 性能对比测试报告 - v5.1.0 对比 v5.0.2

使用现状

TIDB 作为国内公司开发的分布式数据库新秀,受到国内许多互联网、金融、银行等行业公司的关注,并投入了一定的资源参与到了 TIDB 的生态建设。例如美团、伴鱼、bilibili 等。

总结

随着数字化加深、数据量的暴增,分布式数据库是未来解决海量数据的唯一途径。同时随着云原生基础设施不断地完善,作为整条链路的最后一块单点土地 -数据库,基于云设施的分布式方案前景看好。并且随着国内技术行业的升级,相信会有更多像 TIDB 这种自研的优秀的基础技术产品涌现。去探寻技术附加值更高的市场,打造数据我们自己的技术壁垒。支持国产!


若有收获,就点个赞吧


发布于: 刚刚阅读数: 5
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
# 分布式数据库新秀TIDB初探_TiDB 底层架构_TiDB 社区干货传送门_InfoQ写作社区