CirroData存储过程系统介绍
存储过程可称为过程化SQL语言,是在普通SQL语句的基础上增加了编程语言的特点,把数据操作语句和查询语句组织在过程化代码中,通过逻辑判断、循环等操作实现复杂计算的程序语言。
在电信和金融等领域,很大一部分业务是使用存储过程开发的,其中应用为广泛的是Oracle存储过程。CirroData自主研发的存储过程在高度兼容Oralce存储过程语法的基础上,还具有分布式架构、单步调试、高可用等技术优势,因此其能够为客户提供更可靠、更高性价比的服务。存储过程技术是CirroData数据库实现国产化替代Oracle的又一把利器。现在,我们一起来开启CirroData存储过程的学习之旅。
CirroData存储过程体系结构
CirroData存储过程体系结构(如图1)包括存储过程执行引擎(TaskManager)、存储过程计算引擎(Executor)、存储过程脚本迁移工具(Traslator)、UDF计算引擎(UDFActuator)四个主要组件。
存储过程计算引擎(Executor)实现了存储过程脚本的语法解析、语义检查以及脚本中各种语句、表达式、系统函数的计算,其中,存储过程脚本的SQL语句是通过JDBC方式与CirroData Sever的SQL引擎进行交互计算。
存储过程脚本迁移工具(Traslator)目前已支持Oracle、Teradata脚本迁移,依托CirroData存储过程对SQL语句及PL/SQL的解析能力,在项目实践中成功迁移达90%以上,本文不进行展开介绍,后续文章会进行详解。
UDF计算引擎(UDFActuator)实现了CirroData自定义函数计算,其计算原理与存储过程执行引擎(Taskmanager)十分相似,但其部署和调用方式与存储过程执行引擎(Taskmanager)有所区别,本文不进行展开介绍,后续文章会进行详解。
图1.CirroData 存储过程体系结构
存储过程引擎分布式架构
CirroData存储过程引擎可与CirroData SQL引擎分开独立部署,可以通过自身负载均衡机制,均衡存储过程的计算负载。其SQL语句的执行,又可通过SQL引擎的负载均衡机制,均衡SQL计算的负载。通过两层均衡机制,极大增加了CirroData的吞吐量和稳定性。
图2.分布式存储过程引擎
存储过程语法解析执行架构
CirroData存储过程语法解析执行架构(如图3)是完全自主研发,不依赖开源组件的灵活可控技术体系,并且为快速实现CirroData数据库特有语法及功能提供了强有力的技术支持。存储过程语法解析执行的大致流程如下:
解析阶段:存储过程脚本会被拆解为字符流、由词法解析器(Lexer)解析为单词(Token)、单词(Token)经语法解析器(Parser)初步构成语法树;在此语法解析过程中,会对语法树中可能用到的元数据对象进行收集,并在元数据组装模块(AM)进行统一的元数据查找;然后,通过语义检查(SC)对语法树和元数据进行分析,产生符合语义的语法树;后,通过组合模块(STG)将子过程子函数进行组合,从而产生可执行的完整语法树结构。
执行阶段:存储过程计算引擎提供了两种计算模式,单步执行和非单步执行。两种计算模式都会对语法树进行遍历计算,单步执行模式会通过变量上下文栈(Context)来记录变量及其作用域信息,并通过语句调用栈(CallStack)来记录语句执行轨迹,非单步执行模式则不会使用语句调用栈(CallStack)记录语句执行轨迹。单步执行模式对语句执行轨迹的记录是实现存储过程Debug调试,存储过程高可用的技术基础。非单步执行的计算性能会高于单步执行,如自定义函数的计算,对性能要求较高,一般采用非单步执行模式。
图3.存储过程计算引擎架构
存储过程单步调试
单步调试是对语句进行逐行断点调试并且展示语句执行栈和变量上下文等信息的功能。目前CirroData存储过程基于单步执行的计算架构、配合SqlDeveloper,已经实现了单步调试的功能(如图4)、具体包括设置断点、查看断点、查看变量、查看堆栈、单步运行、继续、断点跳过、中断等功能点。单步调试功能为用户开发存储过程提供了极大便利。
存储过程高可用
依托存储过程引擎分布式架构以及单步执行的能力,存储过程引擎在节点发生故障的情况下,可以进行执行任务的转交,达到存储过程高可用(如图5)的目标。
执行任务转交流程如下:在存储过程任务执行中,存储过程引擎将语句的执行轨迹信息保存到HDFS或者Redis集群,其中包括语法解析产生的语法树,语句单步执行产生的变量上下文栈和语句执行栈,游标产生的数据等信息;当节点发生故障时,存储过程引擎将执行任务移交到其他节点;其它节点根据语句执行的轨迹信息接续执行存储过程任务。
图5.存储过程高可用
综述与展望
CirroData存储过程高度兼容Oracle PL/SQL语法,从功能和语法覆盖度上已可满足绝大多数客户使用场景。CirroData存储过程是自主可控的技术体系,能够快速响应新增需求;其分布式的部署形式能够有效增加集群吞吐量,降低资源争抢风险。CirroData存储过程依托其解析执行架构特点提供了友好的调试功能,并具备了高可用的安全计算能力。
随着CirroData数据库对海量数据处理加工能力的提升,其对存储过程、特别是自定义函数的计算性能提出了更高的要求。未来的存储过程计算除安全稳定的计算模式之外,将引入LLVM技术来进一步实现编译计算,从而大幅提高计算性能、进一步扩大CirroData数据库对海量数据加工处理的技术优势。
来源:https://mp.weixin.qq.com/s/FxqslEH39hSuMJ1wcIWROA
相关文章