返回介绍

4.2 Tidb

发布于 2024-10-01 22:56:28 字数 3951 浏览 0 评论 0 收藏 0

TiDB 是 PingCAP 公司设计的开源分布式 HTAP (Hybrid Transactional and Analytical Processing) 数据库,结合了传统的 RDBMS 和 NoSQL 的最佳特性。TiDB 兼容 MySQL,支持无限的水平扩展,具备强一致性和高可用性。TiDB 的目标是为 OLTP (Online Transactional Processing) 和 OLAP (Online Analytical Processing) 场景提供一站式的解决方案。

TiDB 是一款定位于在线事务处理/在线分析处理( HTAP: Hybrid Transactional/Analytical Processing)的融合型数据库产品,实现了一键水平伸缩,强一致性的多副本数据安全,分布式事务,实时 OLAP 等重要特性。同时兼容 MySQL 协议和生态,迁移便捷,运维成本极低。

2016 年 12 月 23 日,分布式关系型数据库 TiDB 正式发布 RC1。

4.2.1 架构

1574510471725

图 20 TiDB 的整体架构

一个 TiDB 集群由不同的模块组成,包括:TiDB 服务器、TiKV 服务器、Placement Driver (PD) 服务器。

节点说明

  • TiDB Servers:负责接收 SQL 请求,处理 SQL 相关的逻辑,并通过 PD 找到存储计算所需数据的 TiKV 地址,与 TiKV 交互获取数据,最终返回结果。无状态的节点,本身并不存储数据,只负责计算,可以无限水平扩展。可以通过负载均衡组件对外提供统一地址。
  • TiKV Cluster:负责存储数据,从外部看 TiKV 是一个分布式的提供事务的 Key-Value 存储引擎。存储数据的基本单位是 Region,每个 Region 负责存储一个 Key Range(从 StartKey 到 EndKey 的左闭右开区间)的数据,每个 TiKV 节点会负责多个 Region。。TiKV 使用 Raft 协议做复制,保持数据的一致性和容灾。副本以 Region 为单位进行管理,不同节点上的多个 Region 构成一个 Raft Group,互为副本。数据在多个 TiKV 之间的负载均衡由 PD 调度,这里也是以 Region 为单位进行调度。
  • PD Server:类似 Zookeeper。整个集群的管理模块,其主要工作有三个:一是存储集群的元信息(某个 Key 存储在哪个 TiKV 节点);二是对 TiKV 集群进行调度和负载均衡(如数据的迁移、Raft group leader 的迁移等);三是分配全局唯一且递增的事务 ID。一般部署奇数个节点(推荐 3)。

用户的 SQL 请求会直接或者通过 Load Balancer 发送到 tidb-server,tidb-server 会解析 MySQL Protocol Packet,获取请求内容,然后做语法解析、查询计划制定和优化、执行查询计划获取和处理数据。数据全部存储在 TiKV 集群中,所以在这个过程中 tidb-server 需要和 tikv-server 交互,获取数据。最后 tidb-server 需要将查询结果返回给用户。

4.2.2 查询流程

TiDB 是一款分布式关系型数据库,兼容 MySQL,支持 OLTP 和 OLAP 业务。它采用了分布式架构,具有水平扩展能力,适用于海量数据的存储和处理。查询流程是 TiDB 的核心机制之一,了解它的查询执行过程有助于优化数据库的性能。

TiDB 查询流程

  1. 客户端发送 SQL 请求

    • 用户通过 MySQL 客户端或其他兼容工具向 TiDB 集群发送 SQL 查询。TiDB 支持标准的 SQL 语法,因此它的查询接口与 MySQL 非常相似。
  2. SQL 解析与优化

    • SQL 解析 :TiDB 首先会对 SQL 查询进行解析,将 SQL 语句转换为抽象语法树(AST)。这一过程分为词法分析和语法分析两个步骤。

      • 词法分析:识别 SQL 中的关键字、标识符等元素。
      • 语法分析:根据 SQL 的语法规则检查语句是否合法,并生成 AST。
    • 逻辑优化 :TiDB 对解析后的查询进行逻辑优化。常见的逻辑优化包括谓词下推、子查询优化、JOIN 重排、投影下推等。这些优化步骤旨在提高查询效率,减少不必要的计算。

    • 物理优化 :TiDB 会生成多个执行计划,并根据代价模型选择代价最低的计划。物理优化包括选择最优的执行路径,如选择索引扫描、表扫描等方式。

  3. 调度执行

    • 分片与调度 :TiDB 是一个无共享架构的数据库,数据以 Region 为单位存储在 TiKV 中。TiDB 负责将查询分解为多个子任务,分发给不同的 TiKV 节点执行。
      • Region 是 TiDB 的最小数据分片单位,每个 Region 存储一段连续的数据。
      • TiKV 作为分布式键值存储,提供底层的存储和读写操作。
  4. 执行引擎

    • 计算层(TiDB Server) :TiDB Server 负责查询的实际执行,调用 TiKV 存储引擎获取数据。
      • 下推计算 :部分计算任务可以被下推到 TiKV 节点执行,从而减少 TiDB 和 TiKV 之间的数据传输量,提高查询效率。
      • 存储层(TiKV/TiFlash) :TiKV 负责存储 OLTP 类型的数据,而 TiFlash 是一个列存引擎,专门用于加速 OLAP 查询。
  5. 结果返回

    • TiDB 将分布式执行的结果合并、汇总,然后将最终的查询结果返回给客户端。

查询优化的几个关键点

  1. 索引优化
    TiDB 支持与 MySQL 相同的 B+ 树索引,同时支持多列复合索引。通过选择合适的索引,查询性能可以大幅提升。

  2. 下推计算
    TiDB 支持下推计算到 TiKV 层,例如筛选条件、聚合操作等可以在 TiKV 节点完成,从而减少网络传输的压力。

  3. 并行执行
    TiDB 支持多节点并行执行查询任务,充分利用分布式架构的优势,提高查询吞吐量。

  4. 物理分布与调度
    TiDB 的数据分片机制允许在多台服务器之间均匀分布数据。Raft 协议用于保证数据的强一致性和高可用性。

TiDB 兼容性与应用场景

TiDB 兼容 MySQL 5.7,支持复杂查询和事务,并且提供自动水平扩展的能力,适合海量数据的在线事务处理(OLTP)和分析处理(OLAP)。它广泛应用于金融、电商、物流等对数据一致性和可扩展性要求较高的行业。

如果你对某些具体的查询场景或者查询优化有兴趣,可以进一步探讨!

本章参考

[1]. https://www.pingcap.com/

[2]. https://www.pingcap.com/docs-cn/

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文