Appearance
系统配置
系统配置用于高级工程师用户进行系统调优所做的配置,普通用户一般无需关注这个配置,使用默认值就可以了。
说明
系统配置文件是一个 YAML 文件,文件名为config.system.yaml
,它的内容是一个 YAML 对象,包含以下字段:
opClientNum:
连接处理工作线程数,是一个正整数配置,默认值:10000,最大值:50000
requestWorkerNum:
请求处理工作线程数,是一个正整数配置,最大值:32767,默认值:服务器 cpu 个数
queryConcurrency:
查询的并发数量,即同一时间可以进行查询的数量,是一个正整数配置,最大值 24,默认值:16
enableBlockFiltering:
index 块过滤启用标识,用来标识在执行查询的时候是否先从 index 文件中过滤不符合条件的块,在大多数查询是条件查询的情况下,开启能提高查询效率,在大多数查询都是全量查询的情况下,不启用能提高查询效率。它是一个布尔类型配置,默认值:false
clearCache:
系统缓存清理的相关配置,它有 3 个子项:
- enable:
是否开启清除缓存,是一个布尔类型配置,默认值:false - interval:
清除缓存的周期,是一个带单位的正整数配置,可选单位[ms, s, m, h](即毫秒、秒、分、时),默认值:1m - 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 个子项,分别是:
- compression:
存储数据文件压缩模式,是一个字符串类型配置,可选值:none, lz4, zstd, zstdBestSpeed,默认值:zstdBestSpeed - indexFilterModel:
存储数据文件中,过滤器类型,可选值:BBloom、Bloom,默认值:BBloom - archiveDirect:
标识写入的数据是否直接存成归档文件(后缀为 archive 的文件),为 true 则存为 archive 文件,为 false 则存为碎块文件(后缀为 aaf 的文件)。它是一个布尔类型的值,默认值:false - aaf:
存为 aaf 文件的相关配置,它包含 2 个子项,分别是: - maxFileSize:
存储文件最大大小,它是一个带单位的正整数配置,可选单位[b/B, k/K, m/M, g/G],默认值:256M - maxFileDataSize:
存储文件中未压缩数据最大大小,它是一个带单位的正整数配置,可选单位[b/B, k/K, m/M, g/G],默认值:256M - 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 个子项,分别是:
- dumpTimeout:
内存缓存 dump 到磁盘的时间间隔,带单位的正整数配置,可选单位[s, m, h](即秒、分、时),默认值:10s。由于内存数据在掉电等系统异常情况下会丢失,所以高频率地将内存数据 dump 到磁盘,可以减少数据丢失的可能,但高频的 dump 也将更大量的消耗系统资源,所以需要根据系统环境合理设置该值。 - maxSizeBytes:
一张表内存缓存最大量,当达到这个值是数据 dump 到磁盘,在表定义中没有设置 memSpace 选项时有效,它是一个带单位的正整数配置,可选单位[b/B, k/K, m/M, g/G],默认值:2G,最小值:64M - maxRowCount:
一张表内存缓存行数的最大值,当达到这个值是数据 dump 到磁盘,它是一个正整数配置,默认值:1000000 - dumpArchive:
是否直接 dump 到 archive 文件,是一个布尔类型配置,默认值:false, 为 true 时,内存数据直接 dump 到 archive 文件,为 false 时,内存数据 dump 到 aaf 文件
exec:
update/delete事务操作相关配置,它有1个子项,分别是:
- maxRowIDSize:
update/delete操作时内存里面最大的rowID大小,超过这个大小的rowID将会存储到磁盘,走磁盘模式删除路径,可选单位[b/B, k/K, m/M, g/G]。它是一个带单位的正整数配置,默认值:1G
realtime:
实时表相关配置,实时表的表名为普通数据表的表名加_rt 构成,实时表的结构和对应的普通数据表结构相同,只是存储的是一个 key 的最新一条记录,它有 1 个子项,分别是:
- saveInterval:
保存快照文件的间隔时间,它是一个带单位的正整数配置,可选单位[ms, s, m, h],默认值:60s
tidy:
数据文件整理相关配置,它有 4 个子项,分别是:
disable:
是否禁用文件整理功能,它是一个布尔类型配置,true 表示不开启文件整理,false 表示不禁用,即开启文件整理,默认值:falserunInterval:
定时触发整理的轮询时间间隔,用于在没有文件改变事件触发整理时,定时去触发整理。因为一次整理可能不会将全部待整理的文件整理完(由于资源使用的限制或者整理时没有达到整理条件,例如 aaf 文件保留时间没有过期),所以需要定时去触发,使没有变化的文件目录能够有机会去进行整理。它是一个带单位的正整数值,可选单位[ms, s, m, h],默认值:1maaf:
aaf 文件整理相关配置,它有 4 个子项,分别是:
(1).disable:
是否禁用 aaf 文件整理功能(aaf 文件合并和 aaf 转 archive 文件),它是一个布尔类型配置,true 表示不开启 aaf 文件整理,false 表示不禁用,即开启 aaf 文件整理,默认值:false
(2). aliveTime:
没有达到转换为 archive 文件大小的 aaf 文件存留时间,即 aaf 文件超过多少时间没有更新将被转为 archive 存档文件。它是一个带单位的正整数值,可选单位[ms, s, m, h],默认值:24h
(3). maxFileSize:
aaf 文件最大大小,超过这个大小的 aaf 文件被转为 archive 文件(aaf 转 archive 功能没有禁用时),它是一个带单位的正整数配置,可选单位[b/B, k/K, m/M, g/G],默认值:256M
(4). busyFilesCount:
系统中 aaf 文件可存留的最大数量,当系统中存在的 aaf 文件超过这个数量时,将不能写入数据,并返回系统繁忙的错误信息,直到 aaf 文件被整理减少到该值以下,才恢复数据写入能力。系统中 aaf 文件数量较多会降低查询性能并需要使用较多系统资源来进行 aaf 转 archive 操作,所以需要根据系统环境合理设置该值。另外需要注意,aaf 文件整理功能禁用时,该值无效。它是一个正整数值,默认值:1000archive:
archive 整理相关配置,archive 整理是将 archive 文件中相同 key 的块尽量放在一起,这样能极大提高查询效率。它有 9 个子项,分别是:
- disable:
是否禁用 archive 文件整理功能,它是一个布尔类型配置,true 表示不开启 archive 文件整理,false 表示不禁用,即开启 archive 文件整理,默认值:false - readCacheSize:
archive 整理时,用于缓存从文件中读取的数据的缓存大小。当该值大于等于待整理的 archive 文件的总大小时,当使用顺序读取数据的方式,并将读取的数据放入缓存中进行按 key 的分组整理,当该值小于待整理的 archive 文件的总大小时,将进行来回跳读文件的方式来进行按 key 分组整理,由于顺序读取文件的方式比来回跳读文件的方式有更高的效率,所以在系统内存足够的情况下,可以将该值配置得大一些,以提高 archive 整理的效率。它是一个带单位的正整数配置,可选单位[b/B, k/K, m/M, g/G],默认值:2G - maxFileDataSize:
archive 整理后,单个文件的最大文件大小,它是一个带单位的正整数配置,可选单位[b/B, k/K, m/M, g/G],默认值:2G - maxBlockCacheSize:
archive 整理时,用于写文件的缓存大小,它是一个带单位的正整数配置,可选单位[b/B, k/K, m/M, g/G],默认值:2G - debrisLevelCriteria:
archive 文件碎片化程度目标值,即期望将 archive 文件的碎片化程度整理到低于该值。archive 文件的碎片化程度是用于衡量 archive 文件中相同 key 的块分散的程度,特别的所有相同 key 的块都在一起的 archive 文件的碎片化程度为 0,相同 key 的块都不在一起的 archive 文件的碎片化程度趋于 1。它是一个小于 1 大于等于 0 的小数,默认值:0.01 - littleFileCriteria:
零碎小文件标准,即小于 littleFileCriteria 的碎片化程度低于 debrisLevelCriteria 的文件会被整理合并为大文件,它是一个带单位的正整数配置,可选单位[b/B, k/K, m/M, g/G],默认值:256M - notToday:
当天及当天后的 archive 文件是否不整理,因为当天及之后数据大概率还会继续写入变化,所以可以考虑先不整理,等到变为历史文件(大概率不会新增变化)再进行整理,这样能避免计算资源浪费。默认值:false,即当天及其后的 archive 文件同样被整理。 - maxTotalTidyFileSize:
一个整理周期可整理的 archive 文件的最大总大小,它是一个带单位的正整数配置,可选单位[b/B, k/K, m/M, g/G],默认值:20G - delayTime:
整理 archive 文件的延迟时间,延迟一定时间处理 archive 整理,保证更多的资源用于 aaf 的合并和转换。它是一个带单位的正整数值或 0 值,可选单位[ms, s, m, h],默认值:1h - forceNewBlock:
合并块时,是否强制使用新的 block,使用新的块来合并,能去掉删除的行,使文件体积变小,但是会影响性能,默认值:false - readModel:
读取模式,0:没有设置,根据待整理文件的总大小和 ReadCacheSize 的值自动选择,如果文件总大小大于 ReadCacheSize,则使用 ReadModelSeekByPos 模式,否则使用 ReadModelNoSeek 模式;1:ReadModelSeekByPos 模式,即根据 block 的 pos 进行跳读,优点是能将相同 key 的 block 聚合在一起,缺点是需要多次 seek 降低效率;2:ReadModelNoSeek 模式,即顺序读取 block,优点是不需要 seek 效率高,缺点是有很大几率使相同 key 的 block 没聚合在一起(通过加大缓存区大小可以减少此概率)
- disable:
aafToArchive:
aaf 文件转 archive 文件相关配置,它有 5 个子项,分别是:
- disable:
是否禁用 aaf 转 archive 功能,禁用时,不管是 aaf 整理功能调用还是手动主动调用都不会启动 aaf 转 archive 功能,默认值:false - maxFileSize:
转为的 archive 文件的单个文件最大大小,它是一个带单位的正整数配置,可选单位[b/B, k/K, m/M, g/G],默认值:2G - maxFileDataSize:
转为的 archive 文件中未压缩数据最大大小,它是一个带单位的正整数配置,可选单位[b/B, k/K, m/M, g/G],默认值:2G - maxRowCacheSize:
aaf 转 archive 时,用于写文件的缓存大小,它是一个带单位的正整数配置,可选单位[b/B, k/K, m/M, g/G],默认值:2G - maxTotalSrcFileSize:
一次转换的 aaf 文件的最大总大小,它是一个带单位的正整数配置,可选单位[b/B, k/K, m/M, g/G],默认值:20G
cache:
aaf 和 archive 索引缓存相关配置,它有 4 个子项,分别是:
- initSystemIndexCacheEnable:
是否启动时加载所有的 archive 索引到缓存,默认值:false - systemIndexCacheExpires:
archive 索引缓存过期时间,单位天,它是一个正整数值,默认值:30 - initSystemAafCacheEnable:
是否启动时加载所有的 aaf 到缓存,默认值:false - systemAafCacheExpires:
aaf 缓存过期时间,单位天,它是一个正整数值,默认值:30
auth:
权限相关配置,系统权限管理基于 casbin 访问控制库,它有 4 个子项,分别是:
- enable:
是否开启权限,默认值:false,为了安全性,建议设置为 true - moduleFile:
权限策略定义文件,默认值:"./etc/rbac.conf",非必要建议不要修改 - rootKey:
根策略,默认值:"authority_policy",非必要建议不要修改 - superAccount:
超级用户,默认值:"root",非必要建议不要修改
collector:
系统信息采集相关配置,它有 3 个子项,分别是:
- enable:
是否开启,默认值:false - 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,即 1 秒钟采集一次
query:
查询相关配置,它有 1 个子项,分别是:
- aggThreshold:
聚合查询最大组数,超过该值将会报错。它是一个正整数或 -1,特别的 -1 表示不限制,默认值:1000000 - joinThreshold:
join 查询最大输出行数,超出该值将会报错。它是一个正整数或 -1,特别的 -1 表示不限制,默认值:50000000 - caseSensitiveLike:
like 查询匹配的内容是否大小写敏感,它是一个布尔类型配置,默认值:false
multiReplica:
多副本相关配置,它有 3 个子项,分别是:
- enable:
是否启用多副本,默认值:false - master:
是否是主库节点,true 表示是主库节点,false 表示是从库节点(即副本),默认值:false - replica:
副本配置,master 为 true 时有效,它有 3 个子项,分别是: - localIp:
用于和副本互联通信的本机 ip,它是一个字符串配置,默认值:" - tryTimes:
向副本发请求的重试次数,它是一个正整数配置,默认值:10 - tryInterval:
向副本发请求的重试间隔,可选单位[ms, s],默认值:1s - replicas:
副本列表,它是一个数组配置,每个元素是一个对象,包含 2 个子项,分别是:
1. ip:
副本 ip,它是一个字符串配置
2. port:
副本端口,它是一个正整数配置
interaction:
交互相关配置,它有 3 个子项,分别是:
- heartbeat:
发送心跳的间隔时间,单位秒,作为交互发起方时有用,它是一个正整数值,默认值:2 - connLimit:
连接限制数,每个主机连接池的容量,它是一个正整数值,默认值:16 - allowHosts:
交互互联允许注册的主机列表,安全考虑,只允许有记录的主机访问,作为交互接收方时有用 (例如在多副本场景中,副本设置主库的 ip 和 port),为空表示不限制,它是一个数组配置,每个元素时一个对象,包含 2 个子项,分别是:- ip:
主机 ip,它是一个字符串配置 - port:
主机端口,它是一个正整数配置
- ip:
示例
一个完整系统配置文件内容如下:
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 }