所有配置
1.说明
下表中所有的环境变量均需要在使用时添加前缀 TerarkZipTable_,如对于 localTempDir 变量,您需要设置的环境变量是TerarkZipTable_localTempDir.
这些环境变量中,只有 TerarkZipTable_localTempDir 是必须的,其他的环境变量都可以留空使用默认值.
2.参数表
1) TerarkZipTableOptions 类中的参数
| type | env var suffix orTerarkZipTableOptions:: member |
Default | 解释说明 |
|---|---|---|---|
| string | localTempDir | * | 临时文件目录 |
| enum string |
entropyAlgo | NoEntropy |
熵编码对压缩率提高有限, 但对读性能影响巨大 |
| string | indexType | IL_256 |
指定 rank-select 的实现方式 |
| int | checksumLevel | 3 | 3 对整体数据做 checksum |
| int | indexNestLevel | 3 | 越大,压缩率越高,读性能越低 |
| int | indexNestScale | 8 | 越大,压缩率越高,读性能越低 |
| int | indexTempLevel | 0 | 越大,索引创建的内存用量约小,索引创建的速度越慢,-1: 禁用临时文件0: 智能判断,仅对大索引使用临时文件 |
| int | terarkZipMinLevel | 0 | 仅在大于等于该 level 时,才使用 Terark 的 SSTable |
| int | keyPrefixLen | 0(禁用) | For MongoRocks, MyRocks ... 一般上层数据库会用一个 BigEndianUint 作为下层 KeyValue 引擎中 Key 的前缀,用来区分不同的 table/index/...,相同的 table/index/... 一般具有相同的 schema,从而 KeyValue 引擎可以进行更好的优化 |
| int | offsetArrayBlockUnits | 0(禁用) | 合法值: {0,64,128} |
| bool | disableSecondPassIter | false | false 对临时文件需求小,但压缩速度慢,true: 磁盘空间必须充足 |
| bool | useSuffixArrayLocalMatch | false | 可以提高压缩率,但会降低压缩速度 |
| bool | warmUpIndexOnOpen | true | 预热 index |
| bool | warmUpValueOnOpen | false | 预热 value data |
| float | estimateCompressionRatio | 0.2 | 压缩率预估,SST Build 过程中,TerarkZipTable 并不会写 SST(Finish 时写才 SST),但 rocksdb 需要 SST Builder 报告 SST 文件尺寸,所以使用该预估值向 rocksdb 报告预估的 SST 文件尺寸,用来控制最终输出的 SST 文件尺寸 |
| bool | enableCompressionProbe | true | 自动检测数据冗余度(是否可压缩)。 该参数用来更准确地预估 SST 文件的尺寸,并提高压缩速度(当数据不可压缩时,就禁用压缩) |
| float | sampleRatio | 0.03 | 采样比率:对于单个 SST,全局字典的尺寸占 value 总尺寸的比例,全局字典的上限是 2G,如果超过 2G,也只保留 2G。 全局字典需要常驻内存,所以,如果数据的总尺寸比内存大很多,应该将该值适当调小,建议所有 SST 文件的全局字典的总尺寸不超过系统总内存的 30% |
| float | indexCacheRatio | 0 | 典型值 0 或者较小的值,如 0.003 在使用嵌套 Trie 树索引时,indexCache 可以提高点查(Point Query)的性能,0.003 大约可以将点查的性能提高 10% |
| int64 | softZipWorkingMemLimit | 系统总内存⁄8 | 软限制 compact 的内存用量 |
| int64 | hardZipWorkingMemLimit | 系统总内存⁄4 | 硬限制 compact 的内存用量 |
| int64 | smallTaskMemory | 系统总内存⁄32 | 小 compact(或 memtable flush) 的优先级更高 |
2) ColumnFamilyOptions 类中的参数
| type | env var suffix orColumnFamilyOptions:: member |
Default |
|---|---|---|
| enum by string |
compaction_style | universal |
| int | num_levels | 7 |
| int64 | write_buffer_size | 系统总内存⁄32 |
| int | max_write_buffer_number | 3 |
| int64 | target_file_size_base | 系统总内存⁄2 |
| int | target_file_size_multiplier | 1 |
| int | level0_file_num_compaction_trigger | rocksdb default |
3) DBOptions 类中的参数
| type | env var suffix or DBOptions:: member |
Default |
|---|---|---|
| int | base_background_compactions | 3 |
| int | max_background_compactions | 5 |
| int | max_background_flushes | 3 |
| int | max_subcompactions | 1 |
3) ColumnFamilyOptions::compaction_options_universal 中的参数
| type | env var suffix 或者 ColumnFamilyOptions::compaction_options_universal:: member |
Default |
|---|---|---|
| int | min_merge_width | 4 |
| int | max_merge_width | 50 |
5) 其他参数
| type | env var full name | Default |
|---|---|---|
| string | TerarkZipTable_blackListColumnFamily |
empty |
| int | DictZipBlobStore_zipThreads |
min(8, physical_cpu_num) |
TerarkZipTable_blackListColumnFamily- 只要定义了环境变量 TerarkZipTable_localTempDir,就会使用 TerarkZipTable,用户代码中设置的 option 参数就会全部失效
- 用户可以把一些
column families放在黑名单,他们将不会使用TerarkZipTable - 多个
column families需要通过 ',' 分割:
TerarkZipTable_blackListColumnFamily=cf1,cf2,cf3 - 可以考虑将
日志数据或者短时间存在的数据放到黑名单
DictZipBlobStore_zipThreads- 如果这个变量不是
0, TerarkDB 的 SST Builder 会通过read -> compress -> write这个过程来压缩,这个过程由所有的 SST Builder 共享。这个变量代表上述过程的compress阶段的线程数. - 如果该变量比物理 CPU 数更大,将使用物理 CPU 数作为使用值.
- 如果该变量是
0, TerarkDB 将不会使用read -> compress -> write这个过程,而是由调用线程来执行压缩.
- 如果这个变量不是