当前位置: 首页 > article >正文

TIDB的结构

tidb主要由三部分组成:

1、tikv

      tikv是tidb中存储数据的地方,以key-value格式存储,每一行对应一个key;

          (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]
             可重复索引的存储格式是:  
                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 分布,kv节点的redion对应的key范围)等关键元数据,动态调整 Region 分布以实现数据均衡;
       2、PD 根据预设的策略(如 Region 大小、副本数、地域分布等)定期进行数据均衡操作,通过迁移 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)对外提供统一的接入地址。

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

          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 


http://www.kler.cn/a/380302.html

相关文章:

  • MySQL utf8mb3 和 utf8mb4引发的问题
  • 阿里云服务器 篇十:自动定时备份CSDN博客内容
  • 《C++最新标准下字符串字面量类型的深度剖析》
  • SpringCloud Alibaba-05 Seata分布式事务处理
  • PHP JSON 教程
  • ubuntu unrar解压 中文文件名异常问题解决
  • 【SpringCloud详细教程】-01-一文了解微服务
  • Python和MATLAB都可以用于绘制折线图,下面是分别用Python和MATLAB绘制简单折线图的示例。
  • 蓝桥双周赛 第21场 小白入门赛
  • 【每日 C/C++ 问题】
  • mac 打开访达快捷键
  • 一二三应用开发平台自定义查询设计与实现系列3——通用化重构
  • linux mysql8大小写敏感问题
  • Spring Boot框架在信息学科平台开发中的高级应用
  • SpringBoot在线教育系统:集成第三方服务
  • AWTK文件系统适配器更新-支持RT-Thread DFS POSIX接口
  • Java中的线程安全问题(如果想知道Java中有关线程安全问题的基本知识,那么只看这一篇就足够了!)
  • Java项目实战II基于Java+Spring Boot+MySQL的体育馆使用预约平台的设计与实现(源码+数据库+文档)
  • flask websocket服务搭建,flask-sock 和 flask-socketio
  • 开源 AI 智能名片 2+1 链动模式 S2B2C 商城小程序与私域流量圈层
  • qt QFileInfo详解
  • GR2——在大规模视频数据集上预训练且机器人数据上微调,随后预测动作轨迹和视频(含GR1详解)
  • 【Linux系列】Linux 和 Unix 系统中的`set`命令与错误处理
  • Qt Modbus 2 通信实现
  • Ubuntu桌面环境下没有网络配置图标,只有显示VPN设置
  • 网络:IP分片和组装