TiDB

来自智得网
跳转至: 导航、​ 搜索

简介

TiDB 是一款分布式的 NewSQL 数据库,能够支持横向扩展,高可用,水平分片,可线性扩展,同时支持 SQL 和事务。TiDB 基于 Raft 算法实现分布式一致性,通过分布式事务来保证多节点的数据一致性。TiDB 同时兼容 MySQL 5.7 协议,可以无缝迁移 MySQL 应用。TiDB 使用了分布式存储引擎 TiKV 作为存储层,支持横向扩展,提供高可靠的分布式存储服务,同时也保证了强一致性。

以下是 TiDB 的一些特点:

1.分布式架构:TiDB 支持水平扩展,可以无缝地进行容量和性能的扩展,同时提供高可用和故障恢复能力。

2.高性能:TiDB 采用了 MPP 架构,通过将数据水平切分,支持并行查询,实现了高并发、低延迟的查询。

3.兼容 MySQL 协议:TiDB 与 MySQL 5.7 兼容,可以无缝迁移 MySQL 应用,并提供了大多数 MySQL 特性,如 ACID、事务等。

4.分布式事务:TiDB 使用分布式事务来保证数据一致性,支持两阶段提交和分布式快照隔离。

5.智能优化:TiDB 使用了智能优化器和统计信息来优化查询计划,提高查询性能。

6.开放性:TiDB 是开源的,社区活跃,提供了完善的文档和学习资源。

总的来说,TiDB 是一个高可用、高性能、分布式的数据库,能够支持大规模的数据存储和查询,是目前分布式数据库领域的热门选择之一。

原理

存储模型

数据的存储模型是数据库系统需要首先进行的技术选型,存储模型决定了数据以什么样的形式保存。TiKV 选择了 Key-Value 模型,并且提供有序遍历方法。

TiKV 数据存储的关键特性如下:

  • 使用 Map 结构进行数据存储,保存的是数据的键值对。
  • Map 中的 Key 是按照二进制有序存储的,可以快速的定位某个 Key 的位置,也可以方便的进行区间查询。

TiDB没有自研数据存储的持久化框架,而是直接选择了RocksDB进行数据持久化。

MVCC

为了解决并发写操作引发的数据上锁问题,在分布式场景下,加锁可能会带来性能以及死锁问题。TiKV 使用了 MVCC 思想。TiKV 的 MVCC 实现是通过在 Key 后面添加版本号来实现。

同一个 Key 的多个版本,会按照版本号的大小顺序将数据从前到后进行存储,当用户通过 Key + Version 来获取 Value 的时候,可以通过 Key 和 Version 构造出 MVCC 的 Key,也就是 Key_Version。然后可以直接通过 RocksDB 的 SeekPrefix(Key_Version) API,定位到第一个大于等于这个 Key_Version 的位置。

分布式架构

TiDB采用了分布式架构,可以通过水平扩展来满足更高的负载需求。它将数据划分为多个Region,每个Region都有一组副本,可以自动实现故障转移和数据迁移。TiDB还通过PD(Placement Driver)来管理Region的分布和调度,确保数据的均衡和高可用性。

分布式事务

为了支持分布式事务,TiDB采用了Google的Percolator算法,该算法将事务拆分成多个小的操作单元,通过协调器来保证事务的一致性和隔离性。同时,TiDB还支持分布式快照隔离级别(SI)和可重复读隔离级别(RC),可以满足不同应用场景的需求。

一致性哈希

为了支持数据的动态扩容和缩容,TiDB采用了一致性哈希算法来分配数据副本。一致性哈希算法可以保证当节点数量变化时,只有一小部分数据需要迁移。同时,TiDB还采用了Raft协议来保证数据的强一致性和高可用性。

分布式执行引擎

TiDB的执行引擎使用TiKV作为存储引擎,采用了分布式执行的方式来提高查询性能和可扩展性。TiDB支持对复杂查询的分布式优化和执行,可以将查询计划分解为多个子任务,在不同的节点上并行执行,最终将结果合并返回给客户端。

自动化运维

为了简化运维工作,TiDB提供了TiUP工具来进行集群部署和升级。同时,TiDB还提供了监控和告警功能,可以监控集群的状态和性能指标,并在出现异常情况时及时通知管理员。TiDB还提供了自动化故障转移和数据迁移功能,可以最大程度地降低管理员的工作量。