新版本 | 异步复制、交易日历、自定义状态函数......请查收!

news2024/7/31 5:13:53

大家好~DolphinDB 最新版本近日已经发布,本次的 V2.00.9 与 V1.30.21 新版本推出了很多新功能,并对数据库做了全方位提升,是迄今为止新增功能最多的一次更新。

新特性一览

我们先来看一看新特性包含哪些方面:

1、数据库

针对数据安全和数据库管理,新版本推出了主从集群异步复制功能,加强了数据库容灾能力;权限管理能力也有了大幅提升,用户可以更高效、灵活地分层管理。新版本还推出了交易日历功能,包含了国内外各大交易所的日历数据,并支持用户自定义交易日历。除此之外,我们还做了以下扩展和优化:

  • 新增 License server 功能,帮助用户合理分配资源;

  • 加强 DECIMAL 数据类型的函数支持,大部分常用计算函数如 cumrank 等都已支持该类型;V2.00.9 版本还支持创建 DECIMAL 类型的数组向量;

  • 新增对 arrow 格式的支持,加载插件后 Python API 可以以 arrow 协议与 DolphinDB 交互。

2、流计算

新版本推出了响应式状态引擎状态函数插件,扩展了非标准化函数能力,支持用户自定义算子,并优化了响应式状态引擎的计算性能。此外,流数据层面还有以下新特性:

  • 优化异构流表多表数据回放,理想情况下最快可达约 300万条/秒;

  • 优化 streamEngineParser ,使其产生尽量少的引擎,达到最优级联方案;

  • 新增函数 genericStateIterate、genericTStateIterate 支持在流数据中窗口迭代计算;

  • 新增函数 movingWindowData 和 tmovingWindowData,用于获取流计算中历史滑动窗口的数据。

3、SQL

新版本加强了对标准 SQL 语法的兼容,并优化了 group by 和 context by 等函数在大量分组下的计算性能。本次新增的兼容功能包括:

  • 新增语句:drop(支持删库,删表操作),create local temporary table(支持创建本地临时内存表),alter(新增支持列名重命名,删除列),case when,union/union all,join on,with as(支持 with 关键字使用参数对列重命名);

  • 新增谓词:(not) between and,is null/is not null,(not) exists/not exist,any/all;

  • 新增函数:nullIf,coalesce;

  • 新增关键字:distinct(单个或多个字段去重),nulls first/nulls last(order by 关键字)。

其他 SQL 相关的新版本特性包括:

  • 共享表 append/insert into 语句支持通过 transaction 语句实现事务;

  • 支持使用 select 子句中的列别名或新创建的列作为 where 的过滤条件;

  • 支持 SQL 语句 where 条件里时间类型可以自动转换为 interval 分组的时间类型;

  • 放开了在 SQL 查询使用 in 元组作为查询条件时,元组内元素个数的限制;

  • 优化了 lsj 在大数据量下的性能。

针对 V2.00.9 新版本,我们还优化了 percentile、median 等函数在分布式查询下的性能以及优化了分区表 ej 的性能。

4、高阶函数 & 向量化计算

新版本系统性优化了高阶函数,支持高阶函数迭用,增强了向量化计算。其中新增了 byColumn 函数,使 accumulate 等高阶函数支持列内竖向计算,并支持在流计算中使用高阶函数 accumulate。其他新增函数和参数包括:

  • 函数 dict 和 syncDict 新增参数 ordered,用于创建有序字典,支持键值对的顺序与输入顺序保持一致;支持两个字典的二元操作,以及字典和 scalar、vector 的二元操作;

  • 函数 interval 新增参数 closed、label、origin;

  • 新增函数 enlist 用于将标量或向量,转化为由其作为元素值的向量或元组;

  • 函数 linearTimeTrend 支持对矩阵和表的计算;

  • 函数 rowAt 支持以数组向量为索引;

  • 在进行 slice 操作时,数组、矩阵等均可以通过标量、数组配对范围,如果越界则填充空值。

核心功能与亮点

接下来为大家详细介绍新版本的核心功能和亮点。

异步复制提升容灾能力

DolphinDB 提供数据、元数据、客户端以及流数据的高可用方案,以保证数据安全,满足各类业务场景7*24小时稳定运行的需求。在物联网、金融等领域,事务进行速度很快,数据持续在主机群上累积会降低性能。

为了满足日益增大的集群间吞吐量,进一步提高系统的可用性,我们采取了主从架构,在新版本中新增了集群间数据异步复制功能,支持将主集群数据复制到从集群,且保证主、从集群数据一致,实现了集群异地容灾。

DolphinDB 的异步复制功能具备灵活的扩展能力和较强的容错能力。对于主集群来说,增减数据节点无需重启,主从集群间也无需做节点映射;大部分情况下,集群中某些节点出现问题时,也不会导致数据丢失或不一致。此外,我们还为大家提供了方便的运维工具,新增了特定函数来监控两个集群间的异步复制状态和进度,便于出现错误后人工介入修复,大大提高了运维管理的效率。以下为部分新增函数:

  • setDatabaseForClusterReplication:启动针对某个数据库的异步复制;

  • getDatabaseClusterReplicationStatus():查看所有数据库是否开启了该功能;

  • getRecentSlaveReplicationInfo():在主集群上执行,一键获取所有从集群的回放进度。

更强大的权限管理

数据库的权限管理对保障数据安全非常重要,也是 IT 团队的一大运维管理成本之一。新版本中,DolphinDB 的权限管理有了更多亮点。

  • 引入库级别权限:更高效

此前用户可以通过 getTables 函数对某个数据库下的数据表进行赋权,但当数据库动态新增数据表时,需要不断重新赋权。新版本中,读写权限可以配置到数据库级别,对新增的表也同样适用。

  • 单独管理不同用户:更灵活

对于数据中台业务来说,当开放给外部用户使用时,需要考虑访问权限、安全和资源分配等诸多问题。不同的用户对数据库的访问权限应当视具体情况进行区分。

新版本中,DB_MANAGE 支持了数据库级别的权限设置,可以赋予或取消用户对某几个单独的数据库的管理权限。此外,我们在 setMemLimitOfQueryResult 中新增了 QUERY_RESULT_MEM_LIMIT字段,可以为某个单独的用户设置查询时的内存限制。

  • 细化权限管理类目:更精细

数据表的写入操作包括插入、更新和删除,此前仅通过 TABLE_WRITE 一个维度,即可为用户赋权所有三项操作,这意味着用户不仅可以随意插入新数据,还能删除和更新,这给数据安全带来了隐患。因此,我们在新版本中新增了 TABLE_INSERT、TABLE_UPDATE、TABLE_DELETE 来控制插入、更新、删除数据的权限,支持更细粒度的权限管理。数据库级别的写入权限设置也同样做了精细化处理。

自带交易日历的数据库

交易日指除周末和法定节假日以外的时间,一般来说,除去国庆、元旦、春节等节假期后,全年交易日约有250天左右。在金融交易和量化策略研究中,交易日历是必备数据,可以帮助用户判断某一天是否为交易日,标识出下一个交易日和最后一个交易日,以及获取交易区间等。新版本提供了国内外各大交易所的交易日历及用户自定义交易日历的功能,并支持在函数 temporalAdd、resample、asfreq、transFreq 中进行计算。在新版本中,用户使用 getMarketCalendar 函数,就可以轻松获取期望日期内的所有交易日历。

在流数据引擎中 DIY 你的状态函数

在基于高频行情数据计算量价因子的过程中,每只股票的每一条新数据注入都会更新该股票的所有因子值。这些因子通常是有状态的,不仅与当前的多个指标有关,也与多个指标的历史状态相关。DolphinDB 提供的响应式状态引擎可以轻松解决这一难题。为了让用户更自如地实现业务逻辑,我们在新版本中将流数据的状态函数进行了插件化,帮助用户自己灵活定制状态函数。用户可以执行如下代码导入插件,并调用 listStateFunction 函数获取所有通过插件导入的状态函数及其用法的列表。

PLUGIN_PATH = "/path/to/plugin"
try {
    loadPlugin(PLUGIN_PATH + "/PluginReactiveState.txt")
} catch (ex) {
    print(ex)
    // TODO: error handling
}
go

利用这一插件,我们已经成功开发了 movingWindowData、genericStateIterate 等函数,支持用户在流计算中访问历史数据或任何中间状态,将其用于计算并将结果作为输入参数进行下一步处理。

响应式状态引擎性能优化

前面我们提到,响应式状态引擎中已实现的状态函数经过了特定优化,本身计算非常高效,但是如果需要对结果进一步处理,对于一些低效的解释执行过程,可以尝试通过即时编译(JIT)功能来加速这部分计算过程。

新版本中,JIT 除了新增支持常用函数 sum、avg、count、size、min、max、iif 等,还可帮助用户提升流数据引擎中特定函数以及自定义函数的性能。以 moving 函数为例,JIT 显著提升了响应式状态引擎的计算速度,优化效果十分明显。

感兴趣的小伙伴可以阅读我们在知乎发布的另一篇文章:《如何提升 ETF 期权隐含波动率和希腊值的计算速度?》。这个案例详细介绍了使用 JIT 功能为期权相关指标计算加速的全过程,与 C++ 原生代码相比,耗时仅多出0.5倍,已十分接近,突破了这一计算场景的性能瓶颈。此外,新版本还针对流数据引擎做了其他性能改进,包括:

  • 优化异构流表多表数据回放,理想情况下最快可达约 300万条/秒。

  • 优化 streamEngineParser ,使其产生尽量少的引擎,达到最优级联方案。

值得一提的是,V2.00.9 版本允许流数据订阅客户端变成接受数据的一方,并在流订阅反转的基础上支持 WebSocket 连接。

大数据量分组计算性能提升与多线程加速

金融数据往往按交易信息分组,一张上千万行的数据表,一笔交易通常只有几行,因此分组数量非常庞大,针对这种情况,我们优化了 group by 和 context by 函数的性能,有十倍以上提升。此外,context by 新增支持了 matrix 和 table 的输入形式。

Pivot by 是 DolphinDB 的独有功能,是对标准 SQL 语句的拓展,它将表中一列或多列的内容按照两个维度重新排列,可实现将窄表转换为宽表。新版本改为用多线程加速计算,在资源充足情况下性能有了几十倍提升。此外,新版本还优化了当 pivot by 最后一列为分区列时的性能。

未完待续...

此次新版本特性覆盖范围非常广泛,从数据处理到安全管理,从功能扩展到性能提升,我们对 DolphinDB 做了全方位的优化,但这并不是结束。未来我们将不断推出更强大的工具,追求更优异的性能,满足更广大用户的需求。以下是我们在下一个版本中开发的重点:

  • 提供 OLTP 内存存储引擎,推出嵌入式版本,支持更低时延的场景;

  • 系统性提升 TSDB 引擎在高并发场景下的性能;

  • 通过 JIT 和脚本语言优化,提升流计算和脚本语言性能;

  • 提供数据库安全、健康、稳定性的巡检工具,提升运维的效率和便捷性;

  • 提升数据库系统、流数据引擎的稳定性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/359090.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

管理.模型.SWOT

1. SWOT 在企业战略规划中,通过辨析企业自身的竞争优势(Strengths)、劣势(Weaknesses)和外部环境为企业带来的机会(Opportunities)和威胁( Threats),企业可制…

Interview系列 - 05 Java|Iterator迭代器|集合继承体系|Set List Map接口特性|List实现类区别

文章目录01. 迭代器 Iterator 是什么?02. 迭代器 Iterator 有什么特点?03. 迭代器 Iterator 怎么使用?04. 如何边遍历边移除 Collection 中的元素?05. Iterator 和 ListIterator 有什么区别?06. 数组和集合的区别&…

Alist ——本地网盘管理器

Alist ——本地网盘管理器 一、下载工具 Alist https://github.com/alist-org/alist二、启动登录 进入下载好的文件中,在地址栏输入cmd进入命令行启动 进入命令行输入 alist start启动 记住密码,和端口进入浏览器 输入 :127.0.0.1:5244用…

java final关键字 详解

概述:作用:细节:演示:总结:一、概述 : final [ˈ faɪnl],最终的,最后的,决定性的,不可改变的。final作为Java中的一个关键字可以用来修饰类,方法&#xff0c…

【程序人生】从土木专员到网易测试工程师,薪资翻3倍,他经历了什么?

转行对于很多人来说,是一件艰难而又纠结的事情,或许缺乏勇气,或许缺乏魄力,或许内心深处不愿打破平衡。可对于我来说,转行是一件不可不为的事情,因为那意味着新的方向、新的希望。我是学工程管理的&#xf…

京东测试进阶之路:初入测试碎碎念篇

1、基本的测试用例设计方法 基本的测试用例设计方法(边界值分析、等价类划分等)。 业务和场景的积累,了解测试需求以及易出现的bug的地方。 多维角度设计测试用例(用户、业务流程、异常场景、代码逻辑)。 2、需求分析 …

idea自带maven位置、maven全局环境变量配置,安装jar到本地 mac

声明:本教程为mac版教程,Windows请路过 idea自带maven3配置全局环境变量 mac电脑maven3位置/Applications/IntelliJ\ IDEA.app/Contents/plugins/maven/lib/maven3配置全局变量,编~/.profile文件(没有则新建) export MAVEN/App…

JVM-JMM内存模型(happens-before、volatile)

前言 由于计算机的存储设备与处理器的运算速度有几个数量级的差距所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存(Cache)来作为内存与处理器之间的缓冲。 将运算需要使用到的数据复制到缓存中,让运算能快速进行,当运算…

Day895.MySql误删数据还原方案 -MySQL实战

MySql误删数据还原方案 Hi,我是阿昌,今天学习记录的是关于MySql误删数据还原方案的内容。 传统的高可用架构是不能预防误删数据的,因为主库的一个 drop table 命令,会通过 binlog 传给所有从库和级联从库,进而导致整…

研报精选230220

目录 【行业230220国信证券】银行业行业专题:经济复苏中的优质中小银行【行业230220国信证券】汽车行业周报(2023年第7周):吉利将发布新品牌“银河” ,2022年宇通纯电动客车获欧洲销量冠军【行业230220开源证券】商贸零…

Java File相关操作

文章目录File文件操作IO流处理流缓冲流转换流对象流File文件操作 利用File类来操作。 文件操作中常用到相对目录和绝对路径 package org.File; import java.io.File; public class demo01 { public static void main(String[] args) { try{ File file new File("…

【Java期末复习】《面向对象程序设计》练习库

目录 一、单选题 二、填空题 三、程序填空题 1、 super使用--有如下父类和子类的定义,根据要求填写代码 2、简单加法计算器的实现 3、House类 4、矩形类 5、创建一个Box类,求其体积 四、函数题 6-1 求圆面积自定义异常类 6-2 判断一个数列是…

基于某业务单登陆场景并发测试实战

文章目录1 测试目的2 测试目标和测试对象3 名词解释4 测试说明5 测试环境和工具5.1 测试工具5.2 测试环境5.3 人力计划6 测试用例6.1 方案设计6.2 接口地址6.3 接口参数6.3.1 header参数6.3.2 请求参数7 脚本设计8 监控数据8.1 虚拟用户并发情况8.2 事务响应时间8.3 每秒点击次…

IP定位的具体网络应用

IP定位的原理是利用访问终端的注册信息和时延信息来估算现实中的地理位置,结合先进的定位算法服务,最高精确度能达到街道级,深受用户的喜爱。IP定位接口是一种通过IP地址来确定设备或用户位置的技术,主要应用于以下几个方面&#…

Windows平台上达梦数据库的ODBC安装与配置

文章目录概述安装包准备安装ODBC驱动配置ODBC数据源概述 最近很多公司都在响应信创,需要切换到国产数据库,然而很多数据库的一些基础组件的使用都没有一个很明确的官方文档。为了避免更多的人踩坑,本人将踩过的坑总结成博文,分享…

【正点原子FPGA连载】第十四章SD卡读写TXT文本实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id692450874670 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第十四章SD卡读写…

网络小白入门之路--锐捷RGOS日常管理

锐捷作为网络界的一名重要成员,其设备的管理系统RGOS也是我们要学习的重要一环,那么今天我们就一起看下锐捷RGOS的日常管理。 锐捷设备日常登录方式: 本地登陆: Console登陆:全新或配置清空的设备,需要使…

TeX文件和md文件的转换

1 tex文件转换为md文件 1.1 安装 pandoc 首先安装 pandoc 到你的电脑 pandoc 1.2 命令行 可以在vscode终端输出入以下命令,命令运行路径为tex文件所在 cd tex文件所属的目录 pandoc -s tex文件名.tex -o md的文件名.md1.3预览 发现最后md文件只有一部分转化成…

171、【动态规划】leetcode ——309. 最佳买卖股票时机含冷冻期 (C++版本)

题目描述 原题链接:309. 最佳买卖股票时机含冷冻期 解题思路 本次难点在于多了一个冷冻期,大体的状态过程是三个:持有股票、不持有股票、冷冻期。在不持有股票时候,又可分为之前就不持有股票并继续保持、今天才卖出股票明天是冷…

视频直播美颜sdk的发展史

视频直播美颜sdk的出现是必然的,它的诞生就是为了让更多用户能够更好地体验到视频直播带给大家的快乐,可以说视频直播美颜sdk的发展和用户体验有着紧密联系。今天,小编不聊技术,咱们来聊一下视频直播美颜sdk的诞生以及发展历程。 …