当前位置: 首页 > news >正文

【赵渝强老师】TiDB的MVCC机制

在这里插入图片描述

TiDB是一款开源的国产分布式关系型数据库。TiKV是TiDB的行存引擎,它支持多版本并发控制(Multi-Version Concurrency Control,MVCC)。假设有这样一种场景:某客户端A在写一个Key,另一个客户端B同时在对这个Key进行读操作。如果没有数据的多版本控制机制,那么这里的读写操作必然互斥。在分布式场景下,这种情况可能会导致性能问题和死锁问题。有了MVCC,只要客户端B执行的读操作的逻辑时间早于客户端A,那么客户端B就可以在客户端A写入的同时正确地读原有的值。即使该Key被多个写操作修改过多次,客户端B也可以按照其逻辑时间读到旧的值。

视频讲解如下

【赵渝强老师】TiDB的MVCC机制

TiKV的MVCC是通过在Key后面添加版本号来实现的。没有MVCC时,可以把TiKV看作如下的Key-Value对:

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

有了MVCC之后,TiKV的Key-Value排列如下:

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
……

《TiDB数据库从零开始》

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

相关文章:

  • 【MySQL数据库】用户管理
  • day15 python 复习日
  • LabVIEW温控系统热敏电阻滞后问题
  • SpringBoot校园失物招领平台源码开发实现
  • CFD计算流体力学开源工程介绍
  • 数据库-数据类型,表的约束和基本查询操作
  • 探秘 RocketMQ 的 DLedgerServer:MemberState 的技术解析与深度剖析
  • HttpPrinter 是一款功能强大的跨平台 Web 打印解决方案
  • JAVA实战开源项目:纺织品企业财务管理系统 (Vue+SpringBoot) 附源码
  • C++基础代码解释
  • 【iOS】消息流程探索
  • 苍穹外卖12
  • AD 多通道设计---多图纸
  • Python----机器学习(模型评估:准确率、损失函数值、精确度、召回率、F1分数、混淆矩阵、ROC曲线和AUC值、Top-k精度)
  • vue3 - keepAlive缓存组件
  • Python的ArcPy基于Excel表格对大量遥感影像批量重分类
  • 传感器数据处理笔记
  • Spring Boot Jpa封装快速构建Specification、OrderBy、Pageable的查询条件
  • Docker 容器化部署
  • Learning vtkjs之MultiSliceImageMapper
  • 当Z世代与传统戏曲在春日校园相遇
  • 国铁集团:5月4日全国铁路预计发送旅客2040万人次
  • 韩国国民力量党宣布金文洙为该党总统候选人
  • 准80后遵义市自然资源局局长陈清松任仁怀市委副书记、代市长
  • 言短意长|今年五一假期的一个新变化
  • 5月1日,多位省级党委书记调研旅游市场、假期安全等情况