DolphinDB脚本语言的混合范式编程

本页为文章《DolphinDB脚本语言的混合范式编程》,包含作者与发布日期信息,并引入DolphinDB脚本语言的设计动机与教程覆盖范围。

Source: https://dolphindb.cn/blogs/78

What this page covers

技能认证特训营第二期报名信息

页面顶部提供活动通知,并给出限时报名链接。

DolphinDB脚本语言的混合范式编程

给出文章标题、作者与日期,并引入语言设计动机与教程覆盖范围。

向量化编程

介绍向量化范式、优势、示例、滑动窗口优化,以及局限与应对方案。

SQL编程

说明SQL在DolphinDB中的定位,并引出与脚本语言融合及相关扩展方向。

SQL与编程语言的融合

说明SQL作为语言子集/表达式的使用方式、可引用上下文变量与函数、可动态生成,并可操作多种数据结构。

对面板数据(Panel Data)的友好支持(context by)

介绍context by子句能力与示例,并提供量化因子计算性能案例。

对时间序列数据的友好支持(时间类型、建模、join)

描述时间精度转换、序列关系建模,以及asof join与window join,并给出示例与参考链接。

SQL的其它扩展(UDF、库内计算、组合字段)

列举SQL扩展能力,包括UDF在SQL中的使用、库内计算与组合字段输出方式。

命令式编程

介绍命令式语句类型与示例,并给出海量数据场景的建议。

函数化编程

概述函数式能力与常见特性,并给出相关用户手册链接。

自定义函数和lambda函数

说明函数的约束与作用域限制,并通过示例展示用法。

高阶函数(cross/each/pivot等)

将高阶函数作为数据处理模板进行解释,并提供示例与函数枚举。

部分应用(Partial Application)与保持状态

解释{}与()语法、部分应用的用途,以及在状态保持中的示例。

远程过程调用编程(RPC)

介绍RPC系统与远程执行能力,并概述remoteRun与rpc相关用法。

使用remoteRun执行远程函数

展示通过xdb连接并用remoteRun/句柄执行脚本、注册函数与本地自定义函数等示例。

使用rpc执行远程函数(集群内复用连接)

说明rpc的使用范围、连接复用优势与执行限制,并给出示例。

使用其它函数间接执行远程函数(pnodeRun等)

讨论允许执行本地自定义函数的差异与安全注意点,并提及pnodeRun等函数。

分布式计算(mr / imr)

介绍mr/imr框架,并通过分布式线性回归与近似中位数示例说明用法与一致性描述。

元编程

解释元编程定义、目的与实现方式,并列举常用函数集合。

小结

对DolphinDB作为面向数据分析并与分布式数据库/计算紧密集成的语言特性进行收束描述。

Facts index

Entity Attribute Value Confidence
技能认证特训营第二期状态正式开启high
技能认证特训营第二期报名链接https://www.qingsuyun.com/h5/e/217471/5/high
文章《DolphinDB脚本语言的混合范式编程》发布日期2021-08-05high
文章《DolphinDB脚本语言的混合范式编程》作者署名Junxihigh
DolphinDB脚本语言设计灵感来源从流行的SQL和Python语言汲取灵感,设计了大数据处理脚本语言medium
本教程内容范围讲解如何通过混合范式编程快速开发大数据分析应用,并介绍DolphinDB编程语言如何与数据库和分布式计算融合high
向量化编程(DolphinDB)定位DolphinDB中最基本的编程范式high
DolphinDB函数(向量化)输入支持绝大部分函数支持向量作为输入参数high
DolphinDB函数分类分类方式按返回值分为聚合函数(返回标量)与向量函数(返回与输入向量等长的向量)high
向量化操作优点代码简洁;大幅降低脚本语言解释成本;可对很多算法进行优化medium
DolphinDB用于时间序列数据分析适用性原因时间序列与列式数据库的列可用向量表示;DolphinDB作为内存计算引擎或分析型数据仓库时适合向量化编程medium
示例:两长度为一千万的向量相加n值10000000high
for循环 vs 向量化(向量相加示例)性能差异使用for语句耗时是向量化编程的百倍以上medium
滑动窗口移动平均计算复杂度不批量计算复杂度O(nk)(n为数据量,k为窗口大小)high
滑动窗口移动平均计算复杂度批量计算复杂度O(n)high
DolphinDB滑动窗口指标函数包含函数列表mmax, mmin, mimax, mimin, mavg, msum, mcount, mstd, mvar, mrank, mcorr, mcovar, mbeta, mmedhigh
示例:moving(avg, a, window)Time elapsed4039.23 mshigh
示例:mavg(a, window)Time elapsed12.968 mshigh
示例:mavg vs 每窗口avg性能差异经过优化的mavg函数性能超过对每一个窗口使用avg函数300倍medium
向量化编程局限不是所有操作都能向量化;某些机器学习/统计场景只能逐行迭代处理high
DolphinDB(计划)将推出的技术后续版本计划推出即时编译技术(JIT),将for逐行处理代码运行时动态编译成机器码以显著提升性能medium
向量化计算(内存)内存要求/问题通常需要将整个向量加载到一段连续内存中;可能因内存碎片无法找到大段连续内存high
DolphinDB big array用途将物理不连续内存块组成逻辑上连续的向量;是否采用由系统动态决定且对用户透明high
big array性能损耗扫描损耗(相对连续内存)通常在1%~5%之间high
big array性能损耗随机访问损耗20%~30%左右high
DolphinDB big array取舍目标以可接受的少量性能损失换取更高可用性medium
SQL语言特性面向问题的语言;用户描述问题,SQL引擎产生结果medium
DolphinDB脚本语言SQL语句支持范围不仅支持SQL标准功能,还为大数据分析(尤其时间序列大数据)做了很多扩展以简化代码medium
DolphinDB(脚本语言与SQL)融合方式SQL语句是DolphinDB语言子集/一种表达式,可直接赋给变量或作为函数参数high
DolphinDB SQL上下文变量/函数使用SQL语句中可使用上下文创建的变量和函数;若涉及分布式表,这些变量和函数会自动序列化到相应节点high
DolphinDB SQL动态生成SQL语句不再是简单字符串,而是可动态生成的代码high
DolphinDB SQL可操作对象不仅操作table,也可对scalar、vector、matrix、set、dictionary等数据结构操作,且table可与其它数据结构转换high
DolphinDB编程语言大小写规则区分大小写;所有SQL关键词必须使用小写high
DolphinDBexec关键词与select相比,EXEC语句返回结果可以是matrix、vector或scalar,更便于数据分析high
DolphinDBexec与pivot byexec可与pivot by配合直接返回矩阵(示例)high
DolphinDB SQL面板数据处理子句引入context by子句处理面板数据high
其它数据库系统面板数据解决方式SQL Server、PostGreSQL等使用窗口函数(window function)解决保持组内行数的问题medium
context by vs 窗口函数优势(语法/系统化/表达能力)语法更简洁;与group by、pivot by组成三类分组处理子句;表达能力更强medium
context by能力可与select配合查询,也可与update配合更新数据high
context by分组字段范围可使用任何现有字段和计算字段进行分组high
context by函数/表达式限制不限制使用的函数,且可使用任意表达式(包括多个函数组合)high
context by与having配合可与having子句配合过滤每个组内部的行high
案例:Alpha因子计算(98号)数据规模中国股市3000多个股票、10年、近900万行历史数据medium
案例:C#计算Alpha98耗时约30分钟medium
案例:DolphinDB计算Alpha98核心代码行数与耗时4行核心代码,耗时仅2秒钟medium
案例:性能提升幅度(Alpha98)提升量级接近三个数量级的性能提升medium
DolphinDB(时间序列)存储与计算特性数据库采用列式存储,计算采用向量化编程,对时间序列数据天然友好medium
DolphinDB时间类型支持范围支持不同精度的时间类型;可通过SQL将高频数据转换为不同精度的低频数据(秒/分/小时),也可用bar函数与group by转换任意时间间隔high
DolphinDB时间序列建模支持关系支持lead、lag、sliding window、cumulative window等序列关系建模high
DolphinDB时间序列常用指标/函数性能相对其它系统做了优化,性能优于其它系统1~2个数量级medium
DolphinDB表联结(时间序列)提供的联结方式asof join 和 window joinhigh
window join文档参考链接https://www.dolphindb.cn/cn/help/windowjoin.htmlhigh
window join vs 其它数据库实现(同一问题)性能差异其它系统性能落后两个数量级以上(相对DolphinDB window join)medium
window join(金融)典型应用关联交易(trades)表与报价(quotes)表以计算交易成本high
DolphinDB SQL扩展UDF使用方式用户自定义函数无需编译、打包和部署即可在本节点或分布式环境的SQL中使用high
DolphinDB SQL与分布式计算框架集成效果紧密集成,使库内计算(in-database analytics)更便捷高效medium
DolphinDB SQL组合字段支持composite column,将复杂分析函数的多个返回值输出到数据表的一行high
组合字段(DolphinDB)函数输出要求输出必须是简单键值对(key-value pair)或数组;否则可用自定义函数转换high
组合字段用户手册链接参考链接https://www.dolphindb.cn/cn/help/groupby.htmlhigh
DolphinDB命令式编程支持支持命令式编程;目前支持18种语句(包括赋值、if..else、for、do..while等)high
编程语句用户手册链接(第五章)参考链接https://www.dolphindb.cn/cn/help/Chapter5ProgrammingStatements.htmlhigh
海量数据处理建议不推荐方式不推荐使用for、if..else等控制语句对数据逐行处理;更建议向量编程、函数编程、SQL编程等high
DolphinDB函数式编程支持的功能纯函数、自定义函数(udf)、lambda函数、高阶函数、部分应用、闭包high
函数式编程用户手册链接(第七章)参考链接https://www.dolphindb.cn/cn/help/Chapter7FunctionalProgramming.htmlhigh
DolphinDB函数(与Python对比)作用域限制函数体内只能引用函数参数和函数内局部变量,不能使用函数体外定义的变量high
DolphinDB函数作用域限制工程影响牺牲一部分语法糖灵活性,但有助于提高软件质量low
DolphinDB高阶函数示例cross用途将“A中任意元素与B中任意元素两两计算并产出m*n矩阵”的模式抽象为cross高阶函数high
DolphinDB模板高阶函数函数列表(示例枚举)all, any, each, loop, eachLeft, eachRight, eachPre, eachPost, accumulate, reduce, groupby, contextby, pivot, cross, moving, rollinghigh
示例:模拟生成数据点数量(tick相关性例)n值10000000high
DolphinDB部分应用语法调用与部分应用函数调用使用();部分应用使用{}high
DolphinDBratios实现说明ratios函数的具体实现是高阶函数eachPre的一个部分应用 eachPre{ratio}medium
部分应用用途之一可用于高阶函数以确保参数符合要求(示例:corr{a}与each配合)medium
部分应用用途之二可使函数保持状态(示例:流计算消息处理累计均值cumavg)high
DolphinDB RPC系统应用范围分布式文件系统、分布式数据库、分布式计算框架实现都采用DolphinDB原创的RPC系统medium
DolphinDB脚本语言(RPC)能力可通过RPC在远程机器上执行代码high
DolphinDB RPC可执行函数类型既可执行远程已注册函数,也可将本地自定义函数序列化到远程节点执行;远程执行权限等同于当前登录用户在本地权限high
DolphinDB RPC参数类型参数可以是scalar, vector, matrix, set, dictionary, table,也可以是函数(包括自定义函数)high
DolphinDB RPC连接方式既可使用两个节点之间的独占连接,也可使用集群数据节点之间的共享连接high
remoteRun用途在远程节点执行远程节点上注册函数或本地自定义函数(通过xdb连接)high
rpc函数使用范围只能在同一集群内的控制节点及数据节点之间使用high
rpc函数连接复用优势不需创建新连接,复用已存在网络连接,可节约网络资源并免去创建连接延迟;用户很多时有意义medium
rpc函数执行限制只能在远程节点执行一个函数;运行脚本需封装在自定义函数内high
DolphinDB用户创建限制只能在控制节点(master)上创建用户high
DolphinDB RPC子系统与其它RPC系统差异可在远程节点执行用户在本地自定义的函数;其它系统客户端通常只能调用远程已暴露注册函数medium
在远程节点执行自定义函数实现语言限制自定义函数目前必须使用DolphinDB脚本开发high
RPC与数据安全要求需要仔细规划和设置用户访问权限;若限制只能用注册函数,权限管理更简单(拒绝外部访问所有数据,仅授权访问注册视图函数)medium
pnodeRun用途在集群多个节点并行运行同一函数并合并返回结果high
DolphinDB分布式计算框架mr与imrmr用于基于MapReduce的分布式计算;imr用于基于迭代MapReduce的分布式计算high
分布式示例(线性回归/中位数)n值10000000high
分布式线性回归示例结果一致性使用自定义分布式算法myOLSEx得到的系数与使用内置ols在未分区数据上得到相同结果high
近似中位数算法示例基本原理利用bucketCount在每节点计算区间内计数并累加定位中位数区间,迭代细分区间至满足精度要求(使用imr)high
元编程定义使用程序代码创建可动态运行的程序代码;目的包括延迟执行或动态创建代码high
DolphinDB元编程实现途径使用尖括号<>表示延后执行的动态代码;或使用函数创建表达式high
DolphinDB元编程常用函数函数列表objByName, sqlCol, sqlColAlias, sql, expr, eval, partial, makeCallhigh
DolphinDB(小结)定位为数据分析而生的编程语言medium
DolphinDB(与Matlab/SAS/pandas对比)差异点与分布式数据库和分布式计算紧密集成,天生具备处理海量数据能力medium
DolphinDB支持的编程方式支持SQL编程、函数化编程和元编程;语言简洁灵活、表达能力强,提高数据科学家开发效率low
DolphinDB性能描述支持向量化计算和分布式计算,具有极快的运行速度low