原理疑问

单选题:关于 TiKV 数据持久化,下列说法不正确的是?

选项:
A. RocksDB 有 2 个实例,分别用来持久化 raft log 和 key value 数据
B. RocksDB 中 WAL 用来保证写不丢失
C. 对于删除操作,只需要在原 key value 数据上标记已删除即可
D. RocksDB 中,除了 Level 0 层的数据,其他 Level 都是单一排序持久化的

这题答案是C,就是不理解,lsm引擎删除操作不就是打个标记吗

2 个赞

根据这篇文档的描述,删除是追加一条新的记录,不修改原始的数据。

1 个赞

不只是标记,还会有其他操作,说的不全

其他选项都很正确,LSM tree 的删除是写入一个删除的key,然后等这个key和下面的key通过compact消消乐,最终就删掉了。

C 选项错在表述过于简化且具有误导性,没有体现出“删除标记写入”这个关键操作以及后续的 Compaction 过程

  • TiKV 是MVCC + 多版本模型,删除不是简单标记删除。
  • 删除操作会写入一条 新的删除标记(Delete 版本),而不是在原有 key-value 上打标记。
  • 真正的物理删除由 Compact 过程在后台回收。

LSM tree删除也是写入一条新的数据

感觉是有点误导性,应该是类似于HBase,删除是新加一条记录(打上删除标记的记录),然后展示的时候根据时间戳给出最新结果。

C选项听起来比较容易有歧义

感觉选C应该是不对吧

我也同样有点疑惑

我的理解删除标记不是在原始记录上打的

感觉C这个选项也不太对

我觉得选项C不正确:LSM树删除并非在原数据上原地标记,而是写入一条新记录表示删除,原数据仍存在,需通过Compaction清理。类似docker那种,RocksDB采用追加写,不会直接修改已持久化的数据。

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