关于TiKV keys split checker在Raw API下的一些疑问

你好!

在阅读TiKV源码的过程中,我们发现 split_check 下的 keys checker 在检查键时跳过了 Column Family != CF_WRITE的所有键:

fn on_kv(&mut self, _: &mut ObserverContext<'_>, key: &KeyEntry) -> bool {
    if !key.is_commit_version() {
        return false;
    }
    ...
}

pub fn is_commit_version(&self) -> bool {
    self.cf == CF_WRITE
}

因此,假如我使用的是Raw API,那么 keys checker 将无法发挥作用?不知道我这样理解是否正确?如果正确的话,请问这样设计是基于什么考量?

稍等,稍后找研发同事帮您回答下,多谢。

splitchecker 有多个子类。rawapi 会使用 default 中的 range 进行切割。

确实有多个子类。包括 size, half, keys, table。

对于keys checker来说,由于在 on_kv 方法中首先判断了 is_commit_version,由于Raw API写入的KV存储在default Column Family 中,因此这里会返回false咯?于是函数直接就返回了。

因此,最终在keys checker中调用split_keys方法时返回的就是一个空集合。那代表说Raw API写入的KV在这里检查后不会产生任何split keys?

我了解Raw API写入的KV会使用其他Checker来进行分裂。

我只是想确认一下,Keys checker对于Raw API写入的KV是不是不会检测的?如果是,那是否代表:

# region-max-keys = 1440000
# region-split-keys = 960000

这两个配置在Raw API模式下就无效了?

会检测。这两个配置在 raw api 下仍然是有效的。

其余的 Checker 会计算 keys 的数量

其余的Checker具体指哪个Checker呢?可以说明一下吗?谢谢!

size.rs