美文网首页
TIDB学习总结

TIDB学习总结

作者: 知而乐者 | 来源:发表于2020-03-14 11:54 被阅读0次

    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/

    相关文章

      网友评论

          本文标题:TIDB学习总结

          本文链接:https://www.haomeiwen.com/subject/tyzmshtx.html