2.00.4
版本下载
发行日期: 2022-01-10
新功能
-
支持表级别分区粒度,支持同一库中不同的表并发进行增删改操作。
-
往内存表的时间列写入数据时,自动进行时间类型转换。
-
支持在线增量恢复,可以异步地进行节点数据恢复。
-
支持管理和查询集群中的所有计算任务。
-
内存表和流数据表支持 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
引擎支持它们相应的状态函数。 -
新增函数
makeKey
和makeOrderedKey
,可以将多个列合并成一个 BLOB 列,用作字典或集合的键值,其中makeOrderedKey
的结果保留了多个字段的排序顺序。 -
新增高阶函数
aggrTopN
,用以计算根据排序列获取的前N行数据的聚合结果。 -
新增高阶函数
window
和twindow
。与move
与tmove
类似,但适用于更通用的场景,对于窗口边界的处理稍有不同。 -
新增配置项 raftElectionTick,用以配置 raft 切换 leader 的心跳时间。同时新增函数
setCacheEngineMemSize
,setTimeoutTick
,setTSDBCacheEngineSize
,setMaxMemSize
,setReservedMemSize
和setMaxBlockSizeForReservedMemory
支持在线修改对应的配置项。 -
新增函数
fixedLengthArrayVector
,支持将多个向量合成一个 array vector。 -
新增函数
loadNpz
支持导入 numpy 的 npz 文件。 -
新增函数
suspendRecovery
用于暂停 recovery 任务。新增函数resumeRecovery
用于重启 recovery 任务。 -
新增函数
rowCorr
,rowCovar
,rowBeta
,rowWsum
,rowWavg
,可以对每行数据进行计算。 -
新增函数
movingWindowIndex
和movingTopNIndex
,用于获取每一个滑动窗口的元素下标,返回一个 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
一次性批量插入多条键值相同的新记录,出现插入会失败。 -
优化了
atImin
和atImax
在 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 最新版。