2.00.4

版本下载

发行日期: 2022-01-10

Linux64 binary | Linux64 JIT binary | Linux64 ABI binary |

新功能

  • 支持表级别分区粒度,支持同一库中不同的表并发进行增删改操作。

  • 往内存表的时间列写入数据时,自动进行时间类型转换。

  • 支持在线增量恢复,可以异步地进行节点数据恢复。

  • 支持管理和查询集群中的所有计算任务。

  • 内存表和流数据表支持 BLOB 类型。

  • SQL 语句增加标识 [HINT_EXPLAIN],可以显示 SQL 的执行过程。

  • 新增函数 streamEngineParser,支持自动分解截面因子成多个内置流计算引擎的流水线。

  • 新增函数 existSubscriptionTopic,用于判断某一个订阅是否已经创建。

  • 新增函数 createLookupJoinEngine,支持将流数据表和流数据表、内存表或者分布式表(目前只支持维度表)做左连接。

  • 新增函数 moveChunksAcrossVolume,在增加新的 volume 后,用于转移旧 volume 的部分 chunk 到新 volume。

  • 增加新的 volume 后,可以使用 resetDBDirMeta 函数转移老的 volume 上的 meta log 目录到新的 volume。

  • 新增 10 个 TopN 函数 msumTopN, mavgTopN, mstdpTopN, mstdTopN, mvarTopN, mvarpTopN, mcorrTopN, mbetaTopN, mcovarTopN, mwsumTopN,且 createReactiveStateEngine 引擎支持它们相应的状态函数。

  • 新增函数 makeKeymakeOrderedKey,可以将多个列合并成一个 BLOB 列,用作字典或集合的键值,其中 makeOrderedKey 的结果保留了多个字段的排序顺序。

  • 新增高阶函数 aggrTopN,用以计算根据排序列获取的前N行数据的聚合结果。

  • 新增高阶函数 windowtwindow。与 movetmove 类似,但适用于更通用的场景,对于窗口边界的处理稍有不同。

  • 新增配置项 raftElectionTick,用以配置 raft 切换 leader 的心跳时间。同时新增函数 setCacheEngineMemSize, setTimeoutTick, setTSDBCacheEngineSize, setMaxMemSize, setReservedMemSizesetMaxBlockSizeForReservedMemory 支持在线修改对应的配置项。

  • 新增函数 fixedLengthArrayVector,支持将多个向量合成一个 array vector。

  • 新增函数 loadNpz 支持导入 numpy 的 npz 文件。

  • 新增函数 suspendRecovery 用于暂停 recovery 任务。新增函数 resumeRecovery 用于重启 recovery 任务。

  • 新增函数 rowCorr, rowCovar, rowBeta, rowWsum, rowWavg,可以对每行数据进行计算。

  • 新增函数 movingWindowIndexmovingTopNIndex,用于获取每一个滑动窗口的元素下标,返回一个 INDEX[] 类型的 array vector。

  • 新增 fflush 函数,帮助将缓存中的数据写入文件系统。

功能改进

  • TSDB 引擎优化查询某个字段对应的最新数条记录的性能,性能提升数倍至数百倍。

  • 优化 TSDB 在调用 top 子句查询数据时的性能。

  • 提升 TSDB 存储引擎中查询预计算数据的速度。

  • 使用赋值语句对内存表进行更新时,支持在行过滤条件中输入 BOOL 类型数组,形如:t[y, t\[y]>0] = 0,其中 t 是表变量,y 是 t 的列名。

  • upsert! 函数新增可选参数 sortColumns,更新后的表可根据该指定列进行排序。

  • cancelJob, cancelConsoleJob 支持同时取消多个任务,且优化了集群阻塞时取消任务的性能。

  • loadText 支持 schema 中指定数据类型为 array vector。

  • set 支持 BLOB 类型的值。

  • keyedStreamTable 一次性批量插入多条键值相同的新记录,出现插入会失败。

  • 优化了 atIminatImax 在 window join 中的使用性能。

  • run 命令新增可选参数 clean,控制是否清理当前 session 中的变量。

  • wj 函数,duration 支持设置为 y(年),M(月),B(工作日)。

  • loadText 支持字符串包含 ASCII 码为 0 的字符。

  • 支持对矩阵的条件赋值。

  • loadTextEx 新增可选参数 atomic,默认值是 false。加载大文件的情景下,设置该参数为 false,将文件加载事务拆分为多个事务。

  • getCompletedQueries 函数和 getRunningQueries 函数返回值中添加 remoteIP 字段。

  • 配置项参数 tdoutLog支持设置为 2,表示同时打印日志到标准输出和日志文件。

  • 异常检测引擎(anomaly detection engine)metrics 参数支持序列相关函数。

  • 时序引擎(time-series engine)windowSize 为向量时,各元素取值可相同。

  • 横截面引擎( cross-sectional engine)支持 keyColumn 输入一个向量。

  • 支持向流数据引擎插入 tuple 类型的记录。

  • 函数 getStreamEngineStat 返回的横截面引擎的统计信息添加了 memoryUsed 字段,可以查看横截面引擎所占内存。

  • createAsofJoinEngine 在 metrics 中支持输出右表的时间列。

  • 共享内存表(共享流数据表)新增可读不可写的权限管理。

  • 提升了控制节点高可用的稳定性。

  • 日志中新增打印 delete 和 update 操作信息。

  • 输出日志中流订阅任务的报错信息增加订阅主题。

缺陷修复

  • 当事务刷盘过慢,可能会出现 redo log 回收超时,导致重启后数据丢失。

  • 通过一个 dolphindb server 同时启动多个 dolphindb 集群,出现数据节点无法启动的报错:”Failed to open public key file. No such file or directory.”。

  • 高可用集群设置了定时任务( scheduled job),有时会出现因为各个控制节点初始用户的uuid不同,导致切换 leader 后,原有的定时任务在新 leader 上认证失败而无法执行的问题。

  • 数据节点崩溃之后,代理节点每隔一秒而不是按照参数 datanodeRestartInterval 配置的时间来重启数据节点。

  • 定时任务( scheduled job)如果包含了 SQL update 语句,且 where 条件中使用了函数,则在系统重启时反序列化会失败。

  • 对分布式表更新后,若提交事务(commit)失败,则旧的物理目录不会被回收。

  • 高并发写入场景下,当 redo log 所在磁盘占满时,会概率性导致 redo log 回收线程死锁。

  • 数据节点写入数据时内存不足时,未报错 Out of Memory,而是卡住一段时间后崩溃。

  • OLAP 存储引擎在各种并发操作时出现节点随机下线的情况。等待一段时间后节点上线, getTabletsMeta 返回结果显示丢失一个副本的数据,但实际上并没有丢失。

  • TSDB存储引擎,若数据按照时间列(timeCol)分区,排序列(sortColumns)有两列以上,且最后一列为 timeCol,此时若按照排序列(sortColumns)分组,取每个分组内按照分区列(timeCol)排序后的前 k 条记录(context by sortColumns csort timeCol limit k),有时会 crash。

  • TSDB 存储引擎并发修改 edit log,导致数据节点无法重启。

  • 事务回滚出现超时场景下,chunk 的状态设置错误,导致流数据表持久化报错。

  • 横截面引擎( cross-sectional engine ) 参数校验出错,指定 timeColumn 的情况下,没有指定 useSystemTime 或者指定 useSystemTime 为 true,未抛出异常。

  • 时间序列引擎( time-series engine )中当指定 useSystemTime 为 true 且 outputTable 是分布式表时,有时会抛出类型不匹配的异常。

  • 用于流数据处理的 Asof Join Engine 指定 delayedTime 的情况下,有时写入数据会出现 crash。

  • 流数据高可用,两次 append 的数据都超过65536,如果此时发生 rollback,index.log 会重复写入两条一样的 index 导致报错:”index.log contains invalid data.“。

  • windows 系统下,向 time-series engine, daily time-series engine 和 asof join engine 写入数据,有时会发生 crash。

  • subExecutor 还有任务在执行,此时,使用 unsubscribeTable 成功取消订阅,但 getStreamingStat().subWorkers 仍能查询到被取消订阅的 topic。

  • 节点重启之后,高可用流数据表有时会加载失败;流数据表和订阅的 raft 组都切换 leader 之后,高可用订阅自动重连失败。

  • 横截面引擎 triggeringPattern 为 'keyCount' 且 triggeringInterval 为 tuple 时,会输出重复数据。

  • 流数据表包含 BLOB 类型,从磁盘中加载报错:“Failed to decompress the vector. Invalid message format”。

  • 流数据表在写入 BLOB 数据且单行数据大于 64KB 时会 crash。

  • 给内存表增加的新列赋值时,错误的使用了 select 而不是 exec,加载该内存表时出现节点 crash。

  • 通过 GUI 访问包含 array vector 的内存表 session 会断开。

  • 使用 readRecord! 导入二进制文件,会报错 :“Read only object or object without ownership can‘t be applied to mutable function readRecord!”。

  • 函数调用时,若右括号不在同一行,有时解析会报错。

  • 表中包含 array vector 时,执行 replayDS 函数会导致节点 crash。

  • 查询一个值分区的分布式表,按分区列分组获取每个组最后的K条记录(context by partitionCol limit -k),且在某个分区里不存在满足 where 条件的数据时,会查到不满足条件的数据。

  • SQL 中调用 rolling/moving 函数时,若不指定生成列的列名,则会报错:"More than one column has the duplicated name"。

  • interval 在某个 step 区间内没有数据时,会生成空值。

  • sliceByKey 的 rowKeys 的参数设置错误时,server 会 crash。

  • 函数 replace! 修改一个向量,引入空值后,没有正确设置空值标志。

Web客户端功能改进

  • Web 任务管理界面优化:重新设计、整合了 Web 管理界面,增加了作业管理功能,支持查看、停止、取消 DolphinDB 运行中、已提交和定时触发的作业。升级 server 版本后,需要同步更新 web 文件夹。 新版本使用了 WebSocket 协议,增加了对 DolphinDB 二进制协议的支持,对浏览器的要求也随之提高,可能需要用户更新浏览器到最新的版本,推荐使用 Chrome 最新版或 Edge 最新版。