delete操作的时候,tidb具体是操作了什么

delete操作可认为也是向rocksdb中追加新的KV数据,其Key与要删除的KV数据的Key相同,Value是KTypeDeletion。

Raft层面的流程大概是:
1、Leader将delete操作转换为一条Raft Log,Raft Log中包含了Region ID、Raft Log ID和具体的日志内容
2、Append:Leader将Raft Log持久化到本地RocksDB(raftdb)中
3、Replicate:Leader将Raft Log复制到Followers进行同步, Followers接收到Raft Log后,会持久化到本地RocksDB(raftdb)中,并反馈Leader同步成功
4、Committed:当Leader收到多数派节点(包含Leader自己)Append成功的消息后,Leader认为这条Raft Log提交成功
5、Apply:将raftdb中的Raft log取出来,应用到kvdb中

RocksDB接收到写入的这条KV数据后,会先写入memtable,然后经过Immutable memtable刷到磁盘上的SST文件中,在RocksDB执行某次compaction的过程中,删除操作才会真正执行

2 个赞