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 协议确保新的副本能够恢复数据。

相关推荐
PingCAP1 天前
TiDB 亮相宜昌“医院‘云数智’技术实践研讨及成果展示交流会”,探讨国产化 + AI 背景下的数据库新趋势
数据库·人工智能·tidb
PingCAP7 天前
TiDB 可观测性解读(二)丨算子执行信息性能诊断案例分享
数据库·tidb
七七powerful13 天前
mysql & 磐维(opengauss)&tidb误删数据之高级恢复
数据库·mysql·tidb
蒂法就是我13 天前
介绍一下TiDB、RocksDb、levelDB、LSM 树、SSTable。
tidb·sstable
PingCAP14 天前
TiDB × AI :DeepSeek 时代你需要什么样的数据基座
数据库·人工智能·tidb
PingCAP15 天前
架构师必看!现代应用架构发展趋势与数据库选型建议丨TiDB vs MySQL 专题(一)
分布式·mysql·tidb
TiDB_PingCAP21 天前
TiDB 观测性解读(一)丨索引观测:快速识别无用索引与低效索
数据库·tidb·索引优化
PingCAP22 天前
TiDB 观测性解读(一)丨索引观测:快速识别无用索引与低效索引
数据库·tidb
24k小善1 个月前
flink集成tidb cdc
大数据·flink·tidb
TiDB_PingCAP1 个月前
海量数据融合互通丨TiDB 在安徽省住房公积金监管服务平台的应用实践
分布式·tidb·htap