向量数据库、主键存储引擎、高速网络 RDMA 框架……DolphinDB 版本更新啦!

盛夏已至,炎热的七月伊始,DolphinDB 也迎来了版本的更新。此次更新的 3.00.1 与 2.00.13 版本从多个维度进行了优化扩展,进一步深化了 DolphinDB 在机器学习、数据分析等领域的尝试与探索。

为了响应用户日益增长的 AI 运算需求,DolphinDB 引入了向量数据引擎 VectorDB,以实现海量数据的向量检索,增加了对张量(Tensor) 这一数据结构模型推理插件 LibTorch 的支持,集成了高速网络 RDMA 通讯框架,满足 AI 训练对大数据的需求。新增了主键存储引擎,为 CDC 场景下的实时高负载写入和高频更新提供了保障。自定义分区函数能够更灵活地适配多样的业务逻辑。新增了多个金融相关函数,进一步助力 FICC 业务拓展。

除此之外,新版本还提升了对标准 SQL 的兼容性、增强了流计算引擎的功能和易用性、同时从内存管理、作业管理和用户管理等方面对数据库进行了升级……

接下来,让我们一起看看本次更新具体包含的功能和特性吧!

3.00.1 版本功能新增

一直以来,极其丰富的函数库都是 DolphinDB 的一大产品亮点。随着版本持续更迭和对业务理解的不断沉淀,DolphinDB 的内置函数已接近 2000 个,成为了用户效能提升的重要工具。我们先来看看,本次版本更新为这一宝库又带来了哪些补强

助力 FICC 业务:新增多个 FICC 相关函数

对冲基金在股票交易中应用金融信号处理技术,但金融时间序列数据具有高度非平稳性。处理这类数据时,常将其表示为线段,以减少不确定性和噪声。线段断点数量 K 是衡量市场趋势变化及交易次数的指标,对制定交易策略、获取超额收益至关重要。因此,最小化给定 K 的全局平方误差,并确定每个线段的最优表示,成为量化交易中判断交易时机的重要方法。

为方便用户实现上述复杂的业务逻辑,DolphinDB 在 3.00.1 与 2.00.13 版本中新增了 piecewiseLinFit 和 pwlfPredict 函数,用于拟合分段线性回归函数、根据回归模型对数据进行预测,用户可直接调用函数辅助制定交易策略。

除此之外,新版本中还增加了对下列约束优化函数的支持,可用于 FICC 业务中的曲线拟合

  • 新增 brute 函数,用于通过穷举法在给定范围内最小化一个函数。

  • 新增 fminSLSQP 函数,支持使用顺序最小二乘编程方法找到目标函数的最小值。

  • 新增 fminNCG 函数,支持使用牛顿共轭梯度法对目标函数进行无约束最小化。

  • 新增 fminLBFGSB 函数,支持使用 L-BFGS-B 算法找到目标函数的最小值。

  • 新增 fminBFGS 函数,支持使用 BFGS 算法找到目标函数的最小值。

海量数据的向量检索:VectorDB

在搜索引擎和 AI 生成模型等应用场景下,系统需要在庞大的数据集中,以低延迟和高精度完成相似度搜索和推荐任务,这类任务通常涉及到向量数据的存储和查询。

DolphinDB 已经对向量数据的存储提供了支持,但为了满足对海量数据进行近似检索(即向量检索)的需求, DolphinDB 在 3.00.1 版本中推出了以 TSDB 作为底层存储引擎的向量数据库 VectorDB

VectorDB 支持功能如下:

  • 高效的向量检索:通过对向量数据添加索引,以支持高效的向量相似度查询,显著提高向量检索速度和响应时间。

  • 索引持久化:通过将构建好的向量索引与其他二级索引(如 ZoneMap)一起持久化至磁盘,系统重启后只需要从磁盘读取向量索引,即可通过索引进行相似度检索,而无需重新构建索引。

  • 混合搜索:混合搜索结合了基于关键字的检索(如 SQL 查询语句中的 where 条件)和向量检索,通过这种结合,混合搜索可以在搜索过程中同时利用向量数据的其他属性来提供更加准确和相关的搜索结果。例如在电商搜索中,用户可以根据品牌、颜色等特定条件和上传图片结合的方式搜索产品。

向量检索技术在检索增强生成(RAG)系统中同样扮演着至关重要的角色,其能够有效地从知识库中找到与查询相关的信息,为生成模型提供丰富的上下文支持。

目前 DolphinDB 正在开发基于大模型的文档检索系统 DolphinDB AI,后续 DolphinDB 计划将向量数据库与该系统结合,以进一步扩展系统知识库,并利用向量检索提供的上下文信息提高生成结果的质量和准确性。

图片

强化深度学习集成:支持 Tensor 数据类型

在机器学习库如 TensorFlow 和 PyTorch 中,Tensor 是一种核心的数据结构,类似于多维数组,是处理数据的基本单位。Tensor 能够表达从一维的向量到多维的矩阵,直至更高维度的数组,这使得它非常适合于各种数据类型的科学计算,包括图像、声音、文本等。

DolphinDB V3.00.1 中新增了对 Tensor 数据类型的支持。通过函数 tensor ,用户可以在 DolphinDB 中完成向量、矩阵、表等数据形式到 Tensor 数据形式的转换

此外,DolphinDB 还推出了深度学习模型推理插件 LibTorch。该插件支持使用 Tensor 数据类型以及 PyTorch 模型进行推理。这意味着用户可以直接在 DolphinDB 的数据库环境内完成数据查询、数据处理和模型预测等操作,无需切换至 Python 环境,从而使深度学习的数据处理与模型训练变得更加便捷灵活。

注:LibTorch 插件目前可以在 3.00.1 版本及以上的 Shark Server(DolphinDB 的 GPU 版本)中通过插件市场进行安装。从 3.00.2 开始,将可以在普通的 DolphinDB Server 中使用。

保障主键唯一性,支持高负载写入:主键存储引擎

企业级的数据分析和指标计算,经常需要将 OLTP 业务数据库中的数据通过 CDC  (Change Data Capture) 等方法同步到 DolphinDB 。由于上游的 OLTP 数据库通常设置主键,因此 DolphinDB 接收数据时需要能够保证主键的唯一性。同时,DolphinDB 需要承受类似 OLTP 的写入负载,包括频繁地对数据进行按行更新、插入和删除等操作。为此,DolphinDB 在新版本中推出了主键存储引擎 PKEY (Primary Key Storage Engine),以适应 CDC 场景下实时高负载写入和高频更新的需求。

创建数据库时,在 engine 参数上新增引擎名“PKEY”,即可创建主键存储引擎,例如:

database("dfs://test", VALUE, 0..10, engine='PKEY')

主键引擎支持通过参数 primaryKeys 配置主键,以保证数据的唯一性和完整性,减少查询的去重开销。通过参数 indexes,主键引擎支持在非主键列上配置自定义索引键,从而加速数据查询性能。

灵活应对多样业务逻辑:支持自定义分区函数

在 DolphinDB 当前支持的分区方式中,诸如 RANGE、VALUE、LIST 等固定分区方式可能会遇到分区粒度过大或过小的问题,而 HASH 分区虽然能固定分区粒度,但同类数据在经过哈希处理后可能会分散到不同的分区,不利于查询性能的优化。

为了更灵活地适应多样的业务逻辑,DolphinDB 希望为用户提供一个根据自定义规则进行数据分区的方案。譬如利用前缀函数对交易所的期货和期权合约数据进行分区,或者利用前缀函数对物联网指标 id 进行分区。又譬如经常可以从一些编码中抽取日期和时间信息用于数据分区。

因此,在DolphinDB 的新版本中,createPartitionedTable 函数和 create 语句的 partitionColumns 参数支持为分区列指定函数,以对分区列的数据进行转换

例如,对于格式为 id_date_id 的分区列数据(如 ax1ve_20240101_e37f6, 91f86_20240102_b781d),如果用户期望根据其中的日期进行分区,那么在数据写入时,就可以通过调用分区函数,从原始数据中提取出日期作为分区依据:

// 首先定义处理分区列数据(形如如"id_date_id")的函数
def myPartitionFunc(str,a,b) {return temporalParse(substr(str, a, b),"yyyyMMdd")
}// 生成分区列数据,并建库
data = ["ax1ve_20240101_e37f6", "475b4_20240101_6d9b2", "91f86_20240102_b781d"]
tb = table(data as id_date, 1..3 as value, `a`b`c as sym)
db = database("dfs://partitonFunc", VALUE, 2024.02.01..2024.02.02)// 使用 myPartitionFunc 函数对分区列的数据进行处理
pt = db.createPartitionedTable(table=tb, tableName=`pt, partitionColumns=["myPartitionFunc(id_date, 6, 8)"])
pt.append!(tb)// 查询数据
select * from pt

最后得到按日期分区的查询结果:

图片

网卡利用率提升:支持高速网络 RDMA 框架

RDMA(远程直接内存访问)意味着一台设备可以直接操控另外一台设备的内存,而无需后者操作系统的介入。这种通信方式具备零拷贝、内核旁路、协议栈卸载等优势,不再需要在应用程序内存与操作系统缓冲区之间复制数据,从而降低了延迟并实现了快速的消息传输

DolphinDB 的 3.00.1 版本中对网络模块进行了优化,如果你的网络设备支持 RDMA,只需通过配置项 enableRDMA,即可启用  RDMA 全新通讯架构。同时,与 Linux 提供的 IPoIB 相比,DolphinDB 的网卡利用率实现了约两倍的性能提升

图片

目前,DolphinDB的优化主要集中在网络模块,但仍有相当一部分开销来源于序列化和反序列化过程,以及无法完全避免的内存拷贝。未来,DolphinDB将致力于深度优化序列化部分,以期真正实现零拷贝。

3.00.1 & 2.00.13 升级功能一览

除以上重点新功能外,本次版本更新同样为 SQL 语法、流数据功能、数据库使用体验、数据分析能力、运维管理功能等方面带来了优化提升。

SQL 兼容性增强

语法方面,本次版本更新进一步提升了对标准 SQL 的兼容性,并增强了易用性,具体表现为:

  • SQL DELETE 语句和 sqlDelete 函数支持通过 join 来指定删除行。

  • 分布式表增加对 insert into 语句的支持,同时支持使用 insert into 语句单行/批量写入数据。

  • 新增函数 setTableComment,用于为分布式表添加表注释。

性能方面的具体改进为:

  • 优化了基于规则的优化器的实现,增强了对谓词下推的支持。

  • 提升了多表 join 的性能。

流数据功能拓展

新版本对流计算引擎的功能和易用性进行了增强,包括 metrics 所支持的函数/表达式、窗口计算触发方式、乱序处理方式等,尤其对响应式状态引擎进行了多项优化。

响应式状态引擎 reactiveStateEngine

  • 支持对 array vector 列使用 prev 函数。

  • 新增对例如 cumTopN、tmTopN 等 35 个 topN 状态函数的支持。

流计算引擎的 metrics 支持常数列:createReactiveStateEngine, createAsofJoinEngine 等流计算引擎的 metrics 支持指定为常数标量或向量。

窗口触发:createOrderBookSnapshotEngine 新增参数 useSystemTime,支持使用系统时间来触发快照输出。

乱序处理:时序聚合引擎 TimeSeriesEngine 支持基于数据窗口关闭时间支持设置延时,以处理乱序数据。

数据库使用体验优化

chimp 是一种高效的压缩/解压 double 类型的压缩算法,若浮点数的小数部分仅为三位以内,则 chimp 的压缩率会非常高。DolphinDB 新版本中增加了对 chimp 压缩算法的支持,例如在 createPartitionedTable 和 createTable 时,为 double 类型的列指定 chimp 压缩算法:

login("admin", "123456")db = database("dfs://test", HASH, [INT, 20], engine="TSDB")t = table(1..10 as id, rand(1.0, 10) as val)pt = db.createPartitionedTable(table=t, tableName=`pt, partitionColumns=`id,     compressMethods={"val" : "chimp"}, sortColumns=`id)pt.append!(t)

在之前版本中,TSDB 存储引擎第 3 层的 Level File 不会再进行 Compaction。如果数据量较大的情况下, Compaction 比较频繁,可能会导致 Level 3 的 Level File 过多,存在冗余数据,导致查询性能下降。新版本中,我们引入了 Level 3 Compaction 的功能,以及 Level 4 的概念允许 Level 3 和 Level 4 的 Level File 同时参与 Compaction,从而改善了查询性能。

数据分析能力更强大

新版本从编程语言、函数和远程计算三方面,对产品的数据分析能力进行了扩展与加持。

编程语言方面

  • 新增支持三元运算符?,可以保证便捷而又高效的条件分支执行。

  • 拓展了函数对 BLOB 数据类型的支持性,如 isDuplicated 函数支持 BLOB 类型的去重,parseJsonTable 函数支持 BLOB 字段的解析。

  • JIT 支持处理矩阵索引,可通过 column、columns、row、rows 函数获取矩阵切片。

函数方面:

  • 新增支持时间序列模型函数 vectorAR。

  • 提高函数 std、stdp、var、varp、skew、kurtosis 的计算精度。

  • 拓展 interval 函数对交易日历的支持。

远程计算方面:

新增函数 remoteRunCompatible。remoteRunCompatible 函数与 remoteRun 函数的功能相同,但 remoteRunCompatible 函数对本地和远程数据库的版本不做限制。

运维管理功能强化

新版本从内存管理、作业管理、用户管理等方面对数据库进行了升级,为用户的使用体验保驾护航。

内存管理层面:clearAllCache 函数新增支持清理 TSDB 引擎相关的缓存。

作业管理层面

  • 新增配置项 jobLogRetentionTime,用于定时删除作业的输出和返回值。

  • scheduleJob 新增参数 priority 和 parallelism,用于设置定时任务的优先级和并行度。

用户管理层面:拓展支持对计算节点上用户级别的资源使用情况进行采样,以及查询分布式表操作的功能。

除此之外,新版本还进行了如下优化:

  • 拓展了 version 函数返回的版本信息,以便用户进行版本定位。

  • 增强了集群间异步复制的安全性,通过内部身份认证的用户无需明文指定用户密码。

同时,新版本还从插件层面新增了配置项 pluginServerAddr,用于配置插件仓库地址,以便下载提速和团队共享。

未完待续……

接下来的版本中,DolphinDB 将会推出的重点功能如下:

  • 支持存算分离,可以弹性地伸缩计算节点组,为计算节点增加数据缓存能力。支持外部分区表,用户可直接加载外部数据文件如 Parquet,进行 SQL 查询和数据分析。

  • 支持 TextDB,增加倒排索引,可以直接在数据库内对文本字段进行高效检索。

  • 引入物联网点位管理引擎,窄表模式下支持 ANY 数据类型。

  • 支持多集群监控和运维

  • 为嵌入式版本 Swordfish 增加 Python 和 Java 接口。

  • 提升 AI DataLoader 性能,与 AI 的结合更加丝滑。

  • 进一步提升 SQL 引擎多表关联的性能。

  • 回测引擎引入 Class 机制,并通过 Class JIT 的优化,来提升高频回测性能。

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

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

相关文章

C语言自定义类型(结构体,枚举,联合):

大家好久不见,今天我们来学习一下C语言中的自定义类型: C语言的自定义类型包括:结构体,枚举和联合,接下来大家跟我来一起认识一下这三种类型。 目录 1. 结构体 1.1.1 结构体类型的声明 1.1.2 结构的特殊声明 1.1…

钡铼RTU无线S270用于风力发电站机房远程状态监测和故障预警系统集成

在现代风力发电行业中,机房的远程监测和故障预警系统对于保障风力发电机组的稳定运行至关重要。钡铼第4代S270工业级4G远程遥测终端(RTU),以其先进的技术和多功能应用,成为风力发电站机房智能化管理的理想选择。 技术…

深入理解计算机系统 CSAPP 8.4.2 fork函数

//fork.c #include <sys/types.h> #include <unistd.h> #include <stdio.h>int main() {pid_t fpid; //fpid表示fork函数返回的值int count 0;fpid fork();if (fpid < 0)printf("error in fork!");else if (fpid 0) {printf("\ni am th…

初始化 Kubernetes 集群的必要步骤

以下是成功初始化 Kubernetes 集群的必要步骤: 1. 配置 Kubelet 创建并编辑 /etc/default/kubelet 文件: sudo nano /etc/default/kubelet添加以下内容: KUBELET_EXTRA_ARGS="--container-runtime=remote --container-runtime-endpoint=unix:///var/run/cri-dockerd.s…

相机网线RJ45连接器双端带线5米8芯绿色网线注塑成型

相机网线RJ45连接器双端带线5米8芯绿色网线注塑成型&#xff0c;这款网线采用了环保的绿色材质&#xff0c;线长5米&#xff0c;足够满足大多数拍摄场景的需求。更重要的是&#xff0c;它采用了8芯设计&#xff0c;保证了数据传输的稳定性和高速性。在接口方面&#xff0c;它采…

电容的作用和应用

电容是一种常见的电子元件&#xff0c;在电路中起着多种重要作用&#xff0c;并广泛应用于各种电子设备和系统中。 一、电容的主要作用 储能&#xff1a;电容的基本作用是储存电荷。当电容两端加上电压时&#xff0c;电容会储存电荷&#xff0c;储存的电荷量与电压成正比。这…

数据增强:目标检测算法中的性能提升利器

引言 目标检测是计算机视觉领域的核心任务之一&#xff0c;旨在从图像或视频中识别和定位感兴趣的对象。然而&#xff0c;由于训练数据的局限性&#xff0c;目标检测模型往往面临过拟合和泛化能力不足的问题。数据增强作为一种有效的解决方案&#xff0c;通过增加数据多样性来…

RpcChannel的调用过程

目录 1. RPC调用方&#xff08;caller&#xff09;的调用(消费)过程 2.在caller下创建文件&#xff1a;calluserservice.cc 3.在src的include下创建文件&#xff1a;mprpcchannel.h 4.在src下创建mprpcchannel.cc 1. RPC调用方&#xff08;caller&#xff09;的调用(消费)过…

Android14之RRO资源文件替换策略(二百二十一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+AOSP…

【chatgpt】pytorch打印模型model参数,使用parameters()方法和named_parameters()方法

在 PyTorch 中&#xff0c;一个模型的参数通常指模型中所有可训练的权重和偏置。每个 nn.Module 对象&#xff08;包括自定义的神经网络类&#xff09;都有一个 parameters() 方法和一个 named_parameters() 方法&#xff0c;这些方法可以用来访问模型中的所有参数。以下是这些…

代码随想录算法训练营第67天:图论5[1]

代码随想录算法训练营第67天&#xff1a;图论5 ‍ 105.有向图的完全可达性 卡码网题目链接&#xff08;ACM模式&#xff09;(opens new window) 【题目描述】 给定一个有向图&#xff0c;包含 N 个节点&#xff0c;节点编号分别为 1&#xff0c;2&#xff0c;…&#xff0…

IT大门为你开,欢迎牛马走进来

IT专业入门&#xff0c;高考假期预习指南 七月来临&#xff0c;各省高考分数已揭榜完成。而高考的完结并不意味着学习的结束&#xff0c;而是新旅程的开始。对于有志于踏入IT领域的高考少年们&#xff0c;这个假期是开启探索IT世界的绝佳时机。作为该领域的前行者和经验前辈&a…

【操作与配置】VSCode配置Python及Jupyter

Python环境配置 可以参见&#xff1a;【操作与配置】Python&#xff1a;CondaPycharm_pycharmconda-CSDN博客 官网下载Python&#xff1a;http://www.python.org/download/官网下载Conda&#xff1a;Miniconda — Anaconda documentation VSCode插件安装 插件安装后需重启V…

matrix-breakout-2-morpheus靶场

1 信息收集 1.1 主机发现 arp-scan -l 1.2 端口与服务扫描 发现开放22、80、81端口 2 访问服务 2.1 访问80端口 查看源代码 2.2 访问81端口 3 目录扫描 3.1 dirsearch目录扫描 dirsearch -u 192.168.1.14 发现robots.txt文件和javascript文件 访问文件 http://192.168…

WordPress主题大前端DUX v8.7源码下载

全新&#xff1a;用户注册流程&#xff0c;验证邮箱&#xff0c;设置密码 新增&#xff1a;列表显示小视频和横幅视频 新增&#xff1a;文章内容中的外链全部增加 nofollow 新增&#xff1a;客服功能中的链接添加 nofollow 优化&#xff1a;产品分类的价格显示

Ansible自动化运维:Ansible的安装与配置

Ansible自动化运维&#xff1a;Ansible的安装与配置 Ansible是一种自动化运维工具&#xff0c;它可以帮助系统管理员自动化日常任务&#xff0c;例如软件包的安装、服务的配置和启动等。Ansible基于Python语言&#xff0c;采用SSH协议进行通信&#xff0c;无需在客户端安装任何…

如何使用小红书矩阵系统:提升内容管理与发布的指南

小红书作为一个集社区分享与电商功能于一体的平台&#xff0c;吸引了大量的用户和创作者。随着内容创作和账号管理的复杂性增加&#xff0c;小红书矩阵系统成为了一个强大的工具&#xff0c;帮助用户提高效率和扩大影响力。本文将详细介绍如何使用小红书矩阵系统&#xff0c;以…

如何在Python中拷贝类对象到数组

1、问题背景 在Python中&#xff0c;我们经常需要存储多个对象的集合。有时&#xff0c;我们需要拷贝这些对象&#xff0c;以便在不修改原始对象的情况下对它们进行操作。例如&#xff0c;在下述代码中&#xff0c;我们在colors列表中存储了多个Color对象&#xff0c;然后我们创…

Elasticsearch 8.x 存储有无压缩?能压缩到多少?

1、认知前提 Elasticsearch 支持压缩&#xff0c;压缩方式默认为&#xff1a;LZ4 压缩算法。 具体参见&#xff1a; The default value compresses stored data with LZ4 compression, but this can be set to best_compression which uses DEFLATE for a higher compression r…

拓扑学习系列(4)结实knots的亏格Genus与赛弗特曲面算法

结实knots的亏格 结实的亏格&#xff08;Genus&#xff09;是结实理论中一个重要概念&#xff0c;用于描述结实的复杂性。亏格是一个非负整数&#xff0c;与结实所界定的曲面的拓扑性质相关。以下是对结实的亏格的解释和定义&#xff1a; 定义&#xff1a; 结实的亏格是指结实…