暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

从零开始学TiDB(3)TiKV 持久化机制

kk的DBA随笔 2024-12-10
17

如图,每个 TiKV 有两个 rocksdb 实例,rocksdbKV 复制存储键值对,rocksdb raft 负责存储复制的日志 。

每个 region 及其副本构成了 raft group。这个 OB 的 Zone 其实有点类似,在 OB 中每个 Unit 及其副本构成了 paxos 组,在 TiDB 中叫 raft group。当然算法不同,实现的方式也不同。

RocksDB 介绍:

具体上讲,TiDB 并不把数据直接写到磁盘上,而是写在 RocksDB 上,而是先写到 RocksDB 上。

RocksDB 写操作(内存):

下图总结了 RocksDB 写操作的流程。可以看出 LSM Tree 对写操作进行了很大力度的优化,所以 LSMTree 对写很友好,但对读不那么友好,如果数据在 mem Table 中还好说,但如果不在 Mem Tble 中 下一步应该去 immutable 中去中,如果 immutable 中没有 又会到磁盘中去找。

RocksDB 写操作(磁盘):

RocksDB 读操作:

读取 SST 文件时,某个 SST 文件是上一层 SST 文件的集合,所以在里边把 Key 从小到大排序,如果要找的 key 不在在这个区间,则会找下一个 SST 文件。如果在,则会用二分查找法。

列簇:

 

两个列簇可以存放不同表的键值对,管理的时候,不同表到不同列簇管理,这是 TiDB 的数据分片技术。如果写的时候不指定某个列簇,则会使用默认的列簇(default)。但 WAL 日志是部分列簇的,不管使用哪个列簇都会共享一份 WAL 日志。


文章转载自kk的DBA随笔,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论