TIDB的结构

tidb主要由三部分组成:

         理论上tidb的这三个部分都是可以无限拓展的,可以支持海量数据:

                 tikv和tidb server 都是无状态的,可以无限拓展;

                 pd 包含调度、元数据存储等,调度也是无状态的,可以无限拓展;

1、tikv

       tikv是tidb中存储数据的地方,以key-value格式存储,每一行对应一个key;TiKV的数据和索引 物理上采用LSM(前缀树)的方式存储,逻辑上表现为 B+ 树 的特性(有序、范围查询高效),避免了B+树叶子节点膨胀带来的大量随机读写;

       tikv是无状态的,理论上可以无效拓展;

          (1)、table的key对应格式如下:tablePrefix{tableID}_recordPrefixSep{rowID},tableID是唯一的、rowID在一个表内是唯一的;

          (2)、索引的key分为两种情况:唯一索引和非唯一索引

          唯一索引:tablePrefix{tableID}_indexPrefixSep{indexID}

          非唯一索引:tablePrefix{tableID}_indexPrefixSep{indexID}_indexedColumnsValue_{rowID}

            这样保证每个key都是唯一的;   

     如: 一个表中有以下几行数据,其中第一列是主键,最后一列是可重复索引:
                 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]
             可重复索引的存储格式是,只有key没有值,从key中获得主键id,再回表查询主键索引:  
                t10_i1_10_1 --> null
                t10_i1_20_2 --> null
                t10_i1_30_3 --> null

         tikv上的数据是按region(区)为单位进行存储,每个区默认64M,每个区存储一段key的范围;

2、pd的功能:

       1、PD 保存了 TiKV 集群的整体拓扑结构、每个 TiKV 节点(leader、副本等信息)的状态(通过心跳)、以及数据在各个节点上的分布情况(即 Region 分布,每个region对应的一段key范围)等关键元数据,动态调整 Region 分布以实现数据均衡
       2、PD 根据预设的策略(如 Region 大小、副本数-默认3个副本、地域分布等)定期进行数据均衡操作,通过迁移 Region 的副本来避免数据热点、保证资源利用率,并确保在节点故障时有足够的副本可用。当 TiKV 节点发生故障或网络隔离时,PD 负责检测并触发故障转移流程,重新选举 Leader,确保数据的高可用性。
       3、根据数据增长和查询需求,PD 自动触发 Region 的分裂(Split)和合并(Merge)操作,以维持合理的 Region 大小,优化查询性能。
       4、PD 提供全局单调递增的时间戳服务,用于协调分布式事务中的时间顺序,确保事务的 ACID 特性。全局唯一 ID 分配:PD 分配全局唯一的 Region ID、Table ID、Index ID 等,确保在整个集群内标识符的唯一性。
       5、监控与告警:PD 收集集群的运行状态和性能指标,支持通过 Prometheus 等工具进行监控,并提供告警功能。提供图形化界面(TiDB Dashboard)和命令行工具(pd-ctl)供管理员查看集群状态、执行管理操作。

3、TiDB server

         TiDB Server 负责接收 SQL 请求,处理 SQL 相关的逻辑(语法解析、查询计划制定和优化、执行查询计划),并通过 PD 找到所需数据的 TiKV 地址,与 TiKV 交互获取数据,最终返回结果。TiDB Server 是无状态的,其本身并不存储数据,只负责计算,可以无限水平扩展,可以通过负载均衡组件(如LVS、HAProxy 或 F5)对外提供统一的接入地址。

tidb的核心特征:

        高度兼容mysql,基本和mysql语法一致,数据从mysql迁移到tidb也很容易;

        支持标准的ACID事务;

举例说明一下查询的步骤:

          select age from user where name="TiDB";
          没有索引的情况:TiDB server接收到请求后根据表名从pd Server中获得表名分布在哪个kv节点的那个region上,对分区做扫描判断 name="TiDB" 的数据,每个kv节点将查询数据返回给ti server,ti server汇总后返回;
          存在索引的情况:找到table中的索引列所在的key-value 区域,从区域中获取主键值,然后根据主键回表查询主键索引所在的region,然后获得数据;

MVCC多版本控制机制:

        tidb也支持MVCC多版本机制,通过以下方式实现:

        Key1-Version3 -> Value
        Key1-Version2 -> Value
        Key1-Version1 -> Value

详细文档参考:https://pan.baidu.com/s/19bfKzZLn7Ztm2fncN-IBHA?pwd=mrxz 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值