TIDB学习总结

TIDB介绍

1、什么是TIDB

1.1 TIDB介绍

TiDB 是一个数据库,是一个开源分布式数据库,由PingCAP 公司设计开发,TiDB 兼容 MySQL,支持无限的水平扩展,具备强一致性和高可用性(支持事务)。TiDB 的目标是为 OLTP (Online Transactional Processing) 和 OLAP (Online Analytical Processing) 场景提供一站式的解决方案。

1.2 TIDB特性

    1、兼容MYSQL
    2、水平弹性扩展
    3、支持事务
    4、其他(一站式 HTAP(Hybrid Transactional/Analytical Processing,混合事务/分析处理) 解决方案,云原生 SQL 数据库)

2、TIDB架构

tidb架构图


tidb.png

2.1 TIKV

    1、TiKV 负责存储数据,存储数据基本单位是 Region,每个 TiKV 节点负责管理多个 Region。
    2、TiKV 使用 Raft 协议做复制,保证数据一致性和容灾。   
    3、使用RocksDB来进行落盘
    4、 数据在多个 TiKV 之间的负载均衡由 PD 调度,以 Region 为单位调度。

底层用一个全局有序的分布式 Key-Value 引擎(LSM tree)
架构图:


tikv.png

持久化示意图:


持久化.png

存储规则
 1、TiDB 对每个表分配一个 TableID,每一个索引都会分配一个 IndexID,每一行分配一个 RowID(如果表有整数型的 Primary Key,那么会用 Primary Key 的值当做 RowID),
 2、其中 TableID 在整个集群内唯一,IndexID/RowID 在表内唯一,这些 ID 都是 int64 类型 
 3、每行数据按照如下规则进行编码成 Key-Value pair: 
           Key: tablePrefix{tableID}_recordPrefixSep{rowID} Value: [col1, col2, col3, col4]
 4、对于 Index 数据,会按照如下规则编码成 Key-Value pair: 
   Key: tablePrefix{tableID}_indexPrefixSep{indexID}_indexedColumnsValue  Value: rowID

示例
原数据:
1, "TiDB", "SQL Layer", 10
2, "TiKV", "KV Engine", 20
3, "PD", "Manager", 30
主键索引:
t10_r1 --> ["TiDB", "SQL Layer", 10]
t10_r2 --> ["TiKV", "KV Engine", 20]
t10_r3 --> ["PD", "Manager", 30]
唯一索引
t10_i1_10 --> 1
t10_i1_20 --> 2
t10_i1_30 --> 3

2.2 PDServer

Placement Driver (简称 PD) 是整个集群的管理模块,其主要工作有三个:

 *   一是存储集群元信息(某个 Key 存储在哪个 TiKV 节点,维护的示region的信息,开始和结束节点,通过心跳来更新);
 *   二是对 TiKV 集群进行调度和负载均衡(数据迁移、Raft group leader 迁移等);
 *   三是分配全局唯一且递增的事务 ID。

常用的命令

 设置pd路径,减少在命令参数    
 export PD_ADDR=[http://172.16.14.100:2379](http://172.16.14.100:2379/)

查看集群信息和健康状态

./pd-ctl cluster 与 ./pd-ctl health

查看和修改配置信息(包括备份数量等)

./pd-ctl config show all (./pd-ctl config show replication ) 与 ./pd-ctl config set max-replicas 2

  查看有哪些tikv节点与有哪些region

./pd-ctl store 与 ./pd-ctl region

 下线tikv节点

   ./pd-ctl store delete 1(下线tikv1)

新增副本

./pd-ctl operator add add-peer 1 2 (在 store 2 上新增 Region 1 的一个副本)

 设置权重 

  ./pd-ctl store weight 1 5 10

2.3 TIDB

 1、负责接收 SQL 请求,处理 SQL 相关逻辑,通过 PD 找到所需数据的 TiKV 地址。
 2、TiDB Server 是无状态的,本身不存储数据,只负责计算,可以无限水平扩展。
 3、TiDB 节点可以通过负载均衡组件 (如 LVS、HAProxy 或者 F5)对外提供统一入口

TIDB SQL 层架构:


架构.png

执行流程

3.1查询语句

查询语句执行流程,如上。 注意:

    1、通过sql解析,得到查询的startKey和endKey,将一次查询分成多个task。
                具体为:SQL->多个dissql ->多个coprocessor(对region) -> 对应一个coprocessor task
    2、tidb中会缓存region的信息,每次取回从缓存中取,没有的话才回去PD中寻找,会维持多个与tikv的链接
    3、缓存是有默认失效时间的,默认是600秒超过600秒后会从PD中找
    4、只会从leader中去查找数据
    5、如果查询失败(region分裂或leader变化),则会更新缓存重新生成task查

3.2DDL语句执行流程

流程图:


流程图.png

注:

   1、添加列时,不会修改tikv中的数据,在每次取值的时候赋值
   2、删除列时,会异步执行job删除

3.3代码查看

基于2.3

1、regionCache,与startKey和endKey的查询,已经region失效时间长(table_reader.go  192   region_cache.go 665)
2、读region数据的时候选择的是leader还是replica(region_cache.go 298)
3、DDLWork的执行(ddl.go 442,domain.go 667)
4、添加字段之后的数据变化,及tikv中数据存储的结构(tablecodec.go 377)   
5、获取key对应的TIKV,从TIKV中获取数据(region_cache.go 665,client.go 274)
6、一台tikv宕机后的情况
7、建立链接的过程

4、其他

整体架构.png

TiDB Binlog(导出、恢复)

TiDB Binlog 是一个用于收集 TiDB 的 binlog,需要部署Pump(收集sql信息) 和 Drainer(分析sql到下游渠道(kafka,mysql等))

TiDB Binlog 支持以下功能场景:

  • 数据同步:同步 TiDB 集群数据到其他数据库
  • 实时备份和恢复:备份 TiDB 集群数据,同时可以用于 TiDB 集群故障时恢复

参考:
[https://pingcap.com/docs-cn/v3.0/how-to/deploy/tidb-binlog/]
[https://pingcap.com/docs-cn/v3.0/reference/tidb-binlog-overview/](简介)

数据导入支持

Syncer 是一个数据导入工具,能方便地将 MySQL 的数据增量导入到 TiDB。
Syncer 可以部署在任一台可以连通对应的 MySQL 和 TiDB 集群的机器上。


syncer.png

参考:https://pingcap.com/docs-cn/v3.0/reference/tools/syncer/(问题)

TiSpark

TiSpark 作为 TiDB 中解决用户复杂 OLAP 需求的主要组件,将 Spark SQL 直接运行在 TiDB 存储层上,同时融合 TiKV 分布式集群的优势,并融入大数据社区生态。至此,TiDB 可以通过一套系统,同时支持 OLTP 与 OLAP,免除用户数据同步的烦恼。

TiDB Operator

TiDB Operator 提供在主流云基础设施(Kubernetes)上部署管理 TiDB 集群的能力。它结合云原生社区的容器编排最佳实践与 TiDB 的专业运维知识,集成一键部署、多集群混部、自动运维、故障自愈等能力,极大地降低了用户使用和管理 TiDB 的门槛与成本。

Mysql兼容

不支持的特性

  • 存储过程与函数
  • 触发器
  • 事件
  • 自定义函数
  • 外键约束
  • 全文函数与索引
  • 空间函数与索引
  • 非 utf8/utf8mb4 字符集
  • BINARY 之外的排序规则
  • 增加主键
  • 删除主键
  • SYS schema
  • MySQL 追踪优化器
  • XML 函数
  • X Protocol
  • Savepoints
  • 列级权限
  • CREATE TABLE tblName AS SELECT stmt 语法
  • CREATE TEMPORARY TABLE 语法
  • XA 语法(TiDB 内部使用两阶段提交,但并没有通过 SQL 接口公开)
  • CHECK TABLE 语法
  • CHECKSUM TABLE 语法

tidb生产服务器配置:

在Kubernetes上部署:https://pingcap.com/docs-cn/v3.0/tidb-in-kubernetes/deploy/prerequisites/

官方配置参考:https://pingcap.com/docs-cn/v3.0/how-to/deploy/hardware-recommendations/

配置.png

学习文档地址:https://pingcap.com/docs-cn/

美团使用案例:https://tech.meituan.com/2018/11/22/mysql-pingcap-practice.html

Mobike使用案例:https://zhuanlan.zhihu.com/p/32350453

Explain介绍:https://pingcap.com/docs-cn/v3.0/reference/performance/understanding-the-query-execution-plan/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 225,226评论 6 524
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 96,509评论 3 405
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 172,523评论 0 370
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 61,181评论 1 302
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 70,189评论 6 401
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,642评论 1 316
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,993评论 3 431
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,977评论 0 280
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,527评论 1 326
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,547评论 3 347
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,661评论 1 355
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,250评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,991评论 3 340
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,422评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,571评论 1 277
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,241评论 3 382
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,737评论 2 366

推荐阅读更多精彩内容

  • 一、分布式数据库诞生背景 随着互联网的飞速发展,业务量可能在短短的时间内爆发式地增长,对应的数据量可能快速地从几百...
    nightwish夜愿阅读 3,524评论 0 12
  • 一、业务场景 摩拜单车2017年开始将TiDB尝试应用到实际业务当中,根据业务的不断发展,TiDB版本快速迭代,我...
    欢笑lei阅读 2,450评论 0 7
  • 一、硬件选型 1、测试环境推荐配置 2、生产环境推荐配置 3、 如果 tikv 服务器的 CPU及磁盘配置较高,可...
    CocaLi阅读 9,407评论 0 7
  • 案例1 [问题澄清] TiDB集群启动过程中报错: [FATAL] [main.go:111] [“run ser...
    long_cc45阅读 3,047评论 0 0
  • 今天路上走着,同事遇到我匆匆走过,说了一句“没做班主任了,怎么还是那么忙啊?”我笑着点点头。边走边想,究竟自己在忙...
    林含键阅读 523评论 0 7