TiDB如何保证数据一致性

1. 分布式事务协议

TiDB 采用了类似 Google Percolator 的分布式事务协议来处理分布式事务。这个协议基于两阶段提交(2PC)的思想,但进行了优化和改进,以适应分布式环境的特殊需求。在 TiDB 中,当一个事务需要跨多个节点执行时,它会首先向协调者(Coordinator)发起事务请求。协调者负责协调整个分布式事务的执行过程。它首先会向所有参与事务的节点发送预提交请求(Prepare Request),这些节点在收到请求后会执行本地事务操作,并将操作结果和状态信息返回给协调者。协调者在收到所有参与节点的响应后,会根据这些信息决定是否提交或回滚事务。如果所有节点都成功执行了本地事务操作并且没有冲突或错误发生,协调者会向所有节点发送提交请求(Commit Request),否则发送回滚请求(Rollback Request)。

TiDB两阶段提交:

TiKV两阶段提交

2. 多版本并发控制(MVCC)

TiDB 使用 MVCC 来实现高效的并发控制和数据一致性。MVCC 通过为每个数据版本分配一个唯一的版本号来实现并发控制。当事务读取数据时,它会获取数据的当前版本号,并基于该版本进行后续操作。其他事务在修改数据时会生成新的版本,而不会影响到正在执行的事务。通过这种方式,MVCC 能够确保并发事务之间的数据隔离和一致性。TiDB 还通过合理的垃圾回收(GC)策略来管理存储空间,确保系统长期稳定运行。

3. Raft 协议

TiKV(TiDB 的分布式存储引擎)使用 Raft 协议来实现数据的一致性和高可用性。每个 Region(TiKV 中的数据分区)的副本组通过 Raft 协议进行日志复制,确保数据一致性。Raft 中的 Leader 负责处理客户端请求,将操作日志复制到 Follower,并在多数副本确认后提交日志。当某个副本故障时,PD(Placement Driver)可以自动将其替换,并通过 Raft 协议确保新的副本能够恢复数据。

相关推荐
高铭杰2 天前
万物皆可KV(1)TIDB存储布局分析
java·前端·tidb
TiDB 社区干货传送门3 天前
TiDB 8.5.7 发版|六项实用功能上线
数据库·mysql·tidb
Database_Cool_13 天前
阿里云 PolarDB-X vs TiDB 分布式数据库选型指南
数据库·分布式·阿里云·tidb
睡不醒男孩0308232 个月前
TiDB数据库调研
数据库·tidb
解决问题no解决代码问题2 个月前
TiDB 深度对比:拆解三类传统扩容方案与 TiDB 原生分布式架构差异
tidb
解决问题no解决代码问题2 个月前
分区表清理操作全对比:DB2 / Oracle / MySQL / TiDB 流程详解
tidb
解决问题no解决代码问题2 个月前
TiDB 原理与节点宕机实战讲解
数据库·tidb
不爱编程的小陈2 个月前
事务的进化:从MySQL单机事务到TiDB分布式事务的探究
分布式·mysql·tidb
解决问题no解决代码问题2 个月前
深入解析 TiDB 分布式架构:三大核心组件与底层运行原理
tidb
身如柳絮随风扬2 个月前
TiDB 极速入门与 Spring Boot 实战:从 Docker 部署到高并发调优
spring boot·docker·tidb