Skip to content

SingleFastTable

rockeet edited this page Oct 16, 2023 · 5 revisions

简介

SingleFastTable 使用 CSPPTrie 存储索引和数据,不执行任何压缩,目的是提供最高的读写性能,主要将它通过 DispatchTable 配置在 LSM 的较上层,相应的 Flush/Compact 在 DB 结点上执行。

相比 ToplingFastTable,SingleFastTable 只有一个 cspp 对象,结构更简单,速度也更快一丢丢。

配置

SingleFastTable 是通过 SidePlugin 进行配置的,在(yaml)配置文件中,举例如下:

  fast: SingleFastTable # 简单配置的 简化版配置语法
  fast2: # 完整版配置语法
    class: SingleFastTable
    params: # 即便用完整版配置语法,params 也可以省略
      # RocksDB 自身的 write 有很大的性能损失,ToplingDB 性能太高,此损失难以接受
      # {kRocksdbNative, kToplingMmapWrite, kToplingFileWrite}
      writeMethod: kToplingFileWrite # 默认 kToplingFileWrite
      fileWriteBufferSize: 16K # default 8K
      # 默认 true, false 表示仅随机抽取 key,anchor.size 按均分填入,忽略实际尺寸,不建议
      accurateKeyAnchorsSize: true
      # 仅当 accurateKeyAnchorsSize 为 true 时有效
      # default 0, ApproximateKeyAnchors: 每个 key 覆盖多大 SST 尺寸(字节数)
      # default 0 表示 ApproximateKeyAnchors 最多返回 256 个 Anchor(ukey, size)
      keyAnchorSizeUnit: 100K
      warmupLevel: kValue # {kNone,kIndex,kValue} 默认 kValue 表示 Open SST 时读入全部内容
      useFilePreallocation: true # 默认 true, 表示创建 SST 时预分配文件空间
      # sst 中 value 的平均长度满足条件时,使用 pread,否则使用 mmap
      minPreadLen:  -1 # 默认 -1, 表示不使用 pread
      maxPreadLen: 32K # 除作为 pread 条件之外,使用 mmap 且当前 value 大于该配置时,执行 madivise(POPULATE_READ)
      minPreadLevel: 1 # 当 sst 在 LSM 中所处的 level 大于等于该配置时,使用 pread
      debugLevel: 0 # 默认 0