Skip to content

系统配置

系统配置用于高级工程师用户进行系统调优所做的配置,普通用户一般无需关注这个配置,使用默认值就可以了。

说明

系统配置文件是一个 YAML 文件,文件名为config.system.yaml,它的内容是一个 YAML 对象,包含以下字段:

opClientNum:

连接处理工作线程数,是一个正整数配置,默认值:10000,最大值:50000

requestWorkerNum:

请求处理工作线程数,是一个正整数配置,最大值:32767,默认值:服务器 cpu 个数

queryConcurrency:

查询的并发数量,即同一时间可以进行查询的数量,是一个正整数配置,最大值 24,默认值:16

enableBlockFiltering:

index 块过滤启用标识,用来标识在执行查询的时候是否先从 index 文件中过滤不符合条件的块,在大多数查询是条件查询的情况下,开启能提高查询效率,在大多数查询都是全量查询的情况下,不启用能提高查询效率。它是一个布尔类型配置,默认值:false

clearCache:

系统缓存清理的相关配置,它有 3 个子项:

  1. enable:
    是否开启清除缓存,是一个布尔类型配置,默认值:false
  2. interval:
    清除缓存的周期,是一个带单位的正整数配置,可选单位[ms, s, m, h](即毫秒、秒、分、时),默认值:1m
  3. rootPassword:
    清除缓存的系统密码,它是一个字符串配置,默认值:""

strongConsistency:

是否保证强一致性,强一致性即读取到的数据要么全部是最新的,要么全部是旧的,非强一致性即允许读取到的数据部分是新的,部分是旧的。它是一个布尔类型配置,默认值:false

txAckTimeout:

insert、delete、update 等事务 ack 超时时间,提交了的事务,在这个超时时间内没有收到 ack 消息就会回滚提交,是一个带单位的正整数配置,可选单位[ms, s, m, h](即毫秒、秒、分、时),默认值:10s

txTimeoutHour:

insert、delete、update 等事务超时时间,事务在过了超时时间,还没完成的,将自动清除。它是一个 0 或正整数配置,表示多少小时。特别的为 0 时,表示不超时,即事务会一直保留不会被自动清除。

webSessionExpireSeconds:

web 界面 session 过期时间,是一个正整数配置,单位秒,默认值:1800

insert:

数据写入相关配置,特别的该配置的部分内容将应用到 memcache dump,它有 5 个子项,分别是:

  1. compression:
    存储数据文件压缩模式,是一个字符串类型配置,可选值:none, lz4, zstd, zstdBestSpeed,默认值:zstdBestSpeed
  2. indexFilterModel:
    存储数据文件中,过滤器类型,可选值:BBloom、Bloom,默认值:BBloom
  3. archiveDirect:
    标识写入的数据是否直接存成归档文件(后缀为 archive 的文件),为 true 则存为 archive 文件,为 false 则存为碎块文件(后缀为 aaf 的文件)。它是一个布尔类型的值,默认值:false
  4. aaf:
    存为 aaf 文件的相关配置,它包含 2 个子项,分别是:
    (1). maxFileSize:
    存储文件最大大小,它是一个带单位的正整数配置,可选单位[b/B, k/K, m/M, g/G],默认值:256M
    (2). maxFileDataSize:
    存储文件中未压缩数据最大大小,它是一个带单位的正整数配置,可选单位[b/B, k/K, m/M, g/G],默认值:256M
  5. archive:
    存为 archive 文件的相关配置,它包含 3 个子项,分别是:
    (1). maxFileSize:
    存储文件最大大小,它是一个带单位的正整数配置,可选单位[b/B, k/K, m/M, g/G],默认值:1G
    (2). maxFileDataSize:
    存储文件中未压缩数据最大大小,它是一个带单位的正整数配置,可选单位[b/B, k/K, m/M, g/G],默认值:2G
    (3). maxRowCacheSize:
    写文件时,缓存空间大小,它是一个带单位的正整数配置,可选单位[b/B, k/K, m/M, g/G],默认值:2G

insertMemCache:

数据先写到内存缓存的方式写入数据的相关配置,它有 3 个子项,分别是:

  1. dumpTimeout:
    内存缓存 dump 到磁盘的时间间隔,带单位的正整数配置,可选单位[s, m, h](即秒、分、时),默认值:10s。由于内存数据在掉电等系统异常情况下会丢失,所以高频率地将内存数据 dump 到磁盘,可以减少数据丢失的可能,但高频的 dump 也将更大量的消耗系统资源,所以需要根据系统环境合理设置该值。
  2. maxSizeBytes:
    一张表内存缓存最大量,当达到这个值是数据 dump 到磁盘,在表定义中没有设置 memSpace 选项时有效,它是一个带单位的正整数配置,可选单位[b/B, k/K, m/M, g/G],默认值:2G,最小值:64M
  3. maxRowCount:
    一张表内存缓存行数的最大值,当达到这个值是数据 dump 到磁盘,它是一个正整数配置,默认值:1000000
  4. dumpArchive:
    是否直接 dump 到 archive 文件,是一个布尔类型配置,默认值:false, 为 true 时,内存数据直接 dump 到 archive 文件,为 false 时,内存数据 dump 到 aaf 文件

exec:

update/delete事务操作相关配置,它有1个子项,分别是:

  1. maxRowIDSize:
    update/delete操作时内存里面最大的rowID大小,超过这个大小的rowID将会存储到磁盘,走磁盘模式删除路径,可选单位[b/B, k/K, m/M, g/G]。它是一个带单位的正整数配置,默认值:1G

realtime:

实时表相关配置,实时表的表名为普通数据表的表名加_rt 构成,实时表的结构和对应的普通数据表结构相同,只是存储的是一个 key 的最新一条记录,它有 1 个子项,分别是:

  1. saveInterval:
    保存快照文件的间隔时间,它是一个带单位的正整数配置,可选单位[ms, s, m, h],默认值:60s

tidy:

数据文件整理相关配置,它有 4 个子项,分别是:

  1. disable:
    是否禁用文件整理功能,它是一个布尔类型配置,true 表示不开启文件整理,false 表示不禁用,即开启文件整理,默认值:false

  2. runInterval:
    定时触发整理的轮询时间间隔,用于在没有文件改变事件触发整理时,定时去触发整理。因为一次整理可能不会将全部待整理的文件整理完(由于资源使用的限制或者整理时没有达到整理条件,例如 aaf 文件保留时间没有过期),所以需要定时去触发,使没有变化的文件目录能够有机会去进行整理。它是一个带单位的正整数值,可选单位[ms, s, m, h],默认值:1m

  3. aaf:
    aaf 文件整理相关配置,它有 4 个子项,分别是:

  4. disable:
    是否禁用 aaf 文件整理功能(aaf 文件合并和 aaf 转 archive 文件),它是一个布尔类型配置,true 表示不开启 aaf 文件整理,false 表示不禁用,即开启 aaf 文件整理,默认值:false

  5. aliveTime:
    没有达到转换为 archive 文件大小的 aaf 文件存留时间,即 aaf 文件超过多少时间没有更新将被转为 archive 存档文件。它是一个带单位的正整数值,可选单位[ms, s, m, h],默认值:24h

  6. maxFileSize:
    aaf 文件最大大小,超过这个大小的 aaf 文件被转为 archive 文件(aaf 转 archive 功能没有禁用时),它是一个带单位的正整数配置,可选单位[b/B, k/K, m/M, g/G],默认值:256M

  7. busyFilesCount:
    系统中 aaf 文件可存留的最大数量,当系统中存在的 aaf 文件超过这个数量时,将不能写入数据,并返回系统繁忙的错误信息,直到 aaf 文件被整理减少到该值以下,才恢复数据写入能力。系统中 aaf 文件数量较多会降低查询性能并需要使用较多系统资源来进行 aaf 转 archive 操作,所以需要根据系统环境合理设置该值。另外需要注意,aaf 文件整理功能禁用时,该值无效。它是一个正整数值,默认值:1000

  8. archive:
    archive 整理相关配置,archive 整理是将 archive 文件中相同 key 的块尽量放在一起,这样能极大提高查询效率。它有 9 个子项,分别是:
    (1). disable:
    是否禁用 archive 文件整理功能,它是一个布尔类型配置,true 表示不开启 archive 文件整理,false 表示不禁用,即开启 archive 文件整理,默认值:false
    (2). readCacheSize:
    archive 整理时,用于缓存从文件中读取的数据的缓存大小。当该值大于等于待整理的 archive 文件的总大小时,当使用顺序读取数据的方式,并将读取的数据放入缓存中进行按 key 的分组整理,当该值小于待整理的 archive 文件的总大小时,将进行来回跳读文件的方式来进行按 key 分组整理,由于顺序读取文件的方式比来回跳读文件的方式有更高的效率,所以在系统内存足够的情况下,可以将该值配置得大一些,以提高 archive 整理的效率。它是一个带单位的正整数配置,可选单位[b/B, k/K, m/M, g/G],默认值:2G

  9. maxFileDataSize:
    archive 整理后,单个文件的最大文件大小,它是一个带单位的正整数配置,可选单位[b/B, k/K, m/M, g/G],默认值:2G

  10. maxBlockCacheSize:
    archive 整理时,用于写文件的缓存大小,它是一个带单位的正整数配置,可选单位[b/B, k/K, m/M, g/G],默认值:2G

  11. debrisLevelCriteria:
    archive 文件碎片化程度目标值,即期望将 archive 文件的碎片化程度整理到低于该值。archive 文件的碎片化程度是用于衡量 archive 文件中相同 key 的块分散的程度,特别的所有相同 key 的块都在一起的 archive 文件的碎片化程度为 0,相同 key 的块都不在一起的 archive 文件的碎片化程度趋于 1。它是一个小于 1 大于等于 0 的小数,默认值:0.01

  12. littleFileCriteria:
    零碎小文件标准,即小于 littleFileCriteria 的碎片化程度低于 debrisLevelCriteria 的文件会被整理合并为大文件,它是一个带单位的正整数配置,可选单位[b/B, k/K, m/M, g/G],默认值:256M

  13. notToday:
    当天及当天后的 archive 文件是否不整理,因为当天及之后数据大概率还会继续写入变化,所以可以考虑先不整理,等到变为历史文件(大概率不会新增变化)再进行整理,这样能避免计算资源浪费。默认值:false,即当天及其后的 archive 文件同样被整理。

  14. maxTotalTidyFileSize:
    一个整理周期可整理的 archive 文件的最大总大小,它是一个带单位的正整数配置,可选单位[b/B, k/K, m/M, g/G],默认值:20G

  15. delayTime:
    整理 archive 文件的延迟时间,延迟一定时间处理 archive 整理,保证更多的资源用于 aaf 的合并和转换。它是一个带单位的正整数值或 0 值,可选单位[ms, s, m, h],默认值:1h

  16. forceNewBlock:
    合并块时,是否强制使用新的 block,使用新的块来合并,能去掉删除的行,使文件体积变小,但是会影响性能,默认值:false

  17. readModel:
    读取模式,0:没有设置,根据待整理文件的总大小和 ReadCacheSize 的值自动选择,如果文件总大小大于 ReadCacheSize,则使用 ReadModelSeekByPos 模式,否则使用 ReadModelNoSeek 模式;1:ReadModelSeekByPos 模式,即根据 block 的 pos 进行跳读,优点是能将相同 key 的 block 聚合在一起,缺点是需要多次 seek 降低效率;2:ReadModelNoSeek 模式,即顺序读取 block,优点是不需要 seek 效率高,缺点是有很大几率使相同 key 的 block 没聚合在一起(通过加大缓存区大小可以减少此概率)

aafToArchive:

aaf 文件转 archive 文件相关配置,它有 5 个子项,分别是:

  1. disable:
    是否禁用 aaf 转 archive 功能,禁用时,不管是 aaf 整理功能调用还是手动主动调用都不会启动 aaf 转 archive 功能,默认值:false
  2. maxFileSize:
    转为的 archive 文件的单个文件最大大小,它是一个带单位的正整数配置,可选单位[b/B, k/K, m/M, g/G],默认值:2G
  3. maxFileDataSize:
    转为的 archive 文件中未压缩数据最大大小,它是一个带单位的正整数配置,可选单位[b/B, k/K, m/M, g/G],默认值:2G
  4. maxRowCacheSize:
    aaf 转 archive 时,用于写文件的缓存大小,它是一个带单位的正整数配置,可选单位[b/B, k/K, m/M, g/G],默认值:2G
  5. maxTotalSrcFileSize:
    一次转换的 aaf 文件的最大总大小,它是一个带单位的正整数配置,可选单位[b/B, k/K, m/M, g/G],默认值:20G

cache:

aaf 和 archive 索引缓存相关配置,它有 4 个子项,分别是:

  1. initSystemIndexCacheEnable:
    是否启动时加载所有的 archive 索引到缓存,默认值:false
  2. systemIndexCacheExpires:
    archive 索引缓存过期时间,单位天,它是一个正整数值,默认值:30
  3. initSystemAafCacheEnable:
    是否启动时加载所有的 aaf 到缓存,默认值:false
  4. systemAafCacheExpires:
    aaf 缓存过期时间,单位天,它是一个正整数值,默认值:30

auth:

权限相关配置,系统权限管理基于 casbin 访问控制库,它有 4 个子项,分别是:

  1. enable:
    是否开启权限,默认值:false,为了安全性,建议设置为 true
  2. moduleFile:
    权限策略定义文件,默认值:"./etc/rbac.conf",非必要建议不要修改
  3. rootKey:
    根策略,默认值:"authority_policy",非必要建议不要修改
  4. superAccount:
    超级用户,默认值:"root",非必要建议不要修改

collector:

系统信息采集相关配置,它有 3 个子项,分别是:

  1. enable:
    是否开启,默认值:false
  2. categories: [cpu_info, disk_info, memory_info, net_info, process_info, runtime_info]
    收集的模块,可选值有:cpu_info, net_info, disk_info, memory_info, process_info, process_stat_info, connections_info, ldb_info, runtime_info
  3. interval:
    采集周期,单位秒,它是一个正整数值,默认值:1,即 1 秒钟采集一次

query:

查询相关配置,它有 1 个子项,分别是:

  1. aggThreshold:
    聚合查询最大组数,超过该值将会报错。它是一个正整数或 -1,特别的 -1 表示不限制,默认值:1000000
  2. joinThreshold:
    join 查询最大输出行数,超出该值将会报错。它是一个正整数或 -1,特别的 -1 表示不限制,默认值:50000000
  3. caseSensitiveLike:
    like 查询匹配的内容是否大小写敏感,它是一个布尔类型配置,默认值:false

multiReplica:

多副本相关配置,它有 3 个子项,分别是:

  1. enable:
    是否启用多副本,默认值:false
  2. master:
    是否是主库节点,true 表示是主库节点,false 表示是从库节点(即副本),默认值:false
  3. replica:
    副本配置,master 为 true 时有效,它有 3 个子项,分别是:
  4. localIp:
    用于和副本互联通信的本机 ip,它是一个字符串配置,默认值:"
  5. tryTimes:
    向副本发请求的重试次数,它是一个正整数配置,默认值:10
  6. tryInterval:
    向副本发请求的重试间隔,可选单位[ms, s],默认值:1s
  7. replicas:
    副本列表,它是一个数组配置,每个元素是一个对象,包含 2 个子项,分别是:
    (1). ip:
    副本 ip,它是一个字符串配置
    (2). port:
    副本端口,它是一个正整数配置

interaction:

交互相关配置,它有 3 个子项,分别是:

  1. heartbeat:
    发送心跳的间隔时间,单位秒,作为交互发起方时有用,它是一个正整数值,默认值:2
  2. connLimit:
    连接限制数,每个主机连接池的容量,它是一个正整数值,默认值:16
  3. allowHosts:
    交互互联允许注册的主机列表,安全考虑,只允许有记录的主机访问,作为交互接收方时有用 (例如在多副本场景中,副本设置主库的 ip 和 port),为空表示不限制,它是一个数组配置,每个元素时一个对象,包含 2 个子项,分别是:
    (1). ip:
    主机 ip,它是一个字符串配置
    (2). port:
    主机端口,它是一个正整数配置

示例

一个完整系统配置文件内容如下:

yaml
opClientNum: 10000 # 连接处理工作线程数
requestWorkerNum: 64 # 请求处理工作线程数
queryConcurrency: 16 # 查询的并发数量
enableBlockFiltering: false #index 块过滤启用标识

clearCache:
  enable: true # 是否开启清除缓存
  interval: 100s # 清除缓存的周期,可选单位 [ms, s, m, h]
  rootPassword: "magus" # 清除缓存的系统密码

strongConsistency: false #是否保证强一致性,强一致性即读取到的数据要么全部是最新的,要么全部是旧的,非强一致性即允许读取到的数据部分是新的,部分是旧的

txAckTimeout: 10s # 事务提交超时时间,可选单位 [ms, s, m, h]
txTimeoutHour: 24 # insert/delete/update事务超时时间,单位小时,为0表示不超时
webSessionExpireSeconds: 1800 # web 界面 session 过期时间,单位秒

# 写入相关
insert:
  compression: zstdBestSpeed # 存储数据文件压缩模式,可选值:none, lz4, zstd, zstdBestSpeed
  indexFilterModel: BBloom # 存储数据文件中,过滤器类型,可选值:BBloom、Bloom
  archiveDirect: false # 标识写入的数据是否直接存成归档文件
  aaf:
    maxFileSize: 256M # 存储文件最大大小,可选单位 [b/B, k/K, m/M, g/G]
    maxFileDataSize: 256M # 存储文件中未压缩数据最大大小,可选单位 [b/B, k/K, m/M, g/G]
  archive:
    maxFileSize: 1G # 存储文件最大大小,可选单位 [b/B, k/K, m/M, g/G]
    maxFileDataSize: 2G # 存储文件中未压缩数据最大大小,可选单位 [b/B, k/K, m/M, g/G]
    maxRowCacheSize: 2G # 写文件时,缓存空间大小,可选单位 [b/B, k/K, m/M, g/G]

insertMemCache:
  dumpTimeout: 10s # 内存缓存 dump 到磁盘的时间间隔,可选单位 [s, m, h]
  maxSizeBytes: 2G # 一张表内存缓存最大量,可选单位 [b/B, k/K, m/M, g/G]
  maxRowCount: 1000000 # 一张表内存缓存行数的最大值
  dumpArchive: false # 是否直接 dump 到 archive 文件

exec:
  maxRowIDSize: 1G # update/delete操作时内存里面最大的rowID大小,超过这个大小的rowID将会存储到磁盘,走磁盘模式删除路径可选单位[b/B, k/K, m/M, g/G]

# 实时表相关
realtime:
  saveInterval: 60s # 保存快照文件的间隔时间,可选单位 [ms, s, m, h]

tidy:
  disable: false # 是否禁用文件整理功能
  runInterval: 1m # 定时触发整理的轮询时间间隔,可选单位 [ms, s, m, h]
  aaf:
    disable: false # 是否禁用 aaf 文件整理功能
    aliveTime: 24h # 没有达到转换为 archive 文件大小的 aaf 文件存留时间,单位小时
    maxFileSize: 256M # aaf 文件最大大小,超过这个大小的 aaf 文件被转为 archive 文件(aaf 转 archive 功能没有禁用时),可选单位 [b/B, k/K, m/M, g/G]
    busyFilesCount: 1000 # 系统中 aaf 文件可存留的最大数量,aaf 存在的数量超过这个数量时,将标记为系统为忙状态
  archive:
    disable: false # 是否禁用 archive 文件整理功能
    readCacheSize: 2G # archive 整理时,用于缓存从文件中读取数据的缓存的大小
    maxFileDataSize: 1G # archive 整理后,单个文件的最大文件大小
    maxBlockCacheSize: 2G # archive 整理时,用于写文件的缓存大小
    debrisLevelCriteria: 0.01 # archive 文件碎片化程度目标值
    littleFileCriteria: 256M   # 零碎小文件标准,小于 littleFileCriteria 就需要整理
    notToday: false # 是否不整理今天及以后的数据,如果为 true,则不整理今天及以后的数据,在很多情况下,今天及以后的数据可能还在写入,所以不整理
    maxTotalTidyFileSize: 20G # 一次整理的 archive 文件的最大总大小
    delayTime: 1h # 整理 archive 文件的延迟时间,可选单位 [ms, s, m, h],延迟一定时间处理 archive 整理,保证更多的资源用于 aaf 的合并和转换
    forceNewBlock: false #   bool // 合并块时,是否强制使用新的 block,使用新的块来合并,能去掉删除的行,使文件体积变小,但是会影响性能
    readModel: 0 # 读取模式,0: 根据待整理文件的总大小和 readCacheSize 的值自动选择 1 或 2,1:根据 block 的 pos 进行跳读,2:顺序读取 block

# aaf 转 archive 相关
aafToArchive:
  disable: false # 是否禁用 aaf 转 archive
  maxFileSize: 2G # 转为的 archive 文件的单个文件最大大小,可选单位 [b/B, k/K, m/M, g/G]
  maxFileDataSize: 2G # 转为的 archive 文件中未压缩数据最大大小,可选单位 [b/B, k/K, m/M, g/G]
  maxRowCacheSize: 2G # aaf 转 archive 时,用于写文件的缓存大小,可选单位 [b/B, k/K, m/M, g/G]
  maxTotalSrcFileSize: 20G # 一次转换的 aaf 文件的最大总大小,可选单位 [b/B, k/K, m/M, g/G]

#cache 相关
cache:
  initSystemIndexCacheEnable: true # 是否启动时加载所有的 indexCache
  systemIndexCacheExpires: 30 # indexCache 过期时间,单位天
  initSystemAafCacheEnable: true # 是否启动时加载所有的 aafCache
  systemAafCacheExpires: 30 # aafCache 过期时间,单位天

auth:
  enable: true
  moduleFile: "./etc/rbac.conf"
  rootKey: "authority_policy"
  superAccount: "root"

collector: 
  enable: true 
  categories: [cpu_info, disk_info, memory_info, net_info, process_info, runtime_info] #可选值:cpu_info, net_info, disk_info, memory_info, process_info, process_stat_info, connections_info, ldb_info, runtime_info
  interval: 1

# 查询相关
query:
  aggThreshold: 1000000 # 聚合查询最大组数,超过该值将会报错。-1 表示不限制
  joinThreshold: 50000000 # join 查询最大输出行数,超出该值将会报错。-1 表示不限制
  caseSensitiveLike: false # like 查询,匹配的内容是否大小写敏感,默认 false

# 多副本相关
multiReplica:
   enable: false # 是否启用多副本
   master: false # 是否是主库节点,true 表示是主库节点,false 表示是从库节点(即副本)
   replica: # 副本配置 (master 为 true 时有效)
      localIp: "192.168.0.171" # 用于和副本互联通信的本机 ip
      tryTimes: 10 # 重试次数
      tryInterval: 1s # 重试间隔,可选单位 [ms, s]
      replicas: # 副本列表
         - { ip: "127.0.0.1", port: 19506 }
         - { ip: "127.0.0.1", port: 19508 }

# 交互互联相关
interaction:
   heartbeat: 2 # 发送心跳的间隔时间,单位秒,作为交互发起方时有用
   connLimit: 16 # 连接限制数,每个主机连接池的容量
   allowHosts: # 交互互联允许注册的主机列表,安全考虑,只允许有记录的主机访问,作为交互接收方时有用,为空表示不限制
      - { ip: "192.168.0.11", port: 19504 }