• Home
  • 归档
文章检索 作品与友邻 关于我
暴君乔博客
Home 归档

TIDB 从学习到看论文头疼

发布于: 2021-08-12
更新于: 2023-07-09
文章目录
  1. TiDB
    1. 架构
    2. 原理

TiDB

New-sql 型的数据库

架构

TiKV

  • 使用 key-value 模型
  • 有巨大的 Map,存储 Key-value pairs(键值对)
  • 按照 key 的二进制顺序有序,也就可以 seek 到某个 key 位置
    • 不断调用 next()获取比 key 大的 key-value
  • 存储上借助 RocksDB 负责数据的落地

    Facebook 开源的单机 KV 存储引擎

Raft

选用 Raft 一致性协议算法,和 Multi-Paxos 实现一样的分布式事务功能

  • 功能
    • Leader(主副本)选举
    • 成员变更(eg:增删副本,转移 leader 等操作)
    • 日志复制

日志复制

在按照数据分散存储时,按照 key 分 Range,某一段[^1]连续的 key 保存在存储节点上。有 PD 组件负责将 Region 散布到所有的节点上面去,此外 Region 会有多个副本 Replica,通过 Raft 保持一致,其中有个 replica 作为 leader,负责所有的的读写。

原理

MVCC 多版本控制协议

TiKV 通过在 key 后面加版本号实现

TiDB多版本key-val

用户通过 RocksDB 的 SeekPrefix(key_version)API,找到第一个大于等于 key_version 的位置

事务

采用 Google 在 BigTable 中使用的事务模型 Percolator 协议实现。

把一条逻辑 sql 拆为多个 KV 的 set 语句进行执行

tx= tiKV.Begin();
    tx.set(Key1,Value1);
    tx.set(Key2,Value2);
    tx.set(Key3,Value3);
tx.commit();
Percolator
优点 缺点
为 BigTable 的单行事务提供多行事务功能 需持久化 lock 列+列数据拆为 write 和 data (导致读写吞吐受到影响)
并发控制+failover 简洁优雅 提交操作=>到具体的返回客户成功需要三次 IO 操作(IO+RPC)1️⃣prewrite primary 2️⃣prewrite secondaries 3️⃣commit primary
Snapshot Isolation+failover 的安全保障
Prewrite阶段

Prewrite阶段

commit阶段

commit阶段

Failover 机制

采用 lazzy 形式,一个事务的 failover 由另外一个事务读触发,如果一个事务读 key 时,发现上锁了,按 Snapshot-Read 要求等锁删除才能读取。
等一段时间后,会认为事务可能因为 client clash or 网络分区 hang 住,尝试用 rollback or 提交锁事务来清理锁。

failover机制

[^1]: Region 默认 96MB,按照[startKey,endKey)分布

TIDB 从学习到看论文头疼
/archives/ccd61f80/
作者
tyrantqiao
发布于
2021-08-12
更新于
2023-07-09
许可协议
CC BY-NC-SA 4.0
赏

蟹蟹大佬的打赏,大家一起进步

支付宝
微信
  • 数据库
  • TIDB

扫一扫,分享到微信

微信分享二维码
面经实战到啥都会
Hadoop架构原理知识
© 2026 tyrantqiao 本站总访问量次 本站访客数人次 载入天数...载入时分秒...
  • 文章检索
  • 作品与友邻
  • 关于我

展开标签

  • 随笔
  • 旅行
  • Java
  • 面经
  • 源码
  • 计算机网络
  • 技术
  • 架构
  • Hadoop
  • IDEA
  • maven
  • JDK
  • Linux
  • MySQL
  • 性能
  • 数据库
  • Redis
  • MQ
  • Spring
  • SquirrelFin
  • 记账
  • Android
  • 个人财务
  • unity
  • TIDB
  • chatgpt
  • 前端
  • Vue
  • Git
  • Hexo
  • shadowsocks
  • 问题排查
  • 业务
  • JVM
  • 算法
  • nginx
  • ssh
  • Python
  • 爬虫
  • test
  • vim
  • 影视剧
  • 中间件
  • 事务
  • 表达
  • 运动
  • mybatis
  • AI
  • 产品
  • 家装
  • 土巴兔
  • 域名
  • github
  • 软件
  • 个人项目
  • Leaves
  • Chrome
  • 浏览器插件
  • 开源
  • Balance Voice
  • 穿搭
  • 幽默
  • 画画
  • 缓存
  • 摄影
  • c
  • 课程设计
  • 调酒
  • 设计模式
  • 数学

Collection

作品与友邻

我做的小工具、朋友的站点和一些长期值得回访的灵感来源。

  • 土 土巴兔 AI 导购交互演示 可点击体验用户导购、平台运营、装修公司、材料商及 AI 话术知识库的多端增长流程。 /demos/tubatu-ai-guide/
  • L Leaves 行程记录 我做的行程记录页面小工具,用来沉淀旅行路线、日程安排和途中的灵感。 https://leaves.tyrantqiao.com/
  • 本 本网站主题yilia设计者的主页 http://litten.me/
tyrantqiao的头像

tyrantqiao

github rss qq mail facebook linkedin

About

关于我

代码、海浪和持续折腾,都是生活的一部分。

<div class="aboutme-card"> <p class="aboutme-eyebrow">tyrantqiao</p> <h3>Java 全栈开发</h3> <p>常年和 Java、后端服务、前端工程、数据与部署打交道,喜欢把复杂问题拆开、写清楚,也把踩坑过程整理成文章留给后来的人。</p> <div class="aboutme-tags"> <span>Java</span> <span>Full Stack</span> <span>Backend</span> <span>Frontend</span> <span>Extreme Sports</span> </div> <p>工作之外偏爱冲浪等极限运动,享受在浪上找平衡,也享受在代码里找边界。</p> <div class="aboutme-contact"> <a href="mailto:[email protected]">Gmail</a> <a href="mailto:[email protected]">QQ Mail</a> </div> </div>