CN106156353A - 一种为数据库增加多语言动态编译执行引擎的方法和*** - Google Patents
一种为数据库增加多语言动态编译执行引擎的方法和*** Download PDFInfo
- Publication number
- CN106156353A CN106156353A CN201610599362.6A CN201610599362A CN106156353A CN 106156353 A CN106156353 A CN 106156353A CN 201610599362 A CN201610599362 A CN 201610599362A CN 106156353 A CN106156353 A CN 106156353A
- Authority
- CN
- China
- Prior art keywords
- extension
- script
- scripted code
- warehouse
- logical function
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种为数据库增加多语言动态编译执行引擎的方法和***,该方法在数据库数据操作过程中、自定义函数执行时或存储过程执行时,当执行扩展逻辑函数时,判断脚本仓库中是否有扩展逻辑函数对应的扩展脚本代码,若有,根据扩展脚本代码对应的参数标识值,检测内存是否已经编译存在扩展脚本代码对应的脚本扩展实例;若存在,从内存读取定位已编译的脚本扩展实例,将调用所述脚本扩展实例的上下文参数传入所述脚本扩展实例,判断脚本扩展实例是同步运行还是异步运行;若是同步运行,则由多语言动态脚本执行引擎驱动运行脚本扩展实例,若是异步运行,则由后台新的线程运行,或将运行脚本扩展实例的任务放入到任务队列。
Description
技术领域
本发明属于计算机技术领域,具体涉及一种为数据库增加多语言动态编译执行引擎的方法和***。
背景技术
在SQL Server或Oracle中如果需要编程实现一定的逻辑处理,则需要使用T-SQL(或PL-SQL)来实现,这些语言属于过程化语言,只具有最基本的变量定义、执行流控制、***功能函数,另外T-SQL本身不适合做复杂的逻辑判断和逻辑运算,无法实现复杂的数据结构、编写效率较低,缺乏面向对象的灵活性,在开发工具中也没有代码自动提示、补全,也没有配色和强大的人性化的调试功能。
现有数据库的功能作用只是对于数据的增删改查,无法对数据进行数据逻辑方面的处理,如对数据的分析、转换、过滤、清洗、挖掘、路由、预测等复杂的高级逻辑分析处理,而***自带的函数较少且功能有限、使用T-SQL编写效率低,容易出错,无法满足更为复杂的数据逻辑分析处理。
发明内容
本发明所要解决的技术问题是如何使得数据库实现更为复杂的业务逻辑判断和逻辑运算,提高数据库的扩展性和灵活性。。
针对以上技术问题,本发明提供了一种为数据库增加多语言动态编译执行引擎的方法,包括:
S1:数据库数据操作过程中、自定义函数执行时或存储过程执行时,当执行扩展逻辑函数时,判断脚本仓库中是否有所述扩展逻辑函数对应的扩展脚本代码;
S2:若所述脚本仓库中有所述扩展逻辑函数对应的扩展脚本代码,根据所述扩展脚本代码对应的参数标识值,检测内存是否已经编译存在所述扩展脚本代码对应的脚本扩展实例;
S3:若已经编译存在所述脚本扩展实例,从内存读取定位已编译的脚本扩展实例,将调用所述脚本扩展实例的上下文参数传入所述脚本扩展实例,判断所述脚本扩展实例是同步运行还是异步运行;
S4:若所述脚本扩展实例是同步运行,则由多语言动态脚本执行引擎驱动运行所述脚本扩展实例,若所述脚本扩展实例是异步运行,则由后台新的线程运行,或将运行所述脚本扩展实例的任务放入到任务队列等待运行;
其中,所述扩展逻辑函数对应的扩展脚本代码是根据需要扩展的业务编写并存储至脚本仓库中的扩展脚本代码。
优选地,所述步骤S3还包括:
若不存在编译的所述脚本扩展实例,则将所述扩展脚本代码载入多语言动态脚本编译引擎,加载扩展拦截语言所需要的外部关联模块和资源进行编译,将编译后的内存字节存储于内存并实例化,以得到所述脚本扩展实例;
其中,所述扩展脚本代码根据需要采用预设语言进行编写,所述多语言动态脚本编译引擎用于对采用所述预设语言编写的扩展脚本代码进行编译。
优选地,所述步骤S2还包括:
若所述脚本仓库中没有所述扩展逻辑函数对应的扩展脚本代码,则结束所述扩展逻辑函数执行过程。
优选地,所述步骤S4还包括:
检测所述脚本扩展实例的运行过程是否出现异常或运行过程超时,若所述脚本扩展实例的运行过程没有出现异常和运行过程超时,则返回正常运行结果,若出现异常,异步记录运行的异常信息并返回,若运行过程超时,异步记录运行过程超时的时长并返回。
优选地,将所述扩展逻辑函数对应的扩展脚本代码存储至脚本仓库中的过程包括:
根据需要扩展的业务,编写扩展脚本代码;
检验所述扩展脚本代码是否能正常编译,若是,将所述扩展脚本代码存储至所述脚本仓库,否则,对所述扩展脚本代码进行修改,以使所述扩展脚本代码能正常编译,并将能正常编译的扩展脚本代码存储至所述脚本仓库。
另一方面,本发明还提供了一种为数据库增加多语言动态编译执行引擎的***,,包括:
第一判断模块,用于在数据库数据操作过程中、自定义函数执行时或存储过程执行时,当执行扩展逻辑函数时,判断脚本仓库中是否有所述扩展逻辑函数对应的扩展脚本代码;
检测模块,用于在所述脚本仓库中有所述扩展逻辑函数对应的扩展脚本代码时,根据所述扩展脚本代码对应的参数标识值,检测内存是否已经编译存在所述扩展脚本代码对应的脚本扩展实例;
第二判断模块,用于在已经编译存在所述脚本扩展实例时,从内存读取定位已编译的脚本扩展实例,将调用所述脚本扩展实例的上下文参数传入所述脚本扩展实例,判断所述脚本扩展实例是同步运行还是异步运行;
运行模块,用于在所述脚本扩展实例是同步运行时,由多语言动态脚本执行引擎驱动运行所述脚本扩展实例,在所述脚本扩展实例是异步运行时,则由后台新的线程运行,或将运行所述脚本扩展实例的任务放入到任务队列等待运行;
其中,所述扩展逻辑函数对应的扩展脚本代码是根据需要扩展的业务编写并存储至脚本仓库中的扩展脚本代码。
优选地,所述第二判断模块还用于在不存在编译的所述脚本扩展实例时,将所述扩展脚本代码载入多语言动态脚本编译引擎,加载扩展拦截语言所需要的外部关联模块和资源进行编译,将编译后的内存字节存储于内存并实例化,以得到所述脚本扩展实例;
其中,所述扩展脚本代码根据需要采用预设语言进行编写,所述多语言动态脚本编译引擎用于对采用所述预设语言编写的扩展脚本代码进行编译。
优选地,所述检测模块还用于在所述脚本仓库中没有所述扩展逻辑函数对应的扩展脚本代码时,结束所述扩展逻辑函数执行过程。
优选地,所述运行模块还用于检测所述脚本扩展实例的运行过程是否出现异常或运行过程超时,若所述脚本扩展实例的运行过程没有出现异常和运行过程超时,则返回正常运行结果,若出现异常,异步记录运行的异常信息并返回,若运行过程超时,异步记录运行过程超时的时长并返回。
优选地,还包括:将所述扩展逻辑函数对应的扩展脚本代码存储至脚本仓库中的存储模块;
所述存储模块用于根据需要扩展的业务,编写扩展脚本代码;检验所述扩展脚本代码是否能正常编译,若是,将所述扩展脚本代码存储至所述脚本仓库,否则,对所述扩展脚本代码进行修改,以使所述扩展脚本代码能正常编译,并将能正常编译的扩展脚本代码存储至所述脚本仓库。
本发明提供的为数据库增加多语言动态编译执行引擎的方法和***,在数据库数据操作过程中,通过对在线添加的扩展逻辑函数的执行,使得数据库能够实现数据逻辑的处理,如数据的实时清洗、同步、复制、分析、压缩、合并、拆分、转换、报警、加密、解密、正则表达式、xml数据操作等等自定义更为高级的分析函数和逻辑处理函数。同时,由于数据与逻辑在同一台服务器,使算法逻辑与数据紧密结合,可以进行多线程同步并行数据处理,对数据的变化进行实时监测处理,充分改善数据库的性能和可扩展性能。其次,多语言动态编译和执行引擎还增加了异步编程执行队列模型,可以减少网络交互节约大量IO网络流量,以此缩短响应时间,提高吞吐量。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的为数据库增加多语言动态编译执行引擎的方法的流程示意图;
图2是本发明实施例提供的为数据库增加多语言动态编译执行引擎的***的结构框图;
图3是本发明实施例提供的数据库调用扩展逻辑函数的过程示意图;
图4是本发明实施例提供的扩展逻辑函数存储过程示例图;
图5是本发明实施例提供的为数据库增加多语言动态编译执行引擎的具体运行过程流程示意图;
图6是本发明实施例提供的在线开发逻辑示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1是本实施例提供的为数据库增加多语言动态编译执行引擎的方法的流程示意图。参见图1,该方法包括:
S1:数据库数据操作过程中、自定义函数执行时或存储过程执行时,当执行扩展逻辑函数时,判断脚本仓库中是否有扩展逻辑函数对应的扩展脚本代码;
S2:若所述脚本仓库中有所述扩展逻辑函数对应的扩展脚本代码,根据所述扩展脚本代码对应的参数标识值,检测内存是否已经编译存在所述扩展脚本代码对应的脚本扩展实例;
S3:若已经编译存在所述脚本扩展实例,从内存读取定位已编译的脚本扩展实例,将调用所述脚本扩展实例的上下文参数传入所述脚本扩展实例,判断所述脚本扩展实例是同步运行还是异步运行;
S4:若所述脚本扩展实例是同步运行,则由多语言动态脚本执行引擎驱动运行所述脚本扩展实例,若所述脚本扩展实例是异步运行,则由后台新的线程运行,或将运行所述脚本扩展实例的任务放入到任务队列等待运行;
其中,所述扩展逻辑函数对应的扩展脚本代码是根据需要扩展的业务编写并存储至脚本仓库中的扩展脚本代码。
数据库数据操作过程(例如,对数据库数据进行添加、删除、修改、查询)、自定义函数执行(自定义函数是数据库中使用数据库中现有的函数编写的新的函数)、存储过程执行,当需要执行外部编写的扩展逻辑函数时,需要判断脚本仓库中是否有所述扩展逻辑函数对应的扩展脚本代码。其中,扩展逻辑函数是用外部面向对象的高级语言所编写的函数。自定义函数可以包括调用扩展逻辑函数的函数,以实现对扩展逻辑函数的调用。
数据库数据操作过程包括数据库数据进行添加、删除、修改、查询(Create/Delete/Update)数据的之前之后。扩展脚本代码采用JAVA、C#、VB.NET、Python等中的一种进行编写。
该方法通过多语言动态编译执行引擎使得数据库可以通过更为高级的编程语言,实现更为复杂的业务逻辑判断和逻辑运算,从而提高数据库的扩展性和灵活性。通过将数据库与多语言动态编译执行引擎的有效结合,增强了数据库的扩展性和灵活性。
当然,该方法应用在当前数据库中的数据操作过程中,存储过程、用户自定义函数中,还可以用于聚合函数、表值函数、触发器等之中增强数据库功能和扩展性。
本实施例提供的为数据库增加多语言动态编译执行引擎的方法,在数据库数据操作过程中,通过对在线添加的扩展逻辑函数的执行,使得数据库能够实现数据逻辑的处理,如数据的实时清洗、同步、复制、分析、压缩、合并、拆分、转换、报警、加密、解密、正则表达式、xml数据操作等等自定义更为高级的分析函数和逻辑处理函数。同时,由于数据与逻辑在同一台服务器,使算法逻辑与数据紧密结合,可以进行多线程同步并行数据处理,对数据的变化进行实时监测处理,充分改善数据库的性能和可扩展性能。其次,多语言动态编译和执行引擎还增加了异步编程执行队列模型,可以减少网络交互节约大量IO网络流量,以此缩短响应时间,提高吞吐量。
进一步地,所述步骤S3还包括:
若不存在编译的所述脚本扩展实例,则将所述扩展脚本代码载入多语言动态脚本编译引擎,加载扩展拦截语言所需要的外部关联模块和资源进行编译,将编译后的内存字节存储于内存并实例化,以得到所述脚本扩展实例;
其中,所述扩展脚本代码根据需要采用预设语言进行编写,所述多语言动态脚本编译引擎用于对采用所述预设语言编写的扩展脚本代码进行编译。
不同的语言编写的扩展脚本代码载入到与该语言相关的多语言动态脚本编译引擎中。如果不存在已经编译的脚本扩展实例,则有两可能,第一、首次运行、只编译一次;第二、扩展拦截脚本代码已经被编辑,脚本代码发生变化需要被替换。动态扩展脚本代码载入到框架***并创建脚本扩展实例所遵守的原则是:在运行的时候再进行载入,不需要或者需要替换就把脚本模块卸载,这样可以减少内存的占用。
进一步地,所述步骤S2还包括:
若所述脚本仓库中没有所述扩展逻辑函数对应的扩展脚本代码,则结束所述扩展逻辑函数执行过程。
进一步地,所述步骤S4还包括:
检测所述脚本扩展实例的运行过程是否出现异常或运行过程超时,若所述脚本扩展实例的运行过程没有出现异常和运行过程超时,则返回正常运行结果,若出现异常,异步记录运行的异常信息并返回,若运行过程超时,异步记录运行过程超时的时长并返回。
进一步地,将所述扩展逻辑函数对应的扩展脚本代码存储至脚本仓库中的过程包括:
根据需要扩展的业务,编写扩展脚本代码;
检验所述扩展脚本代码是否能正常编译,若是,将所述扩展脚本代码存储至所述脚本仓库,否则,对所述扩展脚本代码进行修改,以使所述扩展脚本代码能正常编译,并将能正常编译的扩展脚本代码存储至所述脚本仓库。
图2是本实施例提供的为数据库增加多语言动态编译执行引擎的***的结构框图。参见图2,该为数据库增加多语言动态编译执行引擎的***200,包括第一判断模块201、检测模块202、第二判断模块203和运行模块204。
第一判断模块201,用于在数据库数据操作过程中、自定义函数执行时或存储过程执行时,当执行扩展逻辑函数时,判断脚本仓库中是否有所述扩展逻辑函数对应的扩展脚本代码;
检测模块202,用于在所述脚本仓库中有所述扩展逻辑函数对应的扩展脚本代码时,根据所述扩展脚本代码对应的参数标识值,检测内存是否已经编译存在所述扩展脚本代码对应的脚本扩展实例;
第二判断模块203,用于在已经编译存在所述脚本扩展实例时,从内存读取定位已编译的脚本扩展实例,将调用所述脚本扩展实例的上下文参数传入所述脚本扩展实例,判断所述脚本扩展实例是同步运行还是异步运行;
运行模块204,用于在所述脚本扩展实例是同步运行时,由多语言动态脚本执行引擎驱动运行所述脚本扩展实例,在所述脚本扩展实例是异步运行时,则由后台新的线程运行,或将运行所述脚本扩展实例的任务放入到任务队列等待运行;
其中,所述扩展逻辑函数对应的扩展脚本代码是根据需要扩展的业务编写并存储至脚本仓库中的扩展脚本代码。
本实施例提供的为数据库增加多语言动态编译执行引擎的***,在数据库数据操作过程中,通过对在线添加的扩展逻辑函数的执行,使得数据库能够实现数据逻辑的处理,如数据的实时清洗、同步、复制、分析、压缩、合并、拆分、转换、报警、加密、解密、正则表达式、xml数据操作等等自定义更为高级的分析函数和逻辑处理函数。同时,由于数据与逻辑在同一台服务器,使算法逻辑与数据紧密结合,可以进行多线程同步并行数据处理,对数据的变化进行实时监测处理,充分改善数据库的性能和可扩展性能。其次,多语言动态编译和执行引擎还增加了异步编程执行队列模型,可以减少网络交互节约大量IO网络流量,以此缩短响应时间,提高吞吐量。
进一步地,所述第二判断模块还用于在不存在编译的所述脚本扩展实例时,将所述扩展脚本代码载入多语言动态脚本编译引擎,加载扩展拦截语言所需要的外部关联模块和资源进行编译,将编译后的内存字节存储于内存并实例化,以得到所述脚本扩展实例;
其中,所述扩展脚本代码根据需要采用预设语言进行编写,所述多语言动态脚本编译引擎用于对采用所述预设语言编写的扩展脚本代码进行编译。
进一步地,所述检测模块还用于在所述脚本仓库中没有所述扩展逻辑函数对应的扩展脚本代码时,结束所述扩展逻辑函数执行过程。
进一步地,所述运行模块还用于检测所述脚本扩展实例的运行过程是否出现异常或运行过程超时,若所述脚本扩展实例的运行过程没有出现异常和运行过程超时,则返回正常运行结果,若出现异常,异步记录运行的异常信息并返回,若运行过程超时,异步记录运行过程超时的时长并返回。
进一步地,还包括:将所述扩展逻辑函数对应的扩展脚本代码存储至脚本仓库中的存储模块;
所述存储模块用于根据需要扩展的业务,编写扩展脚本代码;检验所述扩展脚本代码是否能正常编译,若是,将所述扩展脚本代码存储至所述脚本仓库,否则,对所述扩展脚本代码进行修改,以使所述扩展脚本代码能正常编译,并将能正常编译的扩展脚本代码存储至所述脚本仓库。
作为一种具体的实施例,图3是本实施例提供的数据库调用扩展逻辑函数的过程示意图,调用者在调用SQL Server数据库或者Oracle数据库中的数据时,当需要执行扩展逻辑函数时,通过动态脚本执行引擎执行脚本扩展实例。当不存在脚本扩展实例时,通过动态脚本编译引擎对扩展脚本代码进行编译,生成脚本扩展实例,再由动态脚本执行引擎执行脚本扩展实例,实现扩展逻辑函数的调用。其中,扩展脚本代码可以由JAVA、C#、VB.NET、Python等中的一种进行编写。
图4是本实施例提供的扩展逻辑函数存储过程示例图,在线自定义的扩展逻辑函数(例如,图4中的在线自定义逻辑A、在线自定义逻辑B和在线自定义逻辑C)的扩展脚本代码存储于脚本仓库中,当数据库的数据执行过程中,需要调用扩展逻辑函数时,直接执行相应的扩展脚本代码的脚本扩展实例。扩展逻辑代码可以由开发者自己选择语言进行编写,例如,图4中的在线自定义逻辑A采用JAVA进行编写、在线自定义逻辑B采用VB.NET进行编写,在线自定义逻辑C采用Python进行编写。
图5是本实施例提供的为数据库增加多语言动态编译执行引擎的具体运行过程流程示意图,参见图5,该运行流程包括:
1)选择合适的编程开发语言
2)根据扩展需要在线添加需要扩展的逻辑函数。
3)对脚本进行编译检测错误。
4)将脚本保存到脚本仓库中。
5)当数据库数据进行添加、删除、修改、查询(Create/Delete/Update)数据的之前之后或存储过程、自定义函数执行时。
6)检查判断是否有自定义的动态脚本逻辑。
7)如果有自定义的动态脚本逻辑扩展,则跳转到9。
8)如果没有自定义的动态脚本逻辑扩展,则跳转到20。
9)根据传入的参数标识值,检测内存是否已经编译存在此动态脚本扩展实例。(不存在已经编译的实例,则有两可能,第一、首次运行、只编译一次,第二、扩展拦截脚本代码已经被编辑发生变化需要被替换)。动态脚本载入到框架***并创建实例所遵守的原则是:在运行的时候再进行载入,不需要或者需要替换就把脚本模块卸载,这样可以减少内存的占用。
10)如果存在动态脚本逻辑扩展内存实例,则跳转到12。
11)如果不存在动态脚本逻辑扩展内存实例,则跳转到21。
12)从内存读取定位已编译的动态脚本逻辑扩展内存实例。
13)判断是动态脚本逻辑扩展是同步运行还是异步运行。
14)如果是同步运行,则跳转到16。
15)如果是异步运行,则跳转到17。
16)由多语言动态脚本执行引擎驱动运行实例同步运行指定函数方法
17)由后台由其它线程运行,或将任务入到任务队列等待运行,直接返回)。
18)如果运行出现异常或超过指定的时间,则跳转至20。
19)***异步记录运行日志&性能、耗时情况,异常信息。
20)正常运行结果返回,直接结束。
21)将扩展拦截脚本代码载入多语言动态脚本编译引擎。不同的语言,将载入到不同的编译引擎中进行编译。
22)加载扩展拦截语言所需要的外部关联模块和资源进行编译。复杂的业务逻辑,通常一段脚本代码是无法完成的,需要依赖于外部dll或jar等资源参与共同编译。
23)将编译后的内存字节放置于内存并实例化做相应的初始化操作,跳转至12。
图6是本实施例提供的在线开发逻辑示意图。在图6示出的添加扩展脚本代码的界面示意图中,可以看出在扩展逻辑开发的过程中,在添加扩展脚本代码时,需要添加的信息有服务名称、服务方法、语言、失败处理方法、调用点、运行方式、动态脚本以及对脚本的描述。
使用本发明一种为数据库增加多语言动态编译执行引擎的方法和***,可以轻松在线对数据库进行功能扩展,添加运行逻辑代码实现,并且也可以修改逻辑代码,修改后立即生效。下面是本发明提供的方法在具体场景中应用的示例:
示例一:车速超临界值报警,对于一辆车的速度进行实时采集,数据每隔一段时间就会上传到数据库中,当车的速度瞬间超过每小时超过90公里时,或持续10分钟时速还超过90公里以上,则自动触发一个报警短信,立即发送给车主进行提醒,具体做法为在线扩展定义一个逻辑函数,在数据***数据库的前一刻(也可以在数据***之后再进行判断),对数据进行检测和逻辑判断,违反规则者则立即发送短信。
示例二:异构数据库数据的实时同步备份或灾备,传统的做法是需要写程序将SQLServer数据库中的数据先取出,然后再***到Oracle数据库中,以供不同的***实时来读取数据。SQLServer数据库中进入一条数据,程序需要取出一条数据,而采用本发明则可以实时传递推送数据至另外一个数据库。具体做法是在线扩展定义一个逻辑函数,在数据***数据库后,调用这个函数,将***的数据传入这个函数,这个函数会将传入的数据再***到另外一个数据库中。
示例三:对进入数据库中的数据进行压缩,数据在被***到数据库之前,我们可以先对数据进行压缩,再进行***持久化操作。具体做法是在线扩展一个逻辑函数,在数据***数据库时,即Insert***语句的值外面加上这个数据压缩函数,函数将传入的数据压缩后返回,以此减少数据存储空间。
示例四:监控银行帐户非法取现,当银行数据库中某个指定帐户在短暂时间段内,被大量提取现金,达到指定规则,如在1小时内某帐户提线超过10万且超过指定次数,则立即将此帐号锁定,并通知帐户所有者,是否存在非法盗用的可能。具体做法是在线扩展定义一个逻辑函数,编写规则和通知方式,每当此帐户的数据更新减少时则记录并运行规则,如符合规则,则立即通知相关人员。
本发明一种为现有数据库Oracle/SQLServer数据库增加多语言动态编译执行引擎的方法和***,给数据库增加开发框架,利用JAVA、C#、VB.NET、Python等语言将开发语言与数据库紧密结合,将原本需要独立在外部的程序逻辑功能代码,将之迁移到SQL Server/Oracle内部进行数据操作,这种将自定义的程序逻辑和算法内置到数据库服务器中,编译为本机代码,可以充分利用实时计算的能力、高效地执行数据分析和逻辑处理任务,大幅度提高性能。
多语言动态编译执行引擎提供一种全新的、更加高效的、即时的、快捷的在线编程编译环境,在线动态扩展增强数据库功能(也可分布式),在数据增删改查之前、之后、之中等做任何逻辑扩展,且一次编程可以在多个数据库中实现共用,从而给数据库带来极大的灵活性、扩展性以及可维护性。
将多语言动态编译执行引擎与数据库的完美结合,使开发人员能够直接在服务器端使用现有功能强大的编程语言,使之许多之前用T-SQL难以实现的任务从而得以实现。
本发明一种为数据库增加多语言动态编译执行引擎的方法和***,可以在线扩展执行任何逻辑函数,如数据的实时清洗、同步、复制、分析、压缩、合并、拆分、转换、报警、加密、解密、正则表达式、xml数据操作等等自定义更为高级的分析函数和逻辑处理函数,直接应用在当前数据库中的数据操作过程中,存储过程、用户自定义函数、聚合函数、表值函数、触发器等之中增强数据库功能和扩展性。另外由于数据与逻辑在同一台服务器,使算法逻辑与数据紧密结合,可以进行多线程同步并行数据处理,对数据的变化进行实时监测处理,充分改善数据库的性能和可扩展性能力。
多语言动态编译执行引擎还提供了增加了可靠的、可扩展、分布式的异步编程执行队列模型,可以减少网络交互节约大量IO网络流量,以此缩短响应时间,提高吞吐量。
T-SQL更适合在数据访问时没有逻辑或逻辑简单情况下使用,而多语言动态编译执行引擎的引入,则使之也具备了密集计算和更为复杂逻辑处理场合,最终给数据库带来极大的灵活性、扩展性以及可维护性。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种为数据库增加多语言动态编译执行引擎的方法,其特征在于,包括:
S1:数据库数据操作过程中、自定义函数执行时或存储过程执行时,当执行扩展逻辑函数时,判断脚本仓库中是否有所述扩展逻辑函数对应的扩展脚本代码;
S2:若所述脚本仓库中有所述扩展逻辑函数对应的扩展脚本代码,根据所述扩展脚本代码对应的参数标识值,检测内存是否已经编译存在所述扩展脚本代码对应的脚本扩展实例;
S3:若已经编译存在所述脚本扩展实例,从内存读取定位已编译的脚本扩展实例,将调用所述脚本扩展实例的上下文参数传入所述脚本扩展实例,判断所述脚本扩展实例是同步运行还是异步运行;
S4:若所述脚本扩展实例是同步运行,则由多语言动态脚本执行引擎驱动运行所述脚本扩展实例,若所述脚本扩展实例是异步运行,则由后台新的线程运行,或将运行所述脚本扩展实例的任务放入到任务队列等待运行;
其中,所述扩展逻辑函数对应的扩展脚本代码是根据需要扩展的业务编写并存储至脚本仓库中的扩展脚本代码。
2.根据权利要求1中的方法,其特征在于,所述步骤S3还包括:
若不存在编译的所述脚本扩展实例,则将所述扩展脚本代码载入多语言动态脚本编译引擎,加载扩展拦截语言所需要的外部关联模块和资源进行编译,将编译后的内存字节存储于内存并实例化,以得到所述脚本扩展实例;
其中,所述扩展脚本代码根据需要采用预设语言进行编写,所述多语言动态脚本编译引擎用于对采用所述预设语言编写的扩展脚本代码进行编译。
3.根据权利要求1中的方法,其特征在于,所述步骤S2还包括:
若所述脚本仓库中没有所述扩展逻辑函数对应的扩展脚本代码,则结束所述扩展逻辑函数执行过程。
4.根据权利要求1中的方法,其特征在于,所述步骤S4还包括:
检测所述脚本扩展实例的运行过程是否出现异常或运行过程超时,若所述脚本扩展实例的运行过程没有出现异常和运行过程超时,则返回正常运行结果,若出现异常,异步记录运行的异常信息并返回,若运行过程超时,异步记录运行过程超时的时长并返回。
5.根据权利要求1中的方法,其特征在于,将所述扩展逻辑函数对应的扩展脚本代码存储至脚本仓库中的过程包括:
根据需要扩展的业务,编写扩展脚本代码;
检验所述扩展脚本代码是否能正常编译,若是,将所述扩展脚本代码存储至所述脚本仓库,否则,对所述扩展脚本代码进行修改,以使所述扩展脚本代码能正常编译,并将能正常编译的扩展脚本代码存储至所述脚本仓库。
6.一种为数据库增加多语言动态编译执行引擎的***,其特征在于,包括:
第一判断模块,用于在数据库数据操作过程中、自定义函数执行时或存储过程执行时,当执行扩展逻辑函数时,判断脚本仓库中是否有所述扩展逻辑函数对应的扩展脚本代码;
检测模块,用于在所述脚本仓库中有所述扩展逻辑函数对应的扩展脚本代码时,根据所述扩展脚本代码对应的参数标识值,检测内存是否已经编译存在所述扩展脚本代码对应的脚本扩展实例;
第二判断模块,用于在已经编译存在所述脚本扩展实例时,从内存读取定位已编译的脚本扩展实例,将调用所述脚本扩展实例的上下文参数传入所述脚本扩展实例,判断所述脚本扩展实例是同步运行还是异步运行;
运行模块,用于在所述脚本扩展实例是同步运行时,由多语言动态脚本执行引擎驱动运行所述脚本扩展实例,在所述脚本扩展实例是异步运行时,则由后台新的线程运行,或将运行所述脚本扩展实例的任务放入到任务队列等待运行;
其中,所述扩展逻辑函数对应的扩展脚本代码是根据需要扩展的业务编写并存储至脚本仓库中的扩展脚本代码。
7.根据权利要求6中的***,其特征在于,所述第二判断模块还用于在不存在编译的所述脚本扩展实例时,将所述扩展脚本代码载入多语言动态脚本编译引擎,加载扩展拦截语言所需要的外部关联模块和资源进行编译,将编译后的内存字节存储于内存并实例化,以得到所述脚本扩展实例;
其中,所述扩展脚本代码根据需要采用预设语言进行编写,所述多语言动态脚本编译引擎用于对采用所述预设语言编写的扩展脚本代码进行编译。
8.根据权利要求6中的***,其特征在于,所述检测模块还用于在所述脚本仓库中没有所述扩展逻辑函数对应的扩展脚本代码时,结束所述扩展逻辑函数执行过程。
9.根据权利要求6中的***,其特征在于,所述运行模块还用于检测所述脚本扩展实例的运行过程是否出现异常或运行过程超时,若所述脚本扩展实例的运行过程没有出现异常和运行过程超时,则返回正常运行结果,若出现异常,异步记录运行的异常信息并返回,若运行过程超时,异步记录运行过程超时的时长并返回。
10.根据权利要求6中的***,其特征在于,还包括:将所述扩展逻辑函数对应的扩展脚本代码存储至脚本仓库中的存储模块;
所述存储模块用于根据需要扩展的业务,编写扩展脚本代码;检验所述扩展脚本代码是否能正常编译,若是,将所述扩展脚本代码存储至所述脚本仓库,否则,对所述扩展脚本代码进行修改,以使所述扩展脚本代码能正常编译,并将能正常编译的扩展脚本代码存储至所述脚本仓库。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610599362.6A CN106156353B (zh) | 2016-07-26 | 2016-07-26 | 一种为数据库增加多语言动态编译执行引擎的方法和*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610599362.6A CN106156353B (zh) | 2016-07-26 | 2016-07-26 | 一种为数据库增加多语言动态编译执行引擎的方法和*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106156353A true CN106156353A (zh) | 2016-11-23 |
CN106156353B CN106156353B (zh) | 2019-08-09 |
Family
ID=58060878
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610599362.6A Active CN106156353B (zh) | 2016-07-26 | 2016-07-26 | 一种为数据库增加多语言动态编译执行引擎的方法和*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106156353B (zh) |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108334325A (zh) * | 2017-12-26 | 2018-07-27 | 努比亚技术有限公司 | 一种编译方法、计算机及计算机可读存储介质 |
CN108376064A (zh) * | 2016-11-24 | 2018-08-07 | 阿里巴巴集团控股有限公司 | 规则引擎***及规则引擎的相关方法 |
CN108667919A (zh) * | 2018-04-25 | 2018-10-16 | 金蝶软件(中国)有限公司 | 数据处理方法、装置、计算机设备和存储介质 |
CN109254838A (zh) * | 2018-08-21 | 2019-01-22 | 中邮科通信技术股份有限公司 | 一种基于JAVA BeanShell的自动化任务 |
CN110045962A (zh) * | 2019-01-15 | 2019-07-23 | 阿里巴巴集团控股有限公司 | 一种支持多语言脚本执行的方法和装置 |
US10417036B2 (en) | 2017-02-24 | 2019-09-17 | Oracle International Corporation | Evaluation techniques for fast access to structured, semi-structured and unstructured data using a virtual machine that provides support for dynamic code generation |
CN110263055A (zh) * | 2019-06-18 | 2019-09-20 | 上海达梦数据库有限公司 | 一种参数提示方法、装置、设备和存储介质 |
CN111258588A (zh) * | 2020-02-26 | 2020-06-09 | 杭州优稳自动化***有限公司 | 一种用于控制工程软件的脚本执行速度提升方法及装置 |
US10684873B2 (en) | 2018-06-12 | 2020-06-16 | Oracle International Corporation | Efficient data decoding using runtime specialization |
CN112765128A (zh) * | 2020-12-31 | 2021-05-07 | 北京知因智慧科技有限公司 | 基于repl的数据开发方法、***和电子设备 |
US11294894B2 (en) | 2019-08-30 | 2022-04-05 | Oracle International Corporation | Dynamic resolution of dependencies for database guest languages |
US11360976B2 (en) | 2017-08-31 | 2022-06-14 | Oracle International Corporation | Deployment of javascript and typescript stored procedures and user-defined functions into database management systems |
CN114741127A (zh) * | 2022-03-15 | 2022-07-12 | 北京贝壳时代网络科技有限公司 | 小程序控制方法及装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1820266A (zh) * | 2003-08-21 | 2006-08-16 | 微软公司 | 用于将应用程序与基于项的存储平台接口的***和方法 |
CN101019102A (zh) * | 2003-09-30 | 2007-08-15 | 明导公司 | 使用一个或多个自动机的***验证 |
CN101553769A (zh) * | 2005-10-11 | 2009-10-07 | 努雅公司 | 用于跟踪并监控计算机应用的***和方法 |
US20100023874A1 (en) * | 2008-07-23 | 2010-01-28 | Frohwein Robert J | Method and Apparatus to Operate Different Widgets From a Single Widget Controller |
CN102520922A (zh) * | 2011-11-14 | 2012-06-27 | 上海交通大学 | 一种协作环境下的远程开发方法及其*** |
US20130041650A1 (en) * | 2008-12-23 | 2013-02-14 | At&T Intellectual Property I, Lp | Systems, devices, and/or methods for managing sample selection bias |
-
2016
- 2016-07-26 CN CN201610599362.6A patent/CN106156353B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1820266A (zh) * | 2003-08-21 | 2006-08-16 | 微软公司 | 用于将应用程序与基于项的存储平台接口的***和方法 |
CN101019102A (zh) * | 2003-09-30 | 2007-08-15 | 明导公司 | 使用一个或多个自动机的***验证 |
CN101553769A (zh) * | 2005-10-11 | 2009-10-07 | 努雅公司 | 用于跟踪并监控计算机应用的***和方法 |
US20100023874A1 (en) * | 2008-07-23 | 2010-01-28 | Frohwein Robert J | Method and Apparatus to Operate Different Widgets From a Single Widget Controller |
US20130041650A1 (en) * | 2008-12-23 | 2013-02-14 | At&T Intellectual Property I, Lp | Systems, devices, and/or methods for managing sample selection bias |
CN102520922A (zh) * | 2011-11-14 | 2012-06-27 | 上海交通大学 | 一种协作环境下的远程开发方法及其*** |
Non-Patent Citations (1)
Title |
---|
陈锦伟: "基于MySQL的空间数据库关键技术研究", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108376064A (zh) * | 2016-11-24 | 2018-08-07 | 阿里巴巴集团控股有限公司 | 规则引擎***及规则引擎的相关方法 |
US10417036B2 (en) | 2017-02-24 | 2019-09-17 | Oracle International Corporation | Evaluation techniques for fast access to structured, semi-structured and unstructured data using a virtual machine that provides support for dynamic code generation |
US11360976B2 (en) | 2017-08-31 | 2022-06-14 | Oracle International Corporation | Deployment of javascript and typescript stored procedures and user-defined functions into database management systems |
CN108334325A (zh) * | 2017-12-26 | 2018-07-27 | 努比亚技术有限公司 | 一种编译方法、计算机及计算机可读存储介质 |
CN108667919A (zh) * | 2018-04-25 | 2018-10-16 | 金蝶软件(中国)有限公司 | 数据处理方法、装置、计算机设备和存储介质 |
US10684873B2 (en) | 2018-06-12 | 2020-06-16 | Oracle International Corporation | Efficient data decoding using runtime specialization |
CN109254838A (zh) * | 2018-08-21 | 2019-01-22 | 中邮科通信技术股份有限公司 | 一种基于JAVA BeanShell的自动化任务 |
CN110045962A (zh) * | 2019-01-15 | 2019-07-23 | 阿里巴巴集团控股有限公司 | 一种支持多语言脚本执行的方法和装置 |
CN110263055A (zh) * | 2019-06-18 | 2019-09-20 | 上海达梦数据库有限公司 | 一种参数提示方法、装置、设备和存储介质 |
US11294894B2 (en) | 2019-08-30 | 2022-04-05 | Oracle International Corporation | Dynamic resolution of dependencies for database guest languages |
CN111258588A (zh) * | 2020-02-26 | 2020-06-09 | 杭州优稳自动化***有限公司 | 一种用于控制工程软件的脚本执行速度提升方法及装置 |
CN112765128A (zh) * | 2020-12-31 | 2021-05-07 | 北京知因智慧科技有限公司 | 基于repl的数据开发方法、***和电子设备 |
CN112765128B (zh) * | 2020-12-31 | 2023-10-03 | 北京知因智慧科技有限公司 | 基于repl的数据开发方法、***和电子设备 |
CN114741127A (zh) * | 2022-03-15 | 2022-07-12 | 北京贝壳时代网络科技有限公司 | 小程序控制方法及装置 |
CN114741127B (zh) * | 2022-03-15 | 2024-04-09 | 北京贝壳时代网络科技有限公司 | 小程序控制方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN106156353B (zh) | 2019-08-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106156353A (zh) | 一种为数据库增加多语言动态编译执行引擎的方法和*** | |
CN106250178B (zh) | 通过多语言云编译实现***动态功能在线拦截扩展的方法 | |
CN102736919B (zh) | 描述及开发动态行为应用***的方法与*** | |
CN106293863B (zh) | 多语言云编译实现***功能动态扩展替换的方法及*** | |
CN112035191B (zh) | 基于微服务的apm全链路监控***及方法 | |
CN105184166A (zh) | 基于内核的安卓程序实时行为分析方法及*** | |
CN111930365B (zh) | 基于Qt的应用程序快速开发框架、开发方法及运行方法 | |
CN103544095B (zh) | 服务器程序的监控方法及其*** | |
CN101393535B (zh) | 将运行时事件与组件相关联的方法和*** | |
CN103559118A (zh) | 一种基于aop与注解信息***的安全审计方法 | |
CN106529304B (zh) | 一种安卓应用并发漏洞检测*** | |
US10528456B2 (en) | Determining idle testing periods | |
CN105164642B (zh) | 对合同的操作***支持 | |
WO2016093803A1 (en) | Separating test verifications from test executions | |
CN110221816A (zh) | 基于算法平台的算法运行方法、装置、介质及算法平台 | |
CN109542444A (zh) | Java应用的监控方法、装置、服务器和存储介质 | |
Gaaloul et al. | Log-based mining techniques applied to web service composition reengineering | |
CN101056210B (zh) | 一种网络集中管理平台上的事件处理***和方法 | |
US20180137036A1 (en) | Determining potential test actions | |
CN101373506A (zh) | 一种基于漏洞模型的软件漏洞模型检测方法 | |
Mantel et al. | Combining different proof techniques for verifying information flow security | |
WO2008039565A2 (en) | System and method for obfuscation of data across an enterprise | |
JPH11224186A (ja) | ソフトウェア解析装置及びソフトウェア解析方法 | |
Dahab et al. | A software measurement framework guided by support vector machines | |
Kim et al. | Deriving Data Dependence from/for UML State Machine Diagrams |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20191008 Address after: 610041 No. 4001, unit 1, building 1, No. 89, Cuihua Road, Chengdu high tech Zone, China (Sichuan) pilot Free Trade Zone, Chengdu Patentee after: Beisen cloud computing Co., Ltd. Address before: 100085 Beijing city Haidian District East Road No. 35 XingKong 7 layer exchange Patentee before: Beijing BESON cloud Limited by Share Ltd |
|
TR01 | Transfer of patent right |