rocksdb读取数据

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
每个 TiKV 实例中有两个 RocksDB 实例,一个用于存储 Raft 日志(通常被称为 raftdb),另一个用于存储用户数据以及 MVCC 信息(通常被称为 kvdb)。
客户端提交成功,是写入raft日志就算返回成功,还是必须要写入kvdb
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】

分布式数据库比较复杂,你可以看看101课程里sql执行部分
TiDB 数据库核心原理与架构(101) (pingcap.com)

我的理解:
针对简单的一条语句
insert into t values(1);
commit;/rollback;
在Raft层面的流程大概分5步:
1、Propose: Leader将insert操作转换为一条Raft Log,Raft Log中包含了Region ID、Raft Log ID和具体的日志内容
2、Append:Leader将Raft Log持久化到本地RocksDB(raftdb)中
3、Replicate(Followers Append):Leader将Raft Log复制到Followers进行同步, Followers接收到Raft Log后,会持久化到本地RocksDB(raftdb)中,并反馈Leader同步成功
4、Committed:当Leader收到多数派节点(包含Leader自己)Append成功的消息后,Leader认为这条Raft Log提交成功
5、Apply:将raftdb中的Raft log取出来,应用到kvdb中
第5步不一定会执行,这时用户还没有执行事务上的commit,如果用户执行了commit,就会执行第5步,如果用户执行了rollback,就不会执行第5步了。

1 个赞

需要写入kvdb

写入kvdb才是真正的写入