关于 TiKV Raft 快照的疑问

背景:
正如这个帖子所描述的,当 Raft 加载快照时,如果是 ingest 文件的话会主动去清理旧数据。

疑问:
由于一个节点上所有 Region (Raft 组) 数据保存在同一个 RocksDB 实例中,假定当其中一个 Raft 组出现问题后恢复时需要加载快照(该节点的其他 Raft 组都正常)。根据上面帖子描述,那么它就需要删除该 Raft 组所对应的 Region 数据,而由于所有 Region 的数据都保存在同一个 RocksDB 实例中(也就是说所有数据混在各个 SST 文件中),TiKV 是如何实现删除的?

由于对 TiKV 了解有限,学习中遇到这个疑问,希望你能帮助解答我的疑惑或提供点线索,非常感谢。有可能我的问题描述不清楚或理解有误,也请回复本帖让我知道,谢谢 ^ _ ^。

1 个赞

其实可以这么理解,平时的修改数据(包括insert、update、delete)都是修改数据的,region的范围区间在PD里面是有保存的,所以可以通过PD获取对应的region信息,再通过LSM 树的不断向下合并,就可以实现对某个region的删除了。

2 个赞

谢谢你的回答~
上面的删除是指在加载快照前,根据 PD 保存的 region 范围区间,调用 DeleteRange 来删除对应区间的数据吗?

是的,DeleteRange 实现上包括 DeleteFilesInRange + DeleteKeyByScan

2 个赞

知道了~ 非常感谢你的回答,谢谢 :slight_smile:
p.s: 可惜只能点击一个 <对我有用>

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。