nebula exchange 导入 SST 文件,block_size 不一致,行为未定义?

  • nebula 版本:3.5.0
  • 部署方式:分布式
  • 安装方式:RPM
  • 是否上生产环境:Y
  • 硬件信息
    • 磁盘( 推荐使用 SSD):INTEL SSDPE2KX040T8
    • CPU、内存信息:32core,128GB
  • 问题的具体描述

nebula-storage.conf.production的配置,默认block_size=8192

--rocksdb_block_based_table_options={"block_size":"8192"}

但 com.vesoft.exchange.common.writer.NebulaSSTWrite 没有相应的block_size设置,那默认就是4096。这样是否会造成导入的sst文件有问题?我查询了rocksdb相关的文档,没找到结论。

val options = new Options()
  .setCreateIfMissing(true)

val env                   = new EnvOptions()
var writer: SstFileWriter = _

override def prepare(): Unit = {
  writer = new SstFileWriter(env, options)
  writer.open(path)
  isOpen = true
}
2 个赞

当外部生成的sst文件与rocksdb实例的block_size不一致时,导入的sst文件可以正常参与数据的查询修改删除等操作,sst文件不会有问题。
在rocksdb进行compact操作时,会进行文件合并、LSM Tree层级下移,这个过程会让sst文件都保持相同的block_size的(这个描述的准确性还得大佬 @critical27 帮忙确认下 )。 至于ingest过程中会不会对sst文件的block_size进行重新分配,目前还没看到有资料提到,要看下rocksdb DB::IngestExternalFile()代码。

2 个赞

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