深入浅出 TiDB MVCC:揭秘分布式数据库中的多版本并发控制

本文详细介绍了TiDB分布式数据库如何通过MVCC实现多版本并发控制,处理并发写冲突,以及如何保证ACID特性,包括原子性、一致性、隔离性和持久性。同时讨论了性能优化策略和数据管理方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、简介

二、TiDB MVCC

        2.1 MVCC 流程

        性能问题与优化

        数据清理和归档

        2.2 MVCC 出现冲突如何解决

三、TiDB ACID 实现原理


一、简介

        TiDB 是开源的分布式数据库,是一款同时支持在线事务处理与在线分析处理的融合型分布式数据库产品,具备水平扩容或缩容、金融级高可用、实时 HTAP、云原生分布式数据库、兼容MySQL5.7 协议和 MySQL 生态等重要特性。目标是为用户提供一站式 OLTP、OLAP、HTAP 解决方案。

        很多数据库都会实现多版本并发控制(MVCC),TiKV也不例外。设想这样的场景,两个客户端同时去修改一个 Key 的 Value,如果没有多版本控制,就需要对数据上锁,在分布式场景下,可能会带来性能及死锁问题。

        想要了解 TiDB 的 KV 存储请先查阅以前的文章:TiDB内核解密:揭秘其底层KV存储引擎如何玩转键值对_tidb 的key value是如何做到的-优快云博客

二、TiDB MVCC

        TiKV 的 MVCC 实现是通过在 Key 后面添加版本号实现的,简单来说,没有 MVCC 之前,可以把 TiKV 看成:

Key1 -> Value
Key2 -> Value
……
KeyN -> Value

        有了MVCC之后,TiKV的Key排列是这样的:

Key1_Version3 -> Value
Key1_Version2 -> Value
Key1_Version1 -> Value
……
Key2_Version4 -> Value
Key2_Version3 -> Value
Key2_Version2 -> Value
Key2_Version1 -> Value
……
KeyN_Version2 -> Value
KeyN_Version1 -> Value
……

        注意,同一个 Key 的多个版本,版本号较大的会被放在前面,版本号小的放在后面,这样当用户用户通过一个 Key + Version 来获取 Value 时,可以通过 Key 和 Version 构造出 MVCC 的Key,也就是 Key_Versoin。然后可以通过 RocksDB 的 SeekPrefix(Key_Version) API,定位到第一个大于等于这个 Key_Version 的位置。

        2.1 MVCC 流程

        TiDB 实现 MVCC(多版本并发控制)的主要目的是为了支持高并发读写场景下的事务处理,同时保持数据的一致性。以下是 TiDB 中 MVCC 实现的简化流程概述:

  1. 启动事务获取事务 ID:当一个事务开始时,TiDB 的 PD 组件会分配一个全局唯一的事务ID,也称为 Start Timestam(StartTs)࿰
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超越不平凡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值