
光看文字不过瘾?我们还为大家准备了线上直播!4月10日晚上七点半,DolphinDB 研发副总监胡津铭将为大家详细介绍3.00.0版本发布的新功能,以及2.00.12版本的重要更新。即刻扫码预约直播,我们直播间见!
3.00.0 大版本全新发布
插件市场新装修

满足低延时高并发强事务需求:
交易型内存存储引擎 IMOLTP
银行转账交易系统、火车票销售系统等应用场景,并发度高、吞吐量大、对实时响应和事务的一致性要求较高,是典型的在线事务处理(OLTP)场景。传统存储引擎架构会将数据存储在磁盘上,而在面对上述场景要求时,软硬件层面将面临巨大挑战。基于这类情况,DolphinDB 设计并实现了交易型内存存储引擎 IMOLTP,将所有数据都维护在内存中,从而省去磁盘 I/O 的开销;以行存的形式来组织数据,支持创建 B+ 树索引 (主键索引和二级索引) ,来应对低时延、高并发的增删改查操作。
// 建库db = database(directory="oltp://testdb", partitionType=VALUE,partitionScheme=2024.01.01..2024.01.02, engine="IMOLTP")// 建表dummy = table(1:0, ["time", "id", "price", "vol"], [DATETIME, INT, DOUBLE, LONG])pt = createIMOLTPTable(dbHandle=db,table=dummy,tableName="pt",primaryKey=`id)pt=loadTable("oltp://testdb", "pt")// 写入数据insert into pt values(2024.03.05T09:00:00, 1, 1.2, 11)insert into pt values(2024.03.05T09:00:01, 2, 1.3, 12)insert into pt values(2024.03.05T09:00:01, 3, 1.4, 16)// 查询数据select * from pt
赋能系统底层架构:嵌入式产品 Swordfish
许多用户在体验了 DolphinDB 之后,提出希望能将 DolphinDB 作为基础组件嵌入到已有的风控或交易平台上,为已有系统的底层架构赋能。为此,我们推出了嵌入式版本—— Swordfish,其支持功能与 Server 的3.00.0版本一致。
洞察实时流数据价值:
CEP 复杂事件处理引擎
下例应用 CEP 引擎,定义股票逐笔成交事件、成交回报事件、下单事件、撤单事件、创建 monitor 监视器,实现了基于股票逐笔成交数据的事件驱动策略,即根据每支股票的最新的成交价涨幅和累计成交量判断是否执行下单操作。

自动因子挖掘:Shark GPLearn 引擎
为了满足用户不断增长的因子挖掘需求,DolphinDB 在新版本中推出了 Shark GPLearn 高性能因子挖掘平台。相比传统依赖于人工设计和选择特征工程的因子挖掘方法,Shark 平台可以直接从数据库中读取数据,调用遗传算法进行自动因子挖掘,同时利用 GPU 加速遗传算法的适应度计算,提升因子挖掘效率。
丰富的算子库:基于 Python 的遗传算法框架 gplearn 只支持简单且有限的基础数学算子,很难挖掘出数据的深层次特征。DolphinDB 内置各种滑动窗口、时序处理等丰富的函数库,Shark 平台将部分函数移植至 GPU,可以更高效地挖掘高质量因子。
三维数据的支持:Shark 平台提供分组语义,允许在计算过程中进行分组计算,从而支持对三维数据进行分析,来挖掘时序因子或截面因子。
初始化公式:Shark 平台支持初始化公式的功能,方便用户在上一轮挖掘出的较优的因子基础上,继续挖掘。
多卡支持:Shark 平台支持单机多卡训练,能够有效利用多个 GPU 的并行计算能力,加快整个训练过程的速度,提高训练效率。在1000万行测试数据的条件下,Shark 相比 gplearn 有86倍的性能提升。
// 生成测试数据def prepareData(num){total = numdata=table(total:total, `a`b`c`d,[FLOAT,FLOAT,FLOAT,FLOAT])data[`a]=rand(1.0, total)data[`b]=rand(1.0, total)data[`c]=rand(1.0, total)data[`d]=rand(1.0, total)return data}def f(x){return x * x *x *x (x * x *x *x + 1)}num = 1000000source = prepareData(num)predVec = (select f(a) + f(b) + f(c) + f(d) as predVec from source)[`predVec]// 创建GPLearnEngineengine = createGPLearnEngine(source, predVec, populationSize=1000,generations=10, initDepth = [2,6], constRange=0, fitness=`mae,functionSet=['add', 'sub', 'mul', 'div'])// 进行挖掘,得到因子trainRes=engine.gpFit(programNum=5, printCorr=true)
全新脚本引擎:Python Parser
Pandas 是数据分析常用工具,用于数据清洗、计算、分析等场景,然而在应对多线程和 CPU 密集型任务时,其始终无法充分发挥出硬件性能和并行执行任务的优势。
此次 DolphinDB 为习惯用 Pandas 的用户提供了一个更优的替代方案——Python Parser。脚本引擎 Python Parser 不但支持解析 Python 语法编写的脚本,也支持调用 DolphinDB 原生的内置函数和库表对象,DolphinDB 还提供了 Pandas 接口库,将库表与 Pandas 的数据结构相结合,从而帮助用户轻松地用 Python 语言,在 DolphinDB 计算框架上高效完成计算。
Python Parser 与 DolphinDB 脚本语言(DolphinScript )共享对象系统和运行环境,使用时,用户只需在脚本编辑器切换解析语言为 Python Parser,即可用 Python 编写脚本。

VS Code 配置

实现面向对象编程:支持类
新版本中,DolphinDB 在 DolphinScript 的基础上引入了类(Class),从而实现了面向对象的编程(Object-Oriented Programming, OOP)。面向对象编程是一种重要的编程范式,通过将数据和方法封装在类中,实现了数据多态、抽象、继承等特性,有效提高了代码的可读性和可维护性,降低了复杂业务逻辑的代码维护成本。特别地,利用 Class 带有状态的特性,用户可以更方便地开发自定义状态函数,用于 CEP 引擎以及响应式状态引擎(Reactive State Engine)。
更便捷的数据工程化管理:
数据目录(Catalog)功能
select * from catalog.schema.table

基于逐笔数据生成订单簿:订单簿引擎
/** 功能:创建订单簿引擎*/// 创建引擎参数outputTable,即指定输出表suffix = string(1..10)colNames = `SecurityID`timestamp`lastAppSeqNum`tradingPhaseCode`modified`turnover`volume`tradeNum`totalTurnover`totalVolume`totalTradeNum`lastPx`highPx`lowPx`ask`bid`askVol`bidVol`preClosePx`invalid join ("bids" + suffix) join ("bidVolumes" + suffix) join ("bidOrderNums" + suffix) join ("asks" + suffix) join ("askVolumes" + suffix) join ("askOrderNums" + suffix)colTypes = [SYMBOL,TIMESTAMP,LONG,INT,BOOL,DOUBLE,LONG,INT,DOUBLE,LONG,INT,DOUBLE,DOUBLE,DOUBLE,DOUBLE,DOUBLE,LONG,LONG,DOUBLE,BOOL] join take(DOUBLE, 10) join take(LONG, 10) join take(INT, 10) join take(DOUBLE, 10) join take(LONG, 10) join take(INT, 10)outTable = table(1:0, colNames, colTypes)// 创建引擎参数dummyTable,即指定输入表的表结构colNames = `SecurityID`Date`Time`SourceType`Type`Price`Qty`BSFlag`BuyNo`SellNo`ApplSeqNum`ChannelNocolTypes = [SYMBOL, DATE, TIME, INT, INT, LONG, LONG, INT, LONG, LONG, LONG, INT]dummyOrderTrans = table(1:0, colNames, colTypes)// 创建引擎参数inputColMap,即指定输入表各字段的含义inputColMap = dict(`codeColumn`timeColumn`typeColumn`priceColumn`qtyColumn`buyOrderColumn`sellOrderColumn`sideColumn`msgTypeColumn`seqColumn, `SecurityID`Time`Type`Price`Qty`BuyNo`SellNo`BSFlag`SourceType`ApplSeqNum)// 创建引擎参数prevClose,即昨日收盘价,prevClose不影响最终的输出结果中除昨日收盘价以外的其他字段prevClose = dict(`000400.SZ`300274.SZ`300288.SZ`300122.SZ`300918.SZ, [1.1, 2.2, 3.3, 4.4, 5.5])// 定义引擎,每1s计算输出深交所股票20档买卖盘口engine = createOrderBookSnapshotEngine(name="demo", exchange="XSHE", orderbookDepth=20, intervalInMilli=1000, date=2022.01.10, startTime=09:15:00.000, prevClose=prevClose, dummyTable=dummyOrderTrans, inputColMap=inputColMap, outputTable=outTable)
深度学习的数据高速通道:AI Dataloader
深度学习模型是现代广泛应用的人工智能模型,主要应用包括量化投资、模式识别、自然语言处理、计算机视觉等等,随着 ChatGPT 等大模型的出现,深度学习正逐渐改变人类社会。

高效的多播通信:UDP 可靠组播模式
UDP 组播是一种基于 UDP 协议的通信方式。与 TCP 通过建立连接一对一传输不同,UDP 不建立连接,利用专用组播地址将数据同时传输给多个接收者,因此具有时延较低、带宽占用较少等特点。但也因为 UDP 无连接协议的特点,在 UDP 模式下,数据传输过程中可能会出现丢包、乱序等问题。
subscribeTable(...,udpMulticast=true)
2.00.12版本与3.00.0版本将同步支持 AI Dataloader 与订单簿引擎功能。
2.00.12 升级功能清单
本次版本发布,除了带来上述重磅新功能以外,还兼顾了产品性能与易用性、数据分析能力、流数据功能、运维管理功能等方面的优化与提升。
下列升级功能皆适用于2.00.12版本与3.00.0版本。
易用性增强
新版本新增支持了基于宏变量的元编程方法,与传统基于函数实现 SQL 元编程的方式相比,用户可以用宏变量声明列字段,并直接通过 SQL 脚本编写元编程代码,书写难度大幅降低。
t = table(`a`a`b as sym, 1 2 3 as val1, 2 3 4 as val2, 3 4 5 as val3)names=["val1", "val2", "val3"]<select _$$names from t>.eval()alias = "rs_val"<select rowSum(_$$names) as _$alias from t>.eval()
此外,新版本还新增了字段序列表达式,应对宽表多字段查询场景,帮助用户更高效地书写 SQL 脚本:
select fac001...fac999 from t 表示查询出 fac001, fac002, ..., fac998, fac999 列
在运维管理的易用性层面,新版本提供了统一在线修改参数配置的函数 setDynamicConfig,并同步提供获取修改后配置值的函数 getDynamicConfig。
数据库使用体验优化
DolphinDB 的新版本支持在字段级别设置 zstd 压缩算法,相比于 LZ4 压缩算法,压缩比提高了30%左右,从而进一步降低存储成本。
create table "dfs://test"."pt"(id INT[compress="zstd"], 指定使用zstd压缩算法deviceId SYMBOL[compress="zstd"],date DATE[compress="zstd"],value DOUBLE[compress="zstd"],isFin BOOL[compress="zstd"])
支持使用 update 更新分布式表的 Array Vector 列。 [HINT_EXPLAIN] 执行计划中拓展了 sortKey 命中的相关信息,帮助开发定位并优化 SQL 的性能问题。
TSDB 引擎的排序字段(Sort Columns)支持 DECIMAL 类型。
支持 update+context by 语句搭配 csort 和 having 子句来进行排序和过滤。
数据分析能力更强大
新版本加强了数据类型以及函数方面的支持。在数据类型方面,支持了通过 decimalRoundingMode 配置项来指定全局的 DECIMAL 舍入模式;拓展了对数学统计函数的支持,包括:
窗口计算:新增 m 系列函数 mLowRange,mpercentileTopN,mfirstNot 等 和 tm 系列函数 tmLowRange 等。
矩阵计算:支持求秩函数 matrixRank,求伪逆函数 pinverse;矩阵新增支持 STRING 和 DECIMAL 类型。
线性回归:新增支持了 wlsr 函数,用于单列的加权最小二乘回归计算。其返回值为元组,可搭配 moving 函数实现滑动加权最小二乘回归的计算。
概率分布:新增 F 分布、卡方分布、正态分布的概率密度函数 pdfF,pdfChiSquare,pdfNormal。
数据插值:新增点集的多项式插值函数 kroghInterpolate。
优化器:新增函数 fmin,支持通过 Nelder-Mead 单纯形算法找到目标函数的最小值。
金融:
新增函数 bondAccrInt,用于计算有价证券的应付利息。
函数 bondDirtyPrice, bondDuration 和 bondConvexity 新增对零息债券和贴现债券的支持。
物联网:新增函数 geoWithin,用于判断点是否在多边形中,便于地理位置的判断,可用于车辆警戒区域判断,区域车辆统计等场景。
支持时间范围,即可以在指定的时间范围内对数据进行聚合、计算或排名。
支持与 group by 子句结合使用,并且支持嵌套聚合函数。
新增支持以下函数:imin, imax, iminLast, imaxLast, firstNot, lastNot, sum2, prod, percentile, wavg, wsum, corr, covar, beta, atImax, atImin。
流数据功能拓展
流数据表:通过函数 setStreamTableTimestamp 为注入数据打上时间戳。 时序聚合引擎: 配置数据接收延时 acceptedDelay。 通过 warmupStreamEngine 预注入历史数据。 响应式状态引擎:状态函数 prev 和 move 支持对数组向量的计算。 横截面引擎:参数 contextByColumn 支持指定多个分组列。 异常检测引擎:支持自定义输出的异常指标信息。
性能再提升
新版本增加了 JIT 支持的数据类型,包括 set、arrayVector、dict、string,大幅拓展了 JIT 能够支持的应用场景。 优化了多种场景下 join 的性能:包括 cross join,并发 join 多线程、维度表与分布式表 join。 优化分区剪枝逻辑,使得 in 子句中 list 为变量时,能够裁剪分区范围,以行如 where date(dt) in 2022.01.01 的条件查询按 Month 分区的表时,可以定位到对应月份。 优化 TSDB 从 CacheEngine 中读取数据的性能,最多达到20多倍的性能提升。 优化了回归函数 lasso、ElasticNet 的性能。
运维管理功能强化
支持通过加载插件的方式对内置系统函数进行热修复,无需重启 DolphinDB,保障数据库服务 7*24 不间断地运行。 新增控制节点、数据节点上 rebalance 并发线程数的参数,用以控制 rebalance 过程的效率与资源消耗。 优化 rebalanceChunksAmongDatanode 函数:改进了分区大小估算方法,使平衡结果更精确;优化分区移动策略,减少网络传输;增加算法适用场景,可应对单机多节点、共享磁盘等不同部署方式。 计算节点可以执行用户/组管理,权限管理等相关函数。 新增数据库审计日志,记录 DML(库、表、分区、字段)及 update/delete 等记录。在发生数据异常时,运维人员可以通过审计日志来定位 DFS 表的结构及数据的修改行为。
Web 端功能优化与扩展
新增用户权限管理界面。管理员可以通过用户管理和组管理页面,对用户、组设置不同应用范围(分布式数据表、共享内存表、流数据表、函数视图、全局权限)的权限,并实现批量用户管理。

新增配置管理界面。管理员可以通过控制节点上的配置管理界面对集群节点及配置项集中管理和设置。

未完待续……
Roadmap
接下来的几个版本中,DolphinDB 将会推出的重点功能如下:
支持主键模型引擎。 支持向量存储引擎 VectorDB。 支持 RDMA 的高速网络通讯框架。 引入新的数据结构 Tensor,更好的支持深度学习与 AI;支持与 Ray 等分布式机器学习框架集成。 进一步完善 Shark CPU-GPU 异构计算平台,增加更多的内置算子,将 Shark 引擎用于大规模因子计算。 增强计算节点能力,进一步完善存算分离功能。 为嵌入式版本 Swordfish 增加 Python 和 Java 接口,方便 Python 和 Java 用户调用。
使用说明
新版本中的绝大部分功能,点击阅读原文,下载社区版即可免费使用。 高频回测和模拟撮合插件,企业版用户可直接体验。 若使用 CEP 引擎与订单簿引擎,请联系 DolphinDB 小助手(dolphindb1)或销售申请对应的许可证。 若使用 Shark GPLearn,请下载 GPU 版本,并联系小助手或销售申请独立的 GPU 许可证。 若使用Swordfish,请下载嵌入式版本,并联系小助手或销售申请独立的 Swordfish 许可证。




