新版发布 | DolphinDB 1.30.17 和 2.00.5 新特性一览

444 阅读10分钟

我们于近期发布了1.30.172.00.5版本,为存储引擎、数据分析引擎和流计算引擎新增或改进了多个重要功能。新版本进一步增强了存储与计算引擎的性能,并显著提高了数据库的易用性、适用性与安全性。

本文将从存储引擎、产品易用性、业务场景适用性、安全性四个方面为大家介绍本次新发版本的特性。

存储引擎

TSDB是我们在 2.00 版本推出的存储引擎。与 OLAP 引擎相比,它在读写数据时具有更高的效率与更丰富的特性。写数据时,既能满足海量数据的快速写入,又能保持存储的低成本,还具有自动去重等特性。读数据时,既能极速读取每个指标最新的状态,高并发高速读取多个指标一段时间内的数据,也能对读取的数据快速完成数据统计分析。新版本中,我们对TSDB 存储引擎从功能和易用性方面均进行了优化。

1.支持在线增量恢复,数据恢复不阻塞正常写入

DolphinDB 的分区数据采用多副本存储模式,不同副本存储在不同节点中。当用户遇到副本损坏或版本不一致等问题时,TSDB 引擎支持在多副本存储模式下进行异步的数据恢复,恢复期间,用户仍可持续写入新的数据。在线增量恢复时,系统只需拷贝两个分区间有差异的数据,无需进行全量恢复,因此显著缩短了恢复数据的时间。

2.写入缓存中的数据支持异步排序

新版本的 TSDB 支持对写入缓存中的数据进行异步排序,这很好地解决了缓存数据排序带来的性能消耗问题。与同步排序相比,效率最多达到4倍的提升。

3.支持 Windows 系统

在2.00.5版本中,TSDB 引擎可以在 Windows 上运行。用户可以根据应用场景选择使用存储引擎,以便更高效地写入与查询。

产品易用性提升

数据库产品的易用性在企业的日常业务中是非常重要的考量维度之一。面对同样的问题,是需要用户自己写多行代码解决,还是可以直接通过一个内置函数完成,或者能否与熟悉的编程语言兼容等,这些都是用户使用产品的细节体验。用户使用数据库更多是需要基于产品搭建自己的应用,如果产品需要很高的学习成本、操作成本,并且安全性得不到保障,那对企业的运维管理效率、经营业绩都会产生负面影响。

在新版本中,我们引入或改进了多个功能,并在语法兼容和扩展上做了进一步提升,为客户提供了更多方便、安全的手段,显著提高了数据库的友好和易用性,以保障我们的客户能够更好地控制研发成本,提升使用体验。

1.简化集群管理

  • **新增内置函数用于数据再平衡:**随着写入数据量的不断增加,用户经常需要为集群增加数据节点;数据节点增加后,为了保证最优性能,需要进行节点间数据平衡。许多用户担心通过自己写脚本来完成节点间的数据平衡会出错,导致数据丢失等意外情况,因此我们在新版本中提供了内置函数以直接实现节点间数据平衡,让用户进行此操作时无后顾之忧,极大提升了数据库运维管理的效率。

    rebalanceChunksAmongDataNodes([exec = false]) rebalanceChunksWithinDataNode(nodeAlias, [exec = false]) restoreDislocatedTablet()

  • **新版本支持安全可靠地关闭数据库系统:**针对 Redo log 长时间回放所导致的数据节点重启失败问题,在数据节点安全关机前,会完成正在进行的事务并回收 Redo log。安全关机结合在线恢复等特性,可方便地实现灰度升级。

2.兼容标准 SQL 语法

以往版本 DolphinDB 的 SQL 语法与标准 SQL 语法的不同之处,除了 DolphinDB 独有的 context by,pivot by 等创新之外,主要是不支持 JOIN,CREATE,ALTER 等语句,而以 DolphinDB 内置函数实现。随着 DolphinDB 的应用领域不断拓展,越来越多的用户都希望 DolphinDB 兼容标准 SQL 语法。新版本中新增了 join, create, alter 语句,对于习惯使用标准 SQL 语法的用户来说更加友好,有效降低了学习和使用门槛。

3.丰富计算功能

  • **聚合、窗口和向量函数支持表作为输入参数:**许多 python 用户习惯于使用pandas 库所提供的数据分析功能,直接对 DataFrame 进行运算操作。鉴于此我们在新版本中新增了聚合函数、窗口函数和向量函数对表直接操作的功能,用法与 python 保持一致。例如当对多只股票进行数据统计分析;计算每日收盘价的中位数、分位数等;或计算收益率的移动平均,并以特定行列数的表的形式输出等,这一系列需求都可以更便捷地得到满足。对熟悉表作为参数输入的用户来说,降低了学习和迁移成本。
  • **新增函数支持横向或纵向拼接多个矩阵:**DolphinDB 有很多矩阵计算函数,但是以往进行矩阵拼接需要写代码。新版本增加了针对矩阵拼接的函数,既支持水平拼接,也支持垂直拼接,矩阵计算更方便了。
  • 新增数个计算向量距离的函数:许多客户随着对 DolphinDB 使用的不断深入,希望利用 DolphinDB 强悍的计算性能进行机器学习。例如,某些用户希望能对人脸识别后的特征向量进行快速计算,因此新版本增加了计算向量距离的函数,如欧氏距离( euclidean )、谷本距离( tanimoto )、向量内积( rowDot ),以及针对 array vector(数组向量)的欧式距离( rowEuclidean )和谷本距离( rowTanimoto );其中欧式距离和内积在特征向量搜索中也经常使用。未来 DolphinDB 会继续推出更多的机器学习相关函数。

4.前端可视化:VSCode扩展

许多用户曾经评论过,DolphinDB GUI 虽然功能齐全,但是界面太老旧。我们在新版本中积极回应了广大用户对 VSCode 插件的期盼,将 DolphinDB GUI 功能迁移至 VSCode,极大提升了前端界面的用户体验。新版本 VSCode 插件可建立多个与 server 的连接并可任意切换,可以查看会话变量的值,也支持在弹窗中查看变量,方便比较多次查询的结果。此外,我们还为用户提供了1000多个函数的参数提示、智能补全和函数文档链接。在编写代码时,可以直接查看函数功能和用法,极大地降低了编写代码的时间成本。

业务场景适用性提升

1.支持多表回放到异构流数据表

某些问题可能需要多个表(多种消息类型)的协作,而且所有来源的消息是有时间先后顺序的。例如对于金融的行情数据,有交易,报价,订单薄等多个表,这些表的结构各不相同,但业务要求将多个不同结构的表按时间戳同步回放,仿真实盘情况。针对该场景,DolphinDB 在新版本改进了回放机制,支持多张异构表或数据源回放到一张流数据表,并严格按照时间顺序输出,从而解决了同构模型难以保证多消息回放时间一致性的问题。

2.改进时间序列聚合引擎的强制触发

用户在使用流数据时序引擎计算全市场股票的一分钟K线时,对交易非常不活跃的股票,或对午盘休息、下午停盘后长时间没有新数据到来的时间段,可以通过开启强制触发,减少计算延时,并自定义填充无数据的空窗口,确保每个窗口均有及时的数据输出。为了尽早输出各个分组的窗口计算结果,新版本改进了时序引擎的强制触发选项。新版本中,一个窗口后的第一条数据即可触发所有股票窗口的计算;用户亦可标记交易时段的结束时刻。

3.优化 pivot by 的性能

pivot by 语句是 DolphinDB 的创新,也是对标准 SQL 语句的拓展。它可将表中某列的内容按照两个维度重新排列。若进行 pivot by 的数据量较大,会对其性能有较高的要求。新版本中 pivot by 的性能在部分情况下有大约5倍的提升

4.全面支持所有流引擎间的级联

引擎流水线级联是解决复杂因子实时计算的问题的一个通用方法。我们在新版本中拓展了其他引擎和连接引擎级联计算的功能,极大简化了计算流程,减少内存等资源的消耗,对于复杂计算场景下的因子开发更加有效。

安全性提升

除了性能、功能外,流数据引擎的安全也是很多客户关心的方面。在之前的版本中,流数据引擎创建后,若管理员未对该引擎进行权限限制,任何用户均可以删除其他人所创建的流计算引擎,误删风险极大。针对该问题,新版本增加了用户层级的权限控制,当多用户在同一个集群上进行开发时,可为自建的流引擎增加访问限制,以避免多个用户之间的干扰。

展望

未来我们将继续在高性能分布式时序数据库的基础上,不断为广大用户提供性能更优秀、管理更便捷、功能更强大的数据存储与分析一站式解决方案。在下一个小版本中,TSDB 存储引擎的优化为重点工作方向。首先通过对排序列(时间序列的tag列)的映射,优雅地解决了时序数据库的时间线膨胀的问题。 其次, 我们的用户可以以较低的代价实现对时序数据的修改。最后,分级存储功能的推出将进一步降低时序数据库用户的存储成本,尤其在云端,用户可以使用 AWS S3 等低成本的文件系统来存储冷数据。DolphinDB 已经发布了 Kubernetes 的部署包,下一个版本将在监控告警、日志采集、备份恢复、多 K8S 高可用等多个方向持续发力,为用户提供更灵活、更高性能、更安全可靠的数据库服务体验。