• Home
  • Archives
  • 随笔
所有文章 友链 关于我

  • Home
  • Archives
  • 随笔

TIDB 从学习到看论文头疼

发布于: 2021-08-12
更新于: 2023-07-09

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架构原理知识
© 2024 tyrantqiao 本站总访问量次 本站访客数人次 载入天数...载入时分秒...
  • 所有文章
  • 友链
  • 关于我

tag:

  • 复盘
  • 我
  • 规划
  • java
  • 面试
  • 源码
  • 架构
  • Hadoop
  • HTTP
  • TCP
  • 学习笔记
  • IDEA
  • maven
  • idea
  • Java
  • jdk
  • 面经
  • linux
  • 爱情
  • mysql
  • 性能
  • sql
  • Mysql
  • JAVA
  • 技术
  • Redis
  • MQ
  • Spring
  • 数据库
  • TIDB
  • spring
  • unity
  • chatgpt
  • 经验分享
  • 前端
  • redis
  • vue
  • git
  • shadowsocks
  • hexo
  • blog
  • bug
  • 开发
  • 业务
  • jvm
  • 算法
  • MySQL
  • nginx
  • Linux
  • mq
  • db
  • springCloud
  • ssh
  • python
  • 爬虫
  • test
  • vim
  • 影视剧
  • 中间件
  • 事务
  • 性格
  • 音乐
  • 程序员
  • 随笔
  • mybatis
  • 演讲
  • 域名
  • 猫咪
  • 她
  • github
  • 计划
  • 旅游
  • 软件
  • 心理
  • 情商
  • 幽默
  • 才艺
  • 穿搭
  • 编程
  • 排序
  • 查找
  • 缓存
  • 网络
  • 设计模式
  • c
  • 课程设计
  • centos
  • 数学
  • 本网站主题yilia设计者的主页
如果有问题或者想讨论的可以联系[email protected]或者[email protected]