功能配置

登录

New in version 1.30.21: 参数 thirdPartyAuthenticator

参数配置

含义

thirdPartyAuthenticator

指定一个函数视图(其参数和 login 函数的参数一致),用于第三方系统校验用户权限。用户通过 DolphinDB 的 HttpClient 等插件与第三方用户系统建立连接。

通过指定该参数,在用户登录时,系统会通过第三方系统进行权限验证。

高可用

控制节点高可用

控制节点存储了集群访问所需的元数据信息。普通集群只包含一个控制节点,若控制节点发生宕机,将造成集群瘫痪。为了避免这种情况,DolphinDB 允许多个控制节点组成 raft 组,来实现控制节点的高可用。

启用控制节点高可用,需要在 raft 组中各个 controller 的 config 文件(默认 controller.cfg)中指定配置项 dfsHAMode=Raft。

配置参数

解释

dfsHAMode=Raft

多个控制节点是否组成 raft 组。

同时需要修改所有 agent 的 config 文件(默认为 agent.cfg),代理节点配置的 controllerSite 可指定为 raft 组的任一节点。在代理节点信息后必须增加 sites 参数,需包含本机器代理节点和所有控制节点的局域网信息。

配置参数

解释

sites

用于指定其它节点局域网信息。格式同 localSite,多个节点间用 “,” 隔开。

同时需要在 nodesFile 增加所有集群节点的网络信息。

此外,DolphinDB 还提供了配置参数用于设置 raft。该参数需在控制节点的 config 文件配置。

New in version 1.30.16: 参数 raftElectionTick

配置参数

解释

raftElectionTick=800

确定一个时间区间(单位为10ms):[raftElectionTick, 2 * raftElectionTick]。follower 在收到上一个心跳后,经过该区间内一个随机时刻之后仍然没有收到 leader 的心跳,则会发出竞选 leader 的请求。

默认值为800,即8s,确定的时间区间为[8s, 16s]。注意:需要保持 raft 组内所有控制节点的配置一致。

多副本

为了保证数据的安全和高可用,DolphinDB 支持在不同的服务器上存储多个数据副本,并且采用二阶段提交协议实现数据副本之间以及数据和元数据之间的强一致性。即使一台机器上的数据损坏,也可以通过访问其他机器上的副本数据来保证数据服务不中断。要开启副本数和备份机制,需在控制节点的 config 文件配置以下参数:

配置参数

解释

dfsReplicationFactor=2

每个表数据块的所有副本数。集群的默认副本数是2,单节点的默认副本数为1。注意:写入数据时 on-line 的数据节点数必须大于等于 dfsReplicationFactor 的值,否则会抛出异常。

dfsReplicaReliabilityLevel=0

多个副本是否可以在同一个物理服务器上。 0表示可以;1表示不可以;2表示在资源允许情况下,副本优先部署在多台物理服务器。默认值是0。

多副本集群环境下,若某个数据节点宕机,将会造成集群的副本数和配置项 dfsReplicationFactor 不一致。此时若配置了 dfsRecoveryWaitTime,系统将在等待 dfsRecoveryWaitTime 时间后,将不一致的副本复制给其它节点。该参数默认值为 0,表示一直等待节点恢复,不发起副本复制任务。该参数也需在控制节点的 config 文件配置。

配置参数

解释

dfsRecoveryWaitTime=0

数据节点宕机后,控制节点需要把此节点的数据副本在其它数据节点重新恢复,以保持副本数的一致。恢复前的等待时间可通过该参数进行配置(单位为毫秒)。

默认值是0,表示不开启恢复。若不为 0,则系统内部最小等待时间为60000毫秒,也就是60秒,如果填入的数值小于60000,则会被设置为60000。

生产场景下,数据节点宕机后可能会被再次拉起,若开启了恢复副本的任务会造成不必要的网络传输开销。因此不建议用户轻易配置该选项。

日志

运行日志 log

server 启动后,系统将会自动产生运行时信息,可以通过命令行配置参数 stdoutLog 决定是否将信息输出到命令行或运行日志(log)中。log 文件的路径信息可由配置项 logFile 进行指定:

配置参数

解释

logFile=DolphinDBlog

日志文件的路径和名称。日志文件包含服务器配置的详细内容,警告和错误信息。该参数只能在命令行中指定。

单个日志文件大小存在上限,由 单节点模式 章节提到的配置参数 maxLogSize 决定。超过该值后,DolphinDB 将自动生成一个前缀为时间戳(精确到秒)的新的日志文件,以此类推。当旧的系统日志占用大量系统资源时,可通过配置 logRetentionTime 定时删除。

New in version 1.30.20: 参数 logRetentionTime

配置参数

解释

配置节点

logRetentionTime=30

设置系统日志的保留时间。超过指定保留时间的日志将被删除。默认值为 30,单位是“天”,类型为浮点型,如:0.5 表示 12 小时。若设置为 0,表示不进行清理。

控制节点、代理节点、数据节点

为了更快定位问题,DolphinDB 支持输出指定等级的日志。可通过配置项 logLevel 在启动前配置,或通过函数 setLogLevel 在线修改。

配置参数

解释

logLevel=INFO

日志文件的保留层次。默认值为 INFO。 logLevel 的所有取值从低到高为 DEBUG,INFO,WARNING 和 ERROR。日志文件只保留等于或高于 logLevel 取值的日志记录。

集群环境下,节点运行日志统一存储在 logFile 指定的路径下。下文提到的重做日志和恢复事务的重做日志,统一存储在 logDir 指定的文件夹下。

配置参数

解释

logDir=<HomeDir>

数据节点的日志目录。默认是数据节点/计算节点的<HomeDir>。上下文中的 <LogDir> 表示该参数的值。

重做日志 redo log

参考教程: DolphinDB教程:Cache Engine与数据库日志

为保证 server 启动后不会因为宕机丢失数据,DolphinDB 采用了重做日志(redo log)的机制,即数据先写重做日志再落盘。redo log 文件存储在磁盘上,为了提高写入效率,建议将 redo log 文件存储在高性能 IO 设备中,如 SSD。

配置参数

解释

redoLogDir=<HomeDir>/redoLog

重做日志(redo log)的目录。默认值是 <HomeDir>/log/redoLog 。在集群模式中,需要保证同一机器上的数据节点配置了不同的 redoLogDir。

当事务完成后,系统会自动检测回收其对应的 redo log。DolphinDB 提供了配置项,支持对 redo log 的回收过程进行调优。

配置参数

解释

redoLogPurgeInterval=30

删除重做日志(redo log)的时间间隔(单位是秒),默认值是30。每隔 redoLogPurgeInterval 秒,系统会自动删除已完成事务的重做日志。

redoLogPurgeLimit=4

重做日志(redo log)占用磁盘空间的上限(单位是 GB),默认值是4。如果重做日志占用磁盘超过 redoLogPurgeLimit,系统会自动删除已完成事务的重做日志。

作业日志 job log

用户提交的批处理作业和定时作业的执行信息均保存在 batchJobDir 目录下。

配置参数

解释

batchJobDir

保存批量作业和定时作业日志和结果的文件夹目录。如果没有指定,单节点模式下,默认目录是 <HomeDir>/batchJobs。集群模式下,默认目录是<HomeDir>/<nodeAlias>/batchJobs。

节点恢复事务的重做日志

节点恢复和再平衡相关参数的说明请参考:数据恢复和再平衡

在节点恢复过程中,为了避免节点宕机或离线对恢复过程造成太大影响,可以开启节点恢复事务的重做日志,配置 enableDfsRecoverRedo = true。开启后,在节点恢复的过程中,会将恢复事务相关的数据先写入 recover redo log 中。

配置参数

解释

enableDfsRecoverRedo=true

启用节点恢复过程的重做日志。

recoverLogDir=<HomeDir>/recoverLog

节点恢复事务重做日志的存储路径,默认路径为 <LogDir>/recoverLog。需和数据目录存储在不同的磁盘,建议配置为 SSD 高速磁盘的路径。

节点查询信息日志

集群环境下,系统还保存了各节点的查询信息的日志(job log)。

配置参数

解释

jobLogFile=nodeAlias_job.log

节点工作日志的存储路径,用于记录每个节点上已经执行的所有查询的描述性信息。默认和 logFile 指定 log 文件存储在同一路径下。工作日志文件的默认名是 nodeAlias_job.log

元数据

集群的元数据

分布式文件系统中,集群的元数据信息存储在控制节点上,对应文件为: DFSMetaLog.xxxDSFMetaCheckpoint.xxx。可通过下述配置项指定存储目录:

配置参数

解释

dfsMetaDir

分布式文件系统的元数据信息的存储路径。

单节点模式下,该文件默认存储在 <HomeDir>/<nodeAlias>/dfsMeta 文件夹下。

普通集群模式下,该文件默认存储在控制节点的 <HomeDir> 文件夹下。

高可用集群模式下,该文件默认存储在 <HomeDir>/<nodeAlias>/dfsMeta,其中 <nodeAlias> 为 leader 控制节点的别名。

注意:该配置项需在 controller 的 config 文件中配置(默认为 controller.cfg)。

节点的元数据

节点的元数据文件为 editlog.xxxcheckpoint.xxx,其存储路径可通过下述参数配置。

配置参数

解释

chunkMetaDir

元数据目录。如果没有指定,单节点模式下,默认目录是 <HomeDir>/storage。集群模式下,默认目录是 <HomeDir>/<nodeAlias>/storage。

线程

参考线程教程:从一次 SQL 查询的全过程看 DolphinDB 的线程模型

DolphinDB 采用多线程技术,有以下几种常见的线程类型:

  • worker:常规交互作业的工作线程,接收客户端请求,将任务分解为多个小任务,根据任务的粒度自己执行或 remote executor 执行。

    自 1.30.22 版本开始,DolphinDB 引入了多级任务算法,即将作业及其拆分出来的子任务区分为不同的层级,并分配给相应层级的 worker 来处理。DolphinDB 提供了0~5个级别的 worker。 客户端提交至节点的作业为0级,由0级 worker 处理。根据作业所涉及到的分区,0级 worker 将作业分解为多个子任务,其中本地节点上的子任务由0级或1级 worker 并行执行;需要由远程节点执行的子任务则降低为1级,并通过 remote executor 发送到对应节点上的1级 worker 处理。以此类推,若某个级别的子任务需要进一步拆解,则拆分出来的由远程节点执行的子任务降低一级,发送至远程节点上对应层级的 worker 处理。 这种根据任务层级分配不同层级 worker 的线程工作机制,可以有效避免因各个子任务执行期间彼此依赖而导致的死锁问题。

  • remote executor:远程执行线程,将子任务发动到远程节点的独立线程。远程执行线程具有容错机制。在多个计算机都包含任务所需数据的副本的情况下,如果一台计算机出现故障,远程执行线程将该任务发送到另一台计算机。

  • batch job worker:批处理作业的工作线程。其上限通过配置项 maxBatchJobWorker 设置,默认值是workerNum。该线程在任务执行完后若闲置60秒则会被系统自动回收,不再占用系统资源。

  • dynamic worker:动态工作线程,作为 worker 的补充。其上限通过配置项 maxDynamicWorker 设置,默认值是 workerNum。如果所有的工作线程被占满,有新任务时,系统会创建动态工作线程来执行任务。根据系统并发任务的繁忙程度,总共可以创建三组动态工作线程,每一个级别可以创建 maxDynamicWorker 个动态工作线程。该线程在任务执行完后若闲置60秒则会被系统自动回收,不再占用系统资源。

  • web worker:处理 HTTP 请求的工作线程。DolphinDB 提供了基于 web 的集群管理界面,用户可以通过web 与 DolphinDB 节点进行交互。其上限通过配置项 webWorkerNum 设置,默认值是1。

  • urgent worker:紧急工作线程,只接收一些特殊的系统级任务,譬如登录,取消作业等。其上限通过配置项 urgentWorkerNum 设置,默认为1。

注意:worker 的数量直接决定了系统的并发计算的能力。

相关配置参数:

配置参数

解释

workerNum

常规作业的工作线程的数量。默认值是 CPU 的内核数。

remoteExecutors=1

远程执行线程的数量。默认值是 1,建议配置为集群节点数减1。

maxBatchJobWorker=4

批处理作业的最大工作线程数量。默认值是 workerNum 的值。

maxDynamicWorker=4

动态工作线程数量的最大值。默认值是 workerNum 的值。

webWorkerNum=1

处理HTTP请求的工作线程的数量。默认值是1。

urgentWorkerNum=1

紧急工作线程的数量。默认值是1。

内存

参考内存管理教程: DolphinDB教程:内存管理

社区版许可证提供的默认内存上限为 8 GB,若场景需要更高的配置可以通过 官网申请许可证

系统内存

利用 DolphinDB 做大数据的查询和计算时,可能会由于内存不足造成 OOM。为了尽量避免查询时内存溢出的情况,DolphinDB 提供了一系列内存调优的参数。

maxMemSize 决定了 server 运行在服务器的内存上限。该参数受机器内存上限的影响。

配置参数

解释

maxMemSize=0

分配给 DolphinDB 的最大内存空间(以 GB 为单位)。如果该参数设为0,表明 DolphinDB 的内存使用没有限制。建议设置为比机器内存容量低的一个值。

当内存占用达到 warningMemSize 时,系统会自动清理数据库的缓存,释放一部分内存,以避免 OOM。

配置参数

解释

warningMemSize

当内存使用量超过 warningMemSize (以 GB 为单位)时,系统会自动清理部分数据库的缓存,以避免出现 OOM 异常。默认值为 maxMemSize 的75%。

内存不足时,DolphinDB 为了避免一次性申请过大内存造成内存溢出的情况,提供了以下两个配置项,限制该场景下可申请的内存块大小,以尽可能避免 OOM 的发生。

New in version 1.30.15: 参数 reservedMemSizemaxBlockSizeForReservedMemory

配置参数

解释

reservedMemSize=5% * maxMemSize

一个大于 0 的数字,单位为GB。当 DolphinDB 的可用内存小于 reservedMemSize 时,但仍有新的内存申请时,DolphinDB 将仅分配由 maxBlockSizeForReservedMemory 指定大小的内存块,这是为了尽可能保证报错、事务回滚等需要内存量少但较为关键的操作能有足够的内存,以降低此类操作失败的概率。

例如,当因内存不足导致写入失败时,尽量保证仍然能正常回滚,避免数据不一致。若不指定该参数,系统默认按照 maxMemSize 的5%预留内存(此时,预留内存最小为64MB,最大为1GB)。

maxBlockSizeForReservedMemory=8

表示 DolphinDB 可使用内存少于 reservedMemSize 时,每次申请内存的请求可以分配的最大内存块(单位为KB),默认值为 8。不建议设置过大值,否则系统可能因内存被占满,而导致关键操作申请不到内存,进而出现异常或崩溃。

此外 DolohinDB 还提供了配置项,用来调整内存释放的速度。该参数等价于设置了 TCMalloc 的 tcmalloc_release_rate。

配置参数

解释

memoryReleaseRate=5

将未使用的内存释放给操作系统的速率,是0到10之间的浮点数。 memoryReleaseRate=0 表示不会主动释放未使用的内存,memoryReleaseRate=10 表示以最快的速度释放内存。默认值是5。

cache engine

每个节点的内存都维护了 cache engine,若要开启 cache engine 必须设置 dataSync=1。该参数配置需在 controller 的 config 文件配置(默认为 controller.cfg)。

配置参数

解释

dataSync=0

表示是否采用数据强制刷盘策略。默认值为0,表示是否由操作系统决定什么时候刷盘。如果 dataSync=1,表示将 redo log、数据和元数据强制刷盘。

cache engine 的大小可通过以下配置项设置:

配置参数

解释

chunkCacheEngineMemSize

指定存储引擎 cache engine 的容量(单位为 GB)。 cache engine 开启后,写入数据时,系统会先把数据写入缓存,当缓存中的数据量达到 chunkCacheEngineMemSize 的30%时,才写入磁盘。

默认值是0,即不开启 cache engine。开启 cache engine 的同时,必须设置 dataSync=1。

磁盘

DolphinDB 数据存储的路径取决于配置参数 volumes。

配置参数

解释

volumes=/hdd/hdd1/volumes,/hdd/hdd2/volumes,/hdd/hdd3/volumes,/hdd/hdd4/volumes

数据文件目录。如果没有指定,单节点模式下,默认目录是 <HomeDir>/storage。集群模式下,默认目录是<HomeDir>/<nodeAlias>/storage。

allowVolumeCreation=true

布尔值,当 volumes 指定的路径不存在时,是否允许自动创建该路径。默认值为 true,表示允许自动创建。若配置为 false,当 volumes 指定的路径不存在时,系统会自动退出,同时输出错误日志到 log 文件。

volumeUsageThreshold=0.97

浮点数,范围为(0, 1],默认值为 0.97。设置数据节点上磁盘卷的使用率阈值,仅适用于控制节点。当一个数据节点指定的磁盘卷的总使用率达到该值时,该节点将无法新增 chunk,但仍可继续向已存在的 chunk 写入数据。

New in version 1.30.22: 参数 volumeUsageThreshold

在对读写要求较高的场景下,用户可以选择指定多个 volumes,并将其配置在多个磁盘上。此外,用户可以通过配置磁盘读写线程的数量,来提升磁盘的 I/O。

配置参数

解释

diskIOConcurrencyLevel=1

读写磁盘数据的线程数,默认为1。若设置 diskIOConcurrencyLevel = 0,表示使用当前任务执行的线程来读写磁盘数据;若设置 diskIOConcurrencyLevel > 0,则会创建指定个数的线程来读写磁盘数据。

合理设置该参数,可以优化读写性能,因此建议配置如下:若 volumes 配置了 SSD 硬盘,建议设置 diskIOConcurrencyLevel = 0;若 volumes 全部配置为 HDD 硬盘,建议 diskIOConcurrencyLevel 设置为同 HDD 硬盘个数相同的值。

某些文件系统不支持 hardLink 功能,需修改配置 hardLink = false。

New in version 1.30.10: 参数 useHardLink

配置参数

解释

useHardLink=true

是否使用文件系统 hardlink 的功能。若为 true,表示使用文件系统 hardlink 功能;若为 false,则不使用 hardlink 功能。默认值为 true。

通过 maxFileHandles 配置项可以调整一个 dolphindb 进程允许打开文件数。

配置参数 | 解释

maxFileHandles=1024

一个进程维护的文件描述符上限。

1.30.21 版本开始支持自定义交易日历。以下函数 temporalAdd, resample, asFreq, transFreq 中指定交易日历。

配置参数

解释

marketHolidayDir


交易市场节假日文件的存储目录,可以是绝对路径或者是相对目录,默认为 <HomeDir>/marketHoliday。
系统搜寻相对目录的顺序如下:先到节点的 home 目录寻找,再到节点的工作目录寻找,最后到可执行文件所在目录寻找。
存储的文件必须满足以下条件:文件格式为 csv;仅包含一个 DATE 类型的列。

根据 marketHolidayDir 下已存在的节假日文件生成交易日历,并采用文件名作为交易日历的标识。交易日历文件在系统启动时被加载到内存中。需要注意:

  • 系统默认周末为节假日,因此文件内只需填写非周末的休市日期。

  • 建议将交易日历文件以交易所编码命名,如 “CEFG.csv”。

集群通信与连接

为了减少网络传输的开销,建议集群所有节点配置在同一局域网下。

节点 ip 信息

单节点模式下默认 server 的 ip 为本机 ip,端口号为 8848。若端口号被占用,可前往 config 指定的配置文件进行修改。

配置参数

解释

localSite

节点的局域网信息,格式为 host:port:alias。单节点模式中默认值为 localhost:8848:local8848。

从 1.30.21 版本开始,DolphinDB 支持通过 License Server 来为注册到它上面的节点分配硬件资源。注意:若要启动 License Server,必须使用 Type3 类型的 license,详情咨询技术支持。 License Server 相关配置:

配置参数

解释

licenseServerSite

指定 License Server 所在节点的局域网信息,格式为 host:port:alias。其中,port 必须和 license 文件中指定的 port 一致。

License Server 以单机模式运行。其结合 license 文件,给集群中各节点(代理节点除外)分配硬件资源。

若配置 licenseServerSite:licenseServerSite 与 localSite 配置信息相同时,表示当前节点为 License Server ;

否则当前节点向 License Server 申请资源。若不配置 licenseServerSite,表示当前节点使用本地 license 文件。

bindCores

为节点指定 CPU 内核编号。多个编号间用”,”分隔;连续的编号,可使用”-“连接起始编号。例如,绑定编号为1到4的内核,可写为 1, 2, 3, 4 或 1-4。

仅向 License Server 申请资源的节点可配置该参数:

  • 指定该参数时,进程将在指定的内核上运行

  • 不指定该参数时,若 license 中 bindCPU 为 true,则进程运行在固定的内核上;否则,进程运行在随机的内核上。

集群环境下,控制节点和代理节点启动前,需在各自的 config 文件中配置自身的 localSite;代理节点还需额外配置 controllerSite。

配置参数

解释

controllerSite

代理节点的控制节点的局域网信息,必须与 controller.cfg 中某个控制节点的 localSite 相同。代理节点启动时,会使用该参数与控制节点通讯。

localSite 中的 host:port 为节点的 ip 和端口号,alias 将作为节点的别名。设置别名可以便于脚本编程中快速定位到指定节点,并与之建立通信连接,如 subscribeTable 函数中指定 server 参数为远端节点的别名,即可订阅远端节点发布的流数据表。用户可在线调用 getNodeAlias 获取当前节点的别名,或 getControllerAlias 获取控制节点的别名。

节点的属性通过配置项 mode 声明,目前的可选值为 controller(控制节点), agent(代理节点), datanode(数据节点) 以及 computenode(计算节点)。该配置项需在所有节点 config 文件声明。

配置参数

解释

mode

节点的模式

除了 config 文件外,controller 服务器配置的 nodesFile 文件中,也包含了所有集群代理节点、数据节点和计算节点的 localSite 和 mode,该文件为 controller 提供了集群的网络信息,以便控制节点可以访问到其它节点。

节点间通信

节点与节点之间基于 TCP 协议传输数据,DolphinDB 提供了 TCP 配置选项 tcpNoDelay,便于用户在实际生产场景下,进行通信调优。启用该参数在一定程度上可以减小传输延迟,但可能带来更大的网络负载。

New in version 1.30.22.2: 参数 tcpUserTimeout

DolphinDB 提供了配置选项 tcpUserTimeout,用于控制在发送端保留尚未收到确认的数据以及保留因为接收方零窗口而未发送的数据的最长时间。当超过了指定的时间,TCP 连接会被主动关闭。

配置参数

解释

tcpNoDelay=true

启动 TCP_NODELAY 套接字选项。默认值是 true。

tcpUserTimeout=300000

设置 TCP_USER_TIMEOUT 套接字选项,单位是毫秒,默认值为300000。

控制节点通过心跳机制监控其它节点的存活状态,心跳可以采用 TCP/UDP 传输,通过配置项 lanCluster 指定。该参数需配置在代理节点、数据节点和计算节点的 config 文件。若心跳超时,则控制节点会认为该节点已经宕机。因此,在网络较差的场景下,建议配置较大的 dfsChunkNodeHeartBeatTimeout。

配置参数

解释

lanCluster=true

集群是否建立在 LAN(local area network) 上。若为 true,心跳采用 UDP 协议;若为 false,心跳采用 TCP 协议。默认值为 true。对部署在云上的集群,应当设为 false。

dfsChunkNodeHeartBeatTimeout=8

控制节点判断数据节点是否在线的超时时间(单位为秒),默认是8s。若超过该设置值,控制节点仍未收到数据节点的心跳,则认为该数据节点已宕机。

集群内每个节点都与集群其它远程节点相连接。每个节点连接上限数取决于配置项 maxConnectionPerSite。

配置参数

解释

maxConnectionPerSite=2

从本地节点可以最多连接到多少个远程节点。

节点和外部会话

用户通过 API, GUI, Web notebook 开启一个会话,并通过会话和对应节点建立一个连接。每个节点的最大外部会话连接上限数由配置参数 maxConnections 决定。

配置参数

解释

maxConnections=64

最多可以从多少个外部 GUI,API 或其它节点连接到本地节点。Windows 的默认值为64,有效最大值也是64;Linux 的默认值为512。

web notebook、VSCode 等编辑器与 DolphinDB server 默认采用 HTTP 协议传输数据。可通过配置 enableHTTPS,决定是否采用安全传输协议 HTTPS 进行传输。

配置参数

解释

enableHTTPS=false

是否启用 HTTPS 安全协议,默认值为 false。

局域网环境下通过控制节点的 ip:port 可以直接访问集群的 web 管理器,若控制节点和其它节点不在同一局域网下,需指定控制节点的外网网络信息。该配置项需在 controller 的 config 文件进行配置(默认为 controller.cfg)。

配置参数

解释

PublicName

控制节点外网 IP 或域名。如果 enableHTTPS 为 true,publicName 必须为域名。

恢复(recovery)和再平衡(rebalance)

该章节的配置项均在 controller 的 config 文件中进行配置(默认为 controller.cfg)。

通过 redo log 进行节点恢复

redo log 章节,介绍了重做日志相关的配置项。重做日志机制的目的就是为了防止节点宕机后数据丢失。启用重做日志机制,必须启用参考 cache engine,同时配置对应的日志存储路径。

在集群环境下,若某个节点发起的事务未完成时,发生了节点宕机。此时,用户可选择手动重启节点,或者经过 datanodeRestartInterval 的时间,集群会自动重启该节点。

New in version 1.30.11: 参数 datanodeRestartInterval

配置参数

解释

datanodeRestartInterval=0

为一个非负整数,值为 INT 类型,单位为秒。默认值为 0,表示不会自动启动数据/计算节点。配置该参数可以实现以下功能:

(1)控制节点启动后自动启动数据/计算节点(需要启动 agent);(2) 数据/计算节点离线的时间超过设置时长(t)后自动重启该节点(需要启动 agent)。

请注意,若 server 的版本号小于 1.30.21.4,则该参数必须设置为 100+t,其中100是系统预定义值。

节点间数据恢复

处于宕机、离线和同步恢复中的节点,不参与事务的处理。在此期间,若其它节点发起的事务涉及到该节点上的 CHUNK,根据集群是否为多副本,可分为以下两种情况:

  • 集群为单副本,事务无法进行;

  • 集群为多副本,系统将发起节点间恢复。(副本配置相关的配置项可参考 多副本 的说明。)

New in version 1.30.16: 在线增量恢复

节点间恢复分为在线增量恢复和全量同步恢复。系统会优先尝试在线增量恢复,即通过其它节点的副本数据,增量补齐该节点由于无法参与事务而缺失的数据量。若存在数据不一致等问题,造成增量的在线恢复无法进行,系统将自动转换全量同步恢复。

节点间的全量恢复将以 CHUNK 副本为单位,将完整的副本复制到宕机节点中,因此网络开销较大。

节点间的在线增量恢复,只需复制缺失的事务数据,数据量较小。其通常分为两个阶段,异步恢复和同步恢复。当数据量较大时,同步恢复会导致源节点长时间阻塞,无法参与任何事务。因此在线恢复的第一阶段采用异步恢复,源节点在此期间仍可参与其它事务。等待恢复的数据量小于 dfsSyncRecoveryChunkRowSize 配置的值时,开始第二阶段的同步恢复,在较短的时间便可以完成。

配置参数

解释

dfsSyncRecoveryChunkRowSize=1000

一个正整数,默认值为1000。节点间进行数据恢复时,默认采用异步恢复,当待恢复的目的 chunk 的记录数与最新版本的记录数的差值小于该设置值,就会启用同步复制。

为了进一步提升节点间数据恢复任务的速度,可以通过调整配置项 dfsRecoveryConcurrency 来增加任务的并发度。

配置参数

解释

dfsRecoveryConcurrency

节点恢复时,执行 recovery 任务的并发度(worker 的数量),默认是集群数据节点个数的2倍。

同步恢复阶段,执行恢复任务的工作线程数可由参数 recoveryWorkers 配置。

配置参数

解释

recoveryWorkers=1

节点恢复时,可以用于同步恢复 chunk 的工作线程数。默认值是1。

节点数据再均衡

数据再均衡(rebalance)分为节点内数据均衡和节点间数据均衡。

节点内数据均衡主要指某个节点配置了多个磁盘卷,增加新的磁盘卷后,需要把数据重新分配,以提高 I/O 效率。对应函数 rebalanceChunksWithinDataNode

节点间数据均衡指由于集群数据在各个节点上分配不均,可通过再均衡重新分配,提高分布式计算的效率。对应函数 rebalanceChunksAmongDataNodes

在均衡的工作并发度可通过配置项 dfsRebalanceConcurrency 指定。

配置参数

解释

dfsRebalanceConcurrency

节点数据再均衡时,执行 rebalance 任务的并发度(worker 的数量),默认是集群数据节点个数的2倍。

集群间的异步复制

New in version 1.30.21.

主集群

其中参数 clusterReplicationSlaveNum 和 clusterReplicationMode 为必选参数。

配置参数

解释

配置节点

clusterReplicationSlaveNum=2

允许配置的从集群数量上限。

控制节点

clusterReplicationMode

集群间的异步复制模式。可选值为 master 和 slave,表示主集群和从集群。

数据节点

clusterReplicationWorkDir=<HomeDir>

指定异步复制的工作目录,存储写任务的数据。默认为数据节点的<HomeDir>/clusterReplication。建议配置为容量比较大的 SSD 高速磁盘的路径。

数据节点

clusterReplicationSyncPersistence=false

布尔值,表示是否开启写任务数据的同步持久化,默认为为 false,表示持久化异步进行。

注意:开启异步持久化,数据节点宕机可能造成数据丢失;开启同步持久化,会降低主集群的事务效率。

数据节点

从集群

其中 clusterReplicationMasterCtl 和 clusterReplicationMode 为必选参数。

New in version 1.30.22.2: 参数 clusterReplicationQueueclusterReplicationWorkerNum

参数名

解释

配置节点

clusterReplicationMasterCtl

指定主集群控制节点的 ip:port。若主集群为高可用集群,则指定为控制节点 raft 组中的任意节点即可。

控制节点

clusterReplicationQueue

执行队列的数量,必须是正整数,默认值是数据节点数量的4倍。

控制节点

clusterReplicationMode

集群间的异步复制模式。可选值为 master 和 slave,表示主集群和从集群。

数据节点

clusterReplicationExecutionUsername=admin

用于执行集群间异步复制的用户名,默认为 admin。必须确保该用户有事务操作的相关权限,否则异步复制任务会失败。进行回放任务时,用户必须登录。

数据节点

clusterReplicationExecutionPassword=123456

用于执行集群间异步复制的用户密码,默认为 123456。

数据节点

clusterReplicationWorkerNum

每个数据节点执行任务的工作线程数,默认值是max(workerNum/4, 4)。

数据节点

流数据

参考教程:流数据教程

流数据订阅

DolphinDB 集群中对流数据的处理采用发布-订阅的模式。流数据首先注入流数据表中,在发布端通过流数据表来发布数据,供其它数据节点或 API 订阅消费。若要开启流数据,需要在集群配置文件 cluster.cfg 为发布节点和订阅节点分别进行以下配置。

注意:为某个节点指定某个配置参数的格式为 alias.item,如:nodes1.subPort。(详情参考 集群路径配置说明

发布节点

发布节点支持配置一些发布数据相关的信息,如发布的消息块大小,消息队列深度。此外还需指定可以连接的订阅节点的连接数上限 maxPubConnections,由于该参数默认为 0,因此若启用流数据必须指定该参数为一个正数。

配置参数

解释

maxMsgNumPerBlock=1024

一个消息块中最多的记录条数。默认值为1024。

maxPersistenceQueueDepth=10000000

把流数据表保存到磁盘时,消息队列的最大深度(记录条数)。默认值为10,000,000。

maxPubQueueDepthPerSite=10000000

发布节点的消息队列的最大深度(记录条数)。默认值为10,000,000。

maxPubConnections=0

发布节点可以连接的订阅节点数量上限,默认值为0。只有指定 maxPubConnections 为正整数后,该节点才可作为发布节点。

DolphinDB 提供了流数据持久化的功能,其作用主要为:

  • 备份恢复流数据表,避免发布节点宕机,造成流数据表数据丢失。

  • 避免流表过大造成内存不足。

  • 支持从任意位置开始重新订阅。

开启持久化只需为发布节点的配置以下选项:

配置参数

解释

persistenceDir=/home/DolphinDB/Data/Persistence

共享流数据表的保存路径。如果要将流数据表保存到磁盘上,必须指定 persistenceDir。在集群模式中,需要保证同一机器上的数据节点配置了不同的 persistenceDir。

persistenceWorkerNum=1

负责以异步模式保存流数据表的工作线程数。若为高可用流数据表,该参数的默认值为 1;否则默认值为 0。

New in version 1.30.19: 参数 persistenceWorkerNum 支持高可用流表

订阅节点

订阅节点订阅流数据表数据。其同发布节点一样,支持指定订阅消息的队列深度以及连接发布节点的数量上限(可以选择不指定,按默认值即可)。此外,订阅节点还可以对流数据进行消费,因此还支持对消息处理的线程数、消息处理时间间隔等进行配置。

配置参数

解释

subPort=8000

订阅线程监听的端口号。若要该节点作为订阅节点,必须指定该参数。

maxSubConnections=64

该订阅节点可以连接的的发布节点数量上限。默认值为64。

maxSubQueueDepth=10000000

该订阅节点的消息队列的最大深度(记录条数)。

subExecutorPooling=false

表示流计算线程是否为 pooling 模式。默认值为 false。注意:使用响应式状态引擎时,必须设置该参数为 false。

subExecutors=1

该订阅节点中消息处理线程的数量。只有当启用订阅功能时,该参数才有意义。默认值为1。如果 subExecutors = 0,表示该线程既可以进行消息转换也可以处理消息。

subThrottle

非负整数,单位为毫秒,默认值为 1000。系统检查订阅函数(subscribeTable)消息处理情况的时间间隔。

若 subscribeTable 的 throttle 参数指定了小于配置参数 subThrottle的值,则触发消息处理的时间间隔为 subThrottle。若要设置订阅函数消息处理的时间间隔小于1秒,则需要先修改配置项 subThrottle。

例如:要使 throttle=0.001 秒生效,需设置 subThrottle =1。(注意:只有 subscribeTable 函数指定参数 batchSize 后,该参数才有效。)

若订阅节点消费流数据时发生宕机,重启后可能会无法获知之前消费的进度。DolphinDB 支持将订阅消费数据的偏移量进行持久化,以避免此类情况的发生。

配置参数

解释

persistenceOffsetDir=/home/DolphinDB/streamlog

持久化订阅端消费数据偏移量的保存路径,用于保存订阅消费数据的偏移量。

若没有指定 persistenceOffsetDir,但指定了 persistenceDir,则会保存至 persistenceDir 目录;

如果既没指定 persistenceOffsetDir 也没指定 persistenceDir,会在节点目录下生成 streamlog 目录。

流数据高可用

参考教程: DolphinDB教程:流数据高可用

流数据高可用和集群高可用一样采用 raft 机制,不同的是集群高可用是控制节点的高可用,而流数据高可用为数据节点的高可用。流数据高可用分为发布端、订阅端、流数据计算引擎高可用三种,其高可用的 raft 组都通过 streamingRaftGroups 参数进行配置。

  • 发布端高可用(高可用流表):开启发布端高可用后,高可用流表自动在 raft 组内的节点进行同步。订阅端只需向 leader 节点订阅高可用流数据即可。若发布端 raft 组 leader 宕机,系统也可以迅速重新选举出新的 leader,供订阅端继续订阅。

  • 订阅端高可用:需在订阅函数 subscribeTable 中设置 reconnect=true,并指定 raftGroup。若订阅端 raft 组 leader 宕机,系统也可以迅速重新选举出新的 leader,继续从发布端订阅数据。

  • 流数据计算引擎高可用:通过配置引擎创建函数的参数 snapshot 和 raftGroup 实现高可用。参考流计算引擎详情页:流数据引擎

注意:启用高可用流表,必须开启发布节点的流表持久化。

配置参数

解释

streamingHAMode=raft

高可用功能采用的协议,目前固定配置为 raft,表明流数据高可用功能采用了 raft 协议。

streamingRaftGroups=2:NODE1:NODE2:NODE3,3:NODE3:NODE4:NODE5

raft 组信息,包含 ID 和组成 raft 组的数据节点别名,使用冒号分隔。raft 组的 ID 必须是大于1的整数,一个 raft 组至少包含3个不同的数据节点。如果有多个 raft 组,使用逗号分隔每个 raft 组的信息。

streamingHADir=/home/DolphinDB/Data/NODE1/log/streamLog

流数据 raft 日志文件的存储目录。如果没有指定,默认值为 <HomeDir>/log/streamLog 。每个数据节点应当配置不同的 streamingHADir。

streamingHAPurgeInterval=300

raft 日志垃圾回收周期。默认值300,单位为秒。

作业

参考教程: DolphinDB教程:作业管理

DolphinDB 中有两类作业形式,同步作业和异步作业。绝大部分脚本提交的任务都称为同步作业。异步作业主要指批处理作业、定时作业。

同步作业

一个节点能同时执行的同步作业数取决于 worker 数量(使用非 web 客户端时,通过配置项 workerNum 设置)和 web worker 数量(使用 web 客户端时,通过配置项 webWorkerNum 设置)。

配置参数

解释

workerNum=4

常规作业的工作线程的数量。默认值是 CPU 的内核数。

webWorkerNum=1

处理HTTP请求的工作线程的数量。默认值是1。

异步作业

批处理作业指使用 submitJobsubmitJobEx 函数创建的作业任务。在系统中,批处理作业工作线程数的上限是由配置参数 maxBatchJobWorker 设置的。如果批处理作业的数量超过了限制,新的批处理作业将会进入队列等待,队列深度由配置参数 maxCachedBatchJobNum 设置。批处理作业工作线程在闲置超过60秒后会自动销毁。

配置参数

解释

maxBatchJobWorker=4

批处理作业的最大工作线程数量。默认值是 workerNum 的值。

maxCachedBatchJobNum=2048

批处理作业队列的最大深度,即队列中最多的批处理作业数量,默认值是 2048。

New in version 1.30.18: 参数 maxCachedBatchJobNum

SQL 查询

集群环境下,用户在所连接的节点(协调节点)发起一次分布式表的查询,协调节点首先会根据查询所涉及的分区拆分为子查询语句并 map 到相关的节点。在该过程中,查询的分区数若过多,数据量过大可能造成最后汇总数据时,造成内存溢出。DolphinDB 提供了一系列配置参数来限制查询。

配置参数

解释

maxPartitionNumPerQuery=65536

单个查询语句可查找的最大分区数。默认值是65536。

memLimitOfQueryResult

设置单次查询结果占用的内存上限。默认取值为 min(50% * maxMemSize,8G)。若配置该参数,则设置值必须小于 80% * maxMemSize。

memLimitOfTaskGroupResult

在 map 阶段,单次查询任务被分解为若干个子任务,需要由远端节点执行的子任务批量发送给远端节点。

该参数用于设置当前节点发送的批量子查询占用的内存上限。默认取值为 min(20% * maxMemSize,2G)。若配置该参数,则设置值必须小于 50% * maxMemSize。

New in version 1.30.19: 参数 memLimitOfQueryResultmemLimitOfTaskGroupResult

数据库和数据表

创建数据库和数据表时,除了直接指定函数参数进行配置,DolphinDB 还提供了一部分配置文件中的配置项:

数据库

配置参数

解释

enableChunkGranularityConfig=false

DolphinDB 内 chunk 的粒度决定了事务锁的位置。写入一个 chunk 时,系统会对该 chunk 上锁,不允许其他事务写入。

1.30.16之前的版本,chunk 的粒度为数据库级别,即数据库的每个分区(partition)为一个 chunk。此时,不允许并发写入同一个分区的不同表。

1.30.16版本引入了该配置项,默认为 false,表示 chunk 的粒度为表级别,即每个分区(partition)下的每个表为一个 chunk。此时,允许并发写入同一分区的不同表。

设置为 true 时,允许通过 database 的 chunkGranularity 参数指定 chunk 的粒度为数据库级或表级。

newValuePartitionPolicy=skip

对于值分区(或复合分区中的值分区)的数据库,若新增数据不属于已有分区,如何处理。它的取值可以是 add, skip 和 fail。

  • 默认值是 skip,表示如果新增数据中包含分区方案外的数据,系统会保留分区方案中的数据,不保留分区方案外的数据。注意:从 1.30.22 版本开始,新增了配置项

    allowMissingPartitions。当 allowMissingPartitions = true(默认值) 时,skip 的行为保持不变。但是当 allowMissingPartitions = false 时,skip 的行为将变成:

    如果新增数据中包含分区方案外的数据,则系统不会写入任何数据,且抛出异常。

  • 如果 newValuePartitionPolicy = add,表示系统会自动划分新的分区,保留分区方案外的数据。

  • 如果 newValuePartitionPolicy = fail,表示如果新增数据中包含分区方案外的数据,系统不会保留任何数据,且抛出异常。

根据大多数场景需求,推荐设置 newValuePartitionPolicy = add。

allowMissingPartitions=true

当新增数据中包含分区方案外的数据时,是否忽略(不保留)分区方案范围外的数据。

默认为 true,即保留分区方案中的数据,不保留分区方案外的数据。若设置为 false,则不会写入任何数据,且抛出异常。

注意:对于 VALUE 分区,当 newValuePartitionPolicy 为 add 或 fail 时,是否会忽略分区方案范围外的数据不受该配置项的影响。

oldChunkVersionRetentionTime=60

设置过期版本 chunk 的保留时长,默认为 60(单位:分钟),上限为 240。

执行 SQL update/upsert/delete 操作时,系统会先生成一个新的 chunk 副本(以”物理表名_tid”命名),并在该副本上进行数据的更新和删除。

操作完成后,旧的 chunk 不会被立即删除。系统最多保留 5 个历史 chunk,且每个历史 chunk 的保留时长由此配置参数指定。

New in version 1.30.21: 参数 oldChunkVersionRetentionTime

New in version 1.30.22: 参数 allowMissingPartitions

数据表

配置参数

解释

enableConcurrentDimensionalTableWrite=false

是否允许维度表并发写入、修改、删除。默认值为 false。若为 true,表示允许维度表并发写入、修改、删除。

removeSpecialCharInColumnName=false

是否规范化包含特殊符号的列名,默认值是 false,表示自动产生的数据表的列名允许包含特殊符号,即列名可以以非字母和中文开头,且可以包含下划线之外的符号。如果要跟以前版本兼容,可以将该变量配置为 true。

New in version 1.30.13: 参数 enableConcurrentDimensionalTableWrite

New in version 1.30.14: 参数 removeSpecialCharInColumnName

New in version 1.30.21: 参数 mvccCheckpointThreshold

每个持久化的 mvcc 表都有一个 log 文件。对 mvcc 表的增、删、改操作会先写入 log,直至操作次数达到一定数量,才会创建 mvcc 表检测点(checkpoint), 将数据写入 mvcc 表,并清空 log。通过 loadMvccTable 加载 mvcc 表时,需要回放 log 文件。若 log 的数据量过大,可能导致回放耗时过长,甚至出现 OOM。 为解决此类问题,DolphinDB 提供以下配置项,用于控制 log 中的数据量。

配置参数

解释

mvccCheckpointThreshold=5000000


设置创建检查点的操作次数阈值。当对 mvcc table 的操作次数达到此值时,会创建检查点。取值范围为:[100,000, 2^31-1],默认值为 5,000,000。增、删、改对应的 mvcc table 的操作次数定义如下:
1. 新增(append!, tableInsert, insert into),更新(update)操作的行数 * 列数
2. 删除(delete)操作的行数

分级存储

New in version 1.30.18.

详情参考:分级存储

要开启分级存储,首先需要配置冷数据存储的磁盘路径。

配置参数

解释

coldVolumes= file://home/mypath/hdd, s3://bucket1/data

用于配置冷数据的存储目录。通过函数 moveHotDataToColdVolumesetRetentionPolicy 开启分级存储后,过期的冷数据将从 volumes 迁移至 coldVolumes。

若需要将过期数据存储在云端,DolphinDB 提供了 AWS S3 的相关配置:

配置参数

解释

s3AccessKeyId

S3 访问账户的 id。

s3SecretAccessKey

S3 访问账户的密钥。

s3Region

S3 存储桶所在的区域。

数据形式

DolphinDB 提供普通数组(array)和大数组(bigArray)两种数组类型,array 要求连续内存,优点是性能稍高,缺点是如果要求的内存太大,系统可能由于无法提供连续的内存而分配失败;bigarray 不要求连续内存,优点是可以利用碎片小内存提供大的内存请求,缺点是性能会稍差。

DolphinDB 提供了 regularArrayMemoryLimit 参数来设置普通数组 array 的最大内存上限,如果超过该限制,那么 array 定义的变量会采用 bigArray 方式分配内存。

New in version 2.00.10.4: 参数 appendTupleAsAWhole

配置参数

解释

regularArrayMemoryLimit=2048

常规数组的内存限制(以 MB 为单位)。该参数必须是2的指数幂。默认值为 2048,系统运行时的实际值为 min(regularArrayMemoryLimit, maxMemSize/2)。

appendTupleAsAWhole=true

通过 append! 追加或通过 join! 合并元组,是否将元组作为一个整体。默认值为 true,表示将元组作为整体追加或合并。设为 false 时,将元组的每个元素逐一追加或合并。

计算

下述配置参数应用于编程时,可能影响计算规则或者计算性能:

配置参数

解释

openblasThreads

openBLAS 可以工作的线程数。应用于矩阵计算场景。

性能监控

通过下述参数开启系统性能监控后,可以通过 getCompletedQueries, getRunningQueries 函数,获取查询的性能和状态信息;或者通过 getSystemCpuUsage, getSystemLoadAvg 获取系统的性能信息。

配置参数

解释

perfMonitoring=1

启用性能监控。在单实例中,默认值是 false;在集群中,默认值是 true。

New in version 1.30.22: 参数 enableCoreDumpdisableCoreDumpOnShutdown

core dumps 相关配置

配置参数

解释

配置节点

enableCoreDump=true

dolphindb 进程启动时,是否检查并修改 core dump 的启用情况。默认值为 true,此时若发现 core dump 未启用,则在系统硬限制允许的情况下为进程开启 core dump;

如果发现 core dump 已开启,则不会做任何修改。当设置为 false 时,则不会进行检查。仅 Linux 系统支持该配置项。

数据节点

disableCoreDumpOnShutdown=false

设置安全关机时是否禁用 core dump。默认值为 false,表示安全关机时不禁用 core dump。此参数仅对配置文件对应的节点生效。

数据节点

兼容性配置项

1.30.14 以下版本,NULL 值被当作最小值处理。1.30.14 及以上版本可通过配置项 nullAsMinValueForComparison 改变这种行为:

配置参数

解释

nullAsMinValueForComparison=true

NULL 值在比较运算符操作中是否当作对应数据类型的最小值处理,默认值为 true。若设置为 false,则 NULL 元素对应的结果为 NULL。

1.30.21.4 以下版本,or 函数不忽略操作符中的 NULL,所以始终返回 NULL。对于 1.30.21.4 及以上版本,由配置项 logicOrIgnoreNull 控制是否忽略 NULL;若需要保持 or 函数的这种行为,则应该设置 logicOrIgnoreNull=false。

配置参数

解释

logicOrIgnoreNull=true

设置 or 函数在一个操作数包含 NULL 时是否忽略 NULL。

设置为 true(默认值)时:当另一个操作数非零时,返回 true; 当另一个操作数为零时,返回 false。当另一个操作数为 NULL 时,返回 NULL。

设置为 false 时:无论另一个操作数的值如何,始终返回 NULL。