*CN102521254A*
(10)申请公布号 CN 102521254 A(43)申请公布日 2012.06.27
(12)发明专利申请
(21)申请号 201110365442.2(22)申请日 2011.11.17
(71)申请人广东电网公司电力科学研究院
地址510080 广东省广州市越秀区东风东路
水均岗8号粤电大厦(72)发明人周伊琳 陈炯聪 黄缙华 孙建伟
胡亚平 陈扬(74)专利代理机构广州知友专利商标代理有限
公司 44104
代理人周克佑(51)Int.Cl.
G06F 17/30(2006.01)
权利要求书 3 页 说明书 10 页 附图 2 页权利要求书3页 说明书10页 附图2页
(54)发明名称
异构数据库的统一访问方法(57)摘要
本发明公开了一种异构数据库的统一访问方法,包括步骤:前台客户端接收用户输入的SQL语句,并将SQL语句请求发往后台数据库请求处理程序;后台数据库请求处理程序根据SQL标准语法分析SQL语句是否合法;对请求SQL进行初步语法分析,分解出要操作的虚表表名,然后根据虚表表名判断当前的请求是发向哪类异构数据库服务器的;根据步骤三判断得到的结果选择对应异构数据库服务器的SQL分析处理器来处理SQL语句中的实际读写请求;将步骤四执行后的结果返回给前台客户端。该方法能够实现通过统一的访问接口访问各种异构数据库,从而降低数据库应用开发过程中的难度、缩短开发的时间周期,进一步降低应用系统后期的维护成本。CN 102521254 ACN 102521254 A
权 利 要 求 书
1/3页
1.一种异构数据库的统一访问方法,其特征在于包括如下方法:步骤一:前台客户端接收用户输入的SQL语句,并将SQL语句请求发往后台数据库请求处理程序;
步骤二:后台数据库请求处理程序根据SQL标准语法分析SQL语句是否合法;如果SQL语句不合法,构造错误回应包给客户端,然后直接退出本流程;否则,进入下一步;
步骤三:对请求SQL进行初步语法分析,分解出要操作的虚表表名,然后根据虚表表名判断当前的请求是发向哪类异构数据库服务器的,所述异构数据库服务器的类型包括:传统关系数据库管理系统、实时/历史数据库系统、对象数据库管理系统;其中,实时/历史数据库系统包括两张虚表:实时数据库表和历史数据库表;对象数据库管理系统包括三张虚表:模型数据表、类数据表和实例数据表;如果当前SQL语句中的表名称是实时数据库表或历史数据库表,则是发往实时/历史数据库服务器的请求;如果当前SQL语句中的表名称是模型数据表、类数据表或实例数据表,则是发往对象数据库服务器的请求;否则默认是发往传统关系数据库服务器的请求;
步骤四:根据步骤三判断得到的结果选择对应异构数据库服务器的SQL分析处理器来处理SQL语句中的实际读写请求,如果是发往传统关系数据库服务器的请求则选择传统关系数据库管理系统SQL分析处理器;发往实时/历史数据库服务器的请求则选择实时/历史数据库系统SQL分析处理器;发往对象数据库服务器的请求则选择对象数据库管理系统SQL分析处理器;各个分析处理器的处理过程如下:
(1)、所述的传统关系数据库管理系统SQL分析处理器处理针对传统关系数据管理系统的读写请求,处理的过程如下:
a1)、如果对应的传统关系数据库管理系统的原始API支持标准的SQL语法语句,那么不需要进行转换处理,直接将这个原始请求传给传统关系数据库管理系统的原始API调用执行;
b1)、如果对应的传统关系数据库管理系统的原始API不支持标准的SQL语法语句,则进行语法转换,将请求中的标准SQL语句通过对应的传统关系数据库管理系统的语法转换器进行转换,并将转换后的SQL语句传递给对应的传统关系数据库管理系统的相应原始API进行调用;
(2)、所述的实时/历史数据库系统SQL分析处理器处理针对实时/历史数据库系统的读写请求,处理的过程如下:
a2)、使用语法分析器第一步分析确定输入的SQL语法是否符合实时/历史数据库系统支持的语法,同时分析SQL语句操作类型,要操作的虚表的表名,要操作虚拟字段,和要操作的约束条件;
b2)、如果当前请求的SQL语句操作类型是对实时/历史数据库系统的虚表的查询、更新或插入以外的请求动作,则返回失败;否则进入c2;
c2)、根据a2分析出的结果,调用实时/历史数据库系统的相应API执行相应请求;(3)、所述的对象数据库管理系统SQL分析处理器处理针对对象数据库管理系统的读写请求,处理的过程如下:
a3)、使用语法分析器第一步分析确定输入的SQL语法是否符合对象数据库管理系统支持的语法,同时分析出SQL语句操作类型,要操作的虚表表名,要操作虚拟字段,和要操
2
CN 102521254 A
权 利 要 求 书
2/3页
作的约束条件;
b3)、如果当前请求的SQL语句操作类型是对对象数据库系统的虚表的查询、更新或插入以外的请求动作,则返回失败,因为对象数据库系统中的虚表是固定的,不允许创建表、修改表和删除表等操作;否则进入c3;
c3)、根据a3)分析出的结果,调用对象数据库系统的相应API执行相应请求;步骤五:将步骤四执行后的结果返回给前台客户端。2.根据权利要求1所述的异构数据库的统一访问方法,其特征在于:所述支持标准的SQL语法语句的传统关系数据库管理系统包括Oracle、DB2、Sybase和SQL Server。
3.根据权利要求1所述的异构数据库的统一访问方法,其特征在于:所述步骤c2)的具体过程是:根据步骤a2)分析出的SQL语句操作类型以及要操作的虚表表名,判断执行以下不同的步骤:
如果是INSERT语句并且虚拟表的表名是实时数据库表,则调用实时/历史数据库系统的实时数据插入API来执行该请求;
如果是INSERT语句并且虚拟表的表名是历史数据库表,则调用实时/历史数据库系统的历史数据插入API来执行该请求;
如果是SELECT语句并且虚拟表的表名是实时数据库表,则调用实时/历史数据库系统的实时数据查询API来执行最终的请求;
如果是SELECT语句并且虚拟表的表名是历史数据库表,则调用实时/历史数据库系统的历史数据查询API来执行最终的请求;
如果是Update语句并且虚拟表的表名是实时数据库表,则调用实时/历史数据库系统的实时数据更新API来执行最终的请求;
如果是Update语句并且虚拟表的表名是历史数据库表,则调用实时/历史数据库系统的历史数据修改API来执行最终的请求;
如果是Delete语句并且虚拟表的表名是实时数据库表,则该请求属于非法的一种,实时数据是不允许被删除的;
如果是Delete语句并且虚拟表的表名是历史数据库表,则调用实时/历史数据库系统的历史数据删除API来执行最终的请求。
4.根据权利要求1所述的异构数据库的统一访问方法,其特征在于:所述实时/历史数据库系统包括两张虚表:实时数据库表和历史数据库表,其中,所述实时数据库表中存储实时/历史数据库系统的标签编号、数据的时间标签、实时数值和数值状态;历史数据表中存储实时/历史数据库系统的标签编号、数据的开始时间标签、数据的结束时间标签、历史数值和数值状态。
5.根据权利要求1所述的异构数据库的统一访问方法,其特征在于:所述步骤c3)的具体过程是:根据步骤a3)分析出的SQL语句操作类型,要操作的虚表表名,根据判断执行以下不同的步骤:
如果是SELECT语句并且表名是模型数据表,则调用对象数据库系统的模型数据查询API来执行最终的请求;
如果是INSERT语句并且表名是模型数据表,则调用对象数据库系统的模型数据插入API来执行最终的请求;
3
CN 102521254 A
权 利 要 求 书
3/3页
如果是UPDATE语句并且表名是模型数据表,则调用对象数据库系统的模型数据更新API来执行最终的请求;
如果是Delete语句并且表名是模型数据表,则调用对象数据库系统的模型数据删除API来执行最终的请求;
如果是SELECT语句并且表名是类数据表,则调用对象数据库系统的类数据查询API来执行最终的请求;
如果是INSERT语句并且表名是类数据表,则调用对象数据库系统的类数据插入API来执行最终的请求;
如果是UPDATE语句并且表名是类数据表,则调用对象数据库系统的类数据更新API来执行最终的请求;
如果是Delete语句并且表名是类数据表,则调用对象数据库系统的类数据删除API来执行最终的请求;
如果是SELECT语句并且表名是实例数据表,则调用对象数据库系统的实例数据查询API来执行最终的请求;
如果是INSERT语句并且表名是实例数据表,则调用对象数据库系统的实例数据插入API来执行最终的请求;
如果是UPDATE语句并且表名是实例数据表,则调用对象数据库系统的实例数据更新API来执行最终的请求;
如果是Delete语句并且表名是实例数据表,则调用对象数据库系统的实例数据删除API来执行最终的请求。
6.根据权利要求1所述的异构数据库的统一访问方法,其特征在于:所述对象数据库管理系统包括三张虚表:模型数据表、类数据表和实例数据表,其中,模型数据表中存储对象数据库管理系统中的模型名称、模型类型、创建时间、修改时间、模型描述和子类列表;类数据表中存储对象数据库管理系统中的类名称、类所属的包、创建时间、修改时间、类描述和实例列表;实例数据表中存储对象数据库管理系统中的实例名称、所属的类、创建时间、修改时间、实例描述和属性列表。
4
CN 102521254 A
说 明 书
异构数据库的统一访问方法
1/10页
技术领域
[0001]
本发明涉及一种数据库访问方法,具体来说涉及一种异构数据库的统一访问方
法。
背景技术
[0002] 随着计算机和软件技术的不断发展,软件领域的分工也越发精细,具体体现在:不同的行业、不同的项目甚至同一个项目的不同阶段的侧重点完全可能不一样,所采取的技术工具、数据模型和数据库管理系统都可能完全不尽相同。 [0003] 在数据库管理系统的领域内,目前就存在着:传统的关系型数据库管理系(例如:甲骨文公司的Oracle、IBM公司的DB2、Sun公司Sybase以及微软公司的SQLServer等)、实时/历史数据库系统、对象数据库管理系统。通常,传统的关系数据库管理系统都是以SQL标准对外提供访存接口,Insert/Select/Update和Delete等标准的SQL语句;而实时/历史数据库系统和对象数据库系统一般都是以和各种语言绑定的API调用来提供访存接口。因此对于数据库应用开发人员来说,开发一个应用往往需要熟悉和了解各类数据库关系系统的特性和API(应用编程接口)。 [0004] 因此,目前在大型项目中,由于引入了特性各异的数据库管理系统,给软件开发人员带来了极大的开发难度和后期维护难度。一方面数据管理的精细化是必然的趋势,需要引入不同的针对性很强的数据库管理软件;另外一方面,目前没有一种行之有效的方法和统一和简化异构数据库的统一访问技术。现在,数据库管理技术领域一般将数据分为如下三种类型: [0005] a、管理型关系数据;b、生产型时序数据;c、应用型模型数据。因此如何将各种数据抽象统一、归纳整理出一种标准的访问手段变得尤为迫切。 发明内容
[0006] 本发明的目的在于提供一种异构数据库的统一访问方法,该方法能够实现通 过统一的访问接口访问各种异构数据库,从而降低数据库应用开发过程中的难度、缩短开发的时间周期,进一步降低应用系统后期的维护成本。 [0007] 本发明的目的可通过以下的技术措施来实现: [0008] 一种异构数据库的统一访问方法,包括如下方法: [0009] 步骤一:前台客户端接收用户输入的SQL语句,并将SQL语句请求发往后台数据库请求处理程序; [0010] 步骤二:后台数据库请求处理程序根据SQL标准语法分析SQL语句是否合法;如果SQL语句不合法,构造错误回应包给客户端,然后直接退出本流程;否则,进入下一步; [0011] 步骤三:对请求SQL进行初步语法分析,分解出要操作的虚表表名,然后根据虚表表名判断当前的请求是发向哪类异构数据库服务器的,所述异构数据库服务器的类型包括:传统关系数据库管理系统、实时/历史数据库系统、对象数据库管理系统;其中,实时/
5
CN 102521254 A
说 明 书
2/10页
历史数据库系统包括两张虚表:实时数据库表(RTDBRTVT)和历史数据库表(RTDBHTVT);对象数据库管理系统包括三张虚表:模型数据表(ODBMODELVT)、类数据表(ODBCLASSVT)和实例数据表(ODBINSTANCEVT);如果当前SQL语句中的表名称是实时数据库表(RTDBRTVT)或历史数据库表(RTDBHTVT),则是发往实时/历史数据库服务器的请求;如果当前SQL语句中的表名称是模型数据表(ODBMODELVT)、类数据表(ODBCLASSVT)或实例数据表(ODBINSTANCEVT),则是发往对象数据库服务器的请求;否则默认是发往传统关系数据库服务器的请求;
[0012] 步骤四:根据步骤三判断得到的结果选择对应异构数据库服务器的SQL分析处理器来处理SQL语句中的实际读写请求,如果是发往传统关系数据库服务器的请求则选择传统关系数据库管理系统SQL分析处理器(100);发往实时/历史数据库服务器的请求则选择实时/历史数据库系统SQL分析处理器(200);发往对象数据库服务器的请求则选择对象数据库管理系统SQL分析处理器(300);各个分析处理器的处理过程如下: [0013] (1)、所述的传统关系数据库管理系统SQL分析处理器(100)处理针对传统关系数据管理系统的读写请求,处理的过程如下: [0014] a1)、如果对应的传统关系数据库管理系统的原始API(710)支持标准的SQL语法语句,那么不需要进行转换处理,直接将这个原始请求传给传统关系数据库管理系统的原始API(710)调用执行; [0015] b1)、如果对应的传统关系数据库管理系统的原始API(710)不支持标准的SQL语法语句,则进行语法转换,将请求中的标准SQL语句通过对应的传统关系数据库管理系统的语法转换器进行转换,并将转换后的SQL语句传递给对应的传统关系数据库管理系统的相应原始API(710)进行调用; [0016] (2)、所述的实时/历史数据库系统SQL分析处理器(200)处理针对实时/历史数据库系统的读写请求,处理的过程如下: [0017] a2)、使用语法分析器第一步分析确定输入的SQL语法是否符合实时/历史数据库系统支持的语法,同时分析SQL语句操作类型,要操作的虚表表名,要操作虚拟字段,和要操作的约束条件; [0018] b2)、如果当前请求的SQL语句操作类型是对实时/历史数据库系统的虚表的查询(SELECT)、更新(Update)或插入(INSERT)以外的请求动作,则返回失败;否则进入c2; [0019] c2)、根据a2分析出的结果,调用实时/历史数据库系统的相应API执行相应请求; (3)、所述的对象数据库管理系统SQL分析处理器(300)处理针对对象数据库管理系统的读写请求,处理的过程如下: [0021] a3)、使用语法分析器第一步分析确定输入的SQL语法是否符合对象数据库管理系统支持的语法,同时分析出SQL语句操作类型,要操作的虚表表名,要操作虚拟字段,和要操作的约束条件。 [0022] b3)、如果当前请求的SQL语句操作类型是对对象数据库系统的虚表的查询(SELECT)、更新(Update)或插入(INSERT)以外的请求动作,则返回失败,因为对象数据库系统中的虚表是固定的,不允许创建表、修改表和删除表等操作;否则进入c3; [0023] c3)、根据a3分析出的结果,调用对象数据库系统的相应API执行相应请求;
[0020]
6
CN 102521254 A[0024]
说 明 书
3/10页
步骤五:将步骤四执行后的结果返回给前台客户端。
[0025] 所述支持标准的SQL语法语句的传统关系数据库管理系统包括Oracle、DB2、Sybase和SQL Server。
[0026] 所述步骤c2)的具体过程是:根据a2分析出的SQL语句操作类型以及要操作的虚表表名,判断执行以下不同的步骤:
[0027] 如果是INSERT语句并且虚拟表的表名是实时数据库表(RTDBRTVT),则调用实时/历史数据库系统的实时数据插入API来执行该请求;
[0028] 如果是INSERT语句并且虚拟表的表名是历史数据库表(RTDBHTVT),则调用实时/历史数据库系统的历史数据插入API来执行该请求;
[0029] 如果是SELECT语句并且虚拟表的表名是实时数据库表(RTDBRTVT),则调用实时/历史数据库系统的实时数据查询API来执行最终的请求;
[0030] 如果是SELECT语句并且虚拟表的表名是历史数据库表(RTDBHTVT),则调用实时/历史数据库系统的历史数据查询API来执行最终的请求;
[0031] 如果是Update语句并且虚拟表的表名是实时数据库表(RTDBRTVT),则调用实时/历史数据库系统的实时数据更新API来执行最终的请求;
[0032] 如果是Update语句并且虚拟表的表名是历史数据库表(RTDBHTVT),则调用实时/历史数据库系统的历史数据修改API来执行最终的请求;
[0033] 如果是Delete语句并且虚拟表的表名是实时数据库表(RTDBRTVT),则该请求属于非法的一种,实时数据是不允许被删除的;
[0034] 如果是Delete语句并且虚拟表的表名是历史数据库表(RTDBHTVT),则调用实时/历史数据库系统的历史数据删除API来执行最终的请求; [0035] 实时/历史数据库系统包括两张虚表:实时数据库表(RTDBRTVT)和历史数据库表(RTDBHTVT),其中,所述实时数据库表中存储实时/历史数据库系统的标签编号、数据的时间标签、实时数值和数值状态;历史数据表中存储实时/历史数据库系统的标签编号、数据的开始时间标签、数据的结束时间标签、历史数值和数值状态。 [0036] 所述步骤c3)的具体过程是:根据a3分析出的SQL语句操作类型,要操作的虚表表名,根据判断执行以下不同的步骤:
[0037] 如果是SELECT语句并且表名是模型数据表(ODBMODELVT),则调用对象数据库系统的模型数据查询API来执行最终的请求;
[0038] 如果是INSERT语句并且表名是模型数据表(ODBMODELVT),则调用对象数据库系统的模型数据插入API来执行最终的请求;
[0039] 如果是UPDATE语句并且表名是模型数据表(ODBMODELVT),则调用对象数据库系统的模型数据更新API来执行最终的请求;
[0040] 如果是Delete语句并且表名是模型数据表(ODBMODELVT),则调用对象数据库系统的模型数据删除API来执行最终的请求;
[0041] 如果是SELECT语句并且表名是类数据表(ODBCLASSVT),则调用对象数据库系统的类数据查询API来执行最终的请求;
[0042] 如果是INSERT语句并且表名是类数据表(ODBCLASSVT),则调用对象数据库系统的类数据插入API来执行最终的请求;
7
CN 102521254 A[0043]
说 明 书
4/10页
如果是UPDATE语句并且表名是类数据表(ODBCLASSVT),则调用对象数据库系统
的类数据更新API来执行最终的请求;
[0044] 如果是Delete语句并且表名是类数据表(ODBCLASSVT),则调用对象数据库系统的类数据删除API来执行最终的请求;
[0045] 如果是SELECT语句并且表名是实例数据表(ODBINSTANCEVT),则调用对象数据库系统的实例数据查询API来执行最终的请求;
[0046] 如果是INSERT语句并且表名是实例数据表(ODBINSTANCEVT),则调用对象数据库系统的实例数据插入API来执行最终的请求;
[0047] 如果是UPDATE语句并且表名是实例数据表(ODBINSTANCEVT),则调用对象数据库系统的实例数据更新API来执行最终的请求;
[0048] 如果是Delete语句并且表名是实例数据表(ODBINSTANCEVT),则调用对象数据库系统的实例数据删除API来执行最终的请求;
[0049] 对象数据库管理系统包括三张虚表:模型数据表(ODBMODELVT)、类数据表(ODBCLASSVT)和实例数据表(ODBINSTANCEVT),其中,模型数据表中存储对象数据库管理系统中的模型名称、模型类型、创建时间、修改时间、模型描述和子类列表;类数据表中存储对象数据库管理系统中的类名称、类所属的包、创建时间、修改时间、类描述和实例列表;实例数据表中存储对象数据库管理系统中的实例名称、所属的类、创建时间、修改时间、实例描述和属性列表。
[0050] 本发明对比现有技术,有如下优点: [0051] 1、本发明实现了对多种主流异构数据库的统一访问,即实现了统一采用SQL语法语句对多种异构数据库进行访问的方法; [0052] 2、传统关系数据库管理系统中的表不是数据库系统中的系统表就是用户建立的用户表。而在本方法中,除了传统关系数据库管理系统中真正存在的物理表,还有实时/历史数据库系统和对象数据库管理系统的虚拟表,而且这些虚表的结构并不复杂,大多数应用中只需要关联其中的部分虚表字段。
附图说明
[0053] 图1是本发明的异构数据库统一方法的系统逻辑结构示意图; [0054] 图2是本发明的异构数据库统一方法的流程图。
具体实施方式
[0055] 如图1所示,本方法的异构数据库统一访问方法的系统中包括:调用客户端(0);传统关系数据库管理系统SQL分析处理器(100);实时/历史数据库系统SQL分析处理器(200);对象数据库管理系统SQL分析处理器(300);虚拟表构造器(400),其中包含实时/历史数据库系统虚拟表构造器(410)和对象数据库系统虚拟表构造器(420);数据库原始API(700),其中包含传统关系数据库管理系统原始API(710)、实时/历史数据库系统原始API(720)和对象数据库管理系统原始API(730);最后是后台异构数据库服务器系统(800)。
[0056] 调用客户端(0)的是数据库应用软件开发人员调用的接口,是本发明提供给外部
8
CN 102521254 A
说 明 书
5/10页
的访问接口。它类似于传统意义上的应用程序开发接口(API)。其实质也是一系列的SQL语法语句,不同的是这些SQL语法会被解析以辨别当前的请求是发 往后台的那类数据库系统,同时在解析的过程中做一下语法的校验和验证操作。
[0057] 传统关系数据库管理系统SQL分析处理器(100)用于处理针对传统关系数据管理系统的读写请求,将统一访问的请求转换翻译成传统关系数据库管理系统的原始API(710),通常这种原始的API都是标准的SQL语法语句。传统关系数据库管理系统Oracle、DB2、Sybase和SQL Server都支持标准的SQL语法语句,传统关系数据库管理系统SQL分析处理器(100)可以缓冲部分使用频率很高的数据以加快数据访问的速度。
[0058] 实时/历史数据库系统SQL分析处理器(200)用于处理针对实时/历史数据库系统的读写请求,将统一访问的请求通过实时/历史数据库系统虚表构造器(410)转换翻译成实时/历史数据库系统的原始API(720),通常实时/历史数据库系统的原始API都是基于标准C语言的函数接口。主流实时/历史数据库系统PI和PTimeDB都提供标准C语言的函数接口,提供实时数据写入、实时数据查询、历史数据查询和历史数据管理等函数接口。一般情况下,实时/历史数据库系统很多读写接口中都需要让调用者提供内存缓存区,实时/历史数据库系统SQL分析处理器(200)可以替调用者智能管理这部分。
对象数据库管理系统SQL分析处理器(300)用于处理针对对象数据库管理系统的
读写请求,将统一访问的请求通过对象数据库管理系统虚表构造器(420)转换翻译成对象数据库管理系统的原始API(730),通常对象数据库管理系统的原始API都是基于标准C语言的函数接口。主流对象数据库管理系统db4o和OSpread都提供标准C语言的函数接口,提供对模型、类、实例的写入、查询、修改和查询等函数接口。
[0060] 虚拟表构造器(400)包含实时/历史数据库系统虚拟表构造器(410)和对象数据库管理系统虚拟表构造器(420)两部分。在实时/历史数据库系统中,一般不存在物理的表的概念,因此实时/历史数据库系统虚拟表构造器(410)的主要作用就是将现在实时/历史数据库系统中的数据模型抽象归纳成和传统关系数据库管理系统逻辑上一致的表概念。当然这里的表是“虚表”,也就是逻辑上的概念,而不是物理上实际存在的物理表,因此称为虚拟表构造器。上述异构数据库统一访问技术中,实时/历史数据库系统被虚拟成两张虚表:实时数据表RTDBRTVT和历史数据表RTDBHTVT两张虚表,两张表结构一致,如表1所示:
[0059] [0061]
含义
标签编号 时间标签 实时数值 数值状态
[0062]
字段名 RTDBTID RTDBTS RTDB RVAL RTDBSTA
字段类型 long long float int32
表1
[0063] 其中包含RTDBTID、RTDBTS、RTDBRVAL和RTDBSTA四个字段,分别表示实时/历史数据库系统中的标签编号、数据的时间标签、实时数值和数值状态。
[00] 对象数据库管理系统虚拟表构造器(420)的主要作用就是将现在对象数据库管理系统中的数据模型抽象归纳成和传统关系数据库管理系统逻辑上一直的表概念,因为目前主流的对象数据库管理系统也是一般不存在物理表的概念。上述异构数据库统一访问技术中,对象数据库管理系统被虚拟成四张虚表:模型数据表ODBMODELVT、类数据表
9
CN 102521254 A
说 明 书
6/10页
ODBCLASSVT和实例数据表ODBINSTANCEVT三张虚表, [0065] 模型数据表ODBMODELVT的结构如表2所示:
[0066]
含义
模型名称 模型类型 创建时间 修改时间 模型描述 子类列表
[0067]
字段名
OBDBMLNAME OBDBMLTYPE OBDBMLCT OBDBMLUT OBDBMLDESC OBDBMLCLASS
字段类型 char() long
char(32) char(32) char() binary
表2
[0068] 其中包含OBDBMLNAME、OBDBMLTYPE、OBDBMLCT、OBDBMLUT、OBDBMLDESC和OBDBMLCLASS六个字段,分别表示对象数据库管理系统中的模型名称、模型类型、创建时间、修改时间、模型描述和子类列表。
[0069] 类数据表ODBCLASSVT的结构如表3所示:
[0070]
含义
类名称 所属包 创建时间 修改时间 类描述 实例列表
[0071]
字段名 OBDBCSNAME OBDBCSCATG OBDBCSCT OBDBCSUT OBDBCSDESC OBDBCSINST
字段类型 char() char() char(32) char(32) char() binary
表3
[0072] 其中包含OBDBCSNAME、OBDBCSCATG、OBDBCSCT、OBDBCSUT、OBDBCSDESC和OBDBCSINST六个字段,分别表示对象数据库管理系统中的类名称、类所属的包、创建时间、修改时间、类描述和实例列表。
[0073] 实例数据表ODBINSTANCEVT的结构如表4所示:
[0074]
含义
实例名称 所属类 创建时间 修改时间 实例描述 属性列表
[0075]
字段名 OBDBISNAME OBDBISCS OBDBISCT OBDBISUT OBDBISDESC OBDBISPRPS
字段类型 char() char() char(32) char(32) char() binary
表4
[0076] 其中包含OBDBISNAME、OBDBISCS、OBDBISCT、OBDBISUT、OBDBISDESC和OBDBISPRPS六个字段,分别表示对象数据库管理系统中的实例名称、所属的类、创建时间、修改时间、实例描述和属性列表。
[0077] 数据库原始API(700)是一个主流异构数据库管理系统的原始API集合,其中包含传统关系数据库管理系统原始API(710)、实时/历史数据库系统原始API(720)和对象数据库管理系统原始API(730)。
[0078] 数据库原始API模块(700)可以根据不同需要加入其它产品的原始API,在异构数
10
CN 102521254 A
说 明 书
7/10页
据库统一访问技术中其它部分不需要变化,直接在数据库原始API模块(700) 可以无限扩充。
[0079] 后台异构数据库服务器系统(800)一个异构数据库群,其中可以包含一种或者多种不同的数据库管理系统,同时同一类别的数据库管理系统也可以存在多个,比如在传统关系数据库管理系统可以同时有Oracle和DB2等,实时/历史数据库系统可以同时有PI和PTimeDB。
[0080] 但是对数据库应用开发者而言开发的接口还是标准的SQL语法语句,不同的是传统关系数据库管理系统中的表不是数据库系统中的系统表就是用户建立的用户表。而在异构数据库统一访问技术中,除了传统关系数据库管理系统中真正存在的物理表,还有实时/历史数据库系统和对象数据库管理系统的虚拟表,而且这些虚表的结构并不复杂,大多数应用中只需要关联其中的部分虚表字段。 [0081] 如图2所示,本发明的具体处理流程如下: [0082] 步骤一:前台客户端接收用户输入的SQL语句,并将SQL语句请求发往后台数据库请求处理程序; [0083] 步骤二:后台数据库请求处理程序根据SQL标准语法分析SQL语句是否合法;如果SQL语句不合法,构造错误回应包给客户端,然后直接退出本流程;否则,进入下一步; 步骤三:对请求SQL进行初步语法分析,分解出要操作的虚表表名,然后根据虚表表名判断当前的请求是发向哪类异构数据库服务器的,所述异构数据库服务器的类型包括:传统关系数据库管理系统、实时/历史数据库系统、对象数据库管理系统;其中,实时/历史数据库系统包括两张虚表:实时数据库表RTDBRTVT和历史数据库表RTDBHTVT;对象数据库管理系统包括三张虚表:模型数据表ODBMODELVT、类数据表ODBCLASSVT和实例数据表ODBINSTANCEVT;如果当前SQL语句中的表名称是RTDBRTVT或RTDBHTVT,则是发往实时/历史数据库服务器的请求;如果当前SQL语句中的表名称是ODBMODELVT、ODBCLASSVT或ODBINSTANCEVT,则是发往对象数据库服务器的请求;否则默认是发往传统关系数据库服务器的请求;
[0085] 步骤四:根据步骤三判断得到的结果选择对应异构数据库服务器的SQL分析处理器:传统关系数据库管理系统SQL分析处理器(100)、实时/历史数据库系统 SQL分析处理器(200)或者对象数据库管理系统SQL分析处理器(300)来处理SQL语句中的实际读写请求,各个分析处理器的处理过程如下:
[0086] 能够根据SQL语句中包含的虚表表名选择相应的分析处理器,是因为实时/历史数据库系统和对象数据库管理系统中所使用的虚拟表名是固定的,在本发明中,传统关系数据库管理系统中不会出现和这些虚拟表重名冲突的表;
[0087] (1)传统关系数据库管理系统SQL分析处理器(100)处理针对传统关系数据管理系统的读写请求,处理的过程如下: [0088] a1、如果对应的传统关系数据库管理系统的原始API(710)支持标准的SQL语法语句,那么不需要进行转换处理,直接将这个原始请求传给传统关系数据库管理系统的原始API(710)调用执行;因为原始请求就是一个SQL语句;
[0084]
b1、如果对应的传统关系数据库管理系统的原始API(710)不支持标准的SQL语法语句,则进行语法转换,将请求中的标准SQL语句通过对应的传统关系数据库管理系统的
[00]
11
CN 102521254 A
说 明 书
8/10页
语法转换器进行转换(语法转换器包含在SQL分析处理器(100)中),并将转换后的SQL语句传递给对应的传统关系数据库管理系统的相应原始API(710)进行调用;
[0090] 传统关系数据库管理系统的原始API(710)是指各个关系数据库厂商所开发的函数指令。这里存在两种情况,一种是厂商开发的API指令符合行业内标准SQL语法,另外一种情况是不符合标准SQL语法,如果是后者,就必须将不符合标准SQL语法的请求进行语法转换,具体过程是指将a1步骤中发过来的原始请求中的SQL语句通过关系数据库管理系统中的语法转换器的解析,将原始请求中的SQL语句进行语法转换,达到符合厂商产品支持的SQL语法的效果,如,一个查询SQL语句: [0091] SELECT productname,price,number FROM[product info],当表名中存在空格时,标准SQL语法规定必须使用[]进行包括,但是个别厂商支持的却是{},所以转换后,SQL语句变为
[0092] SELECT productname,price,number FROM{product info}。
[0093] 支持标准的SQL语法语句的传统关系数据库管理系统包括Oracle、DB2、Sybase和SQL Server。
[0094] (2)实时/历史数据库系统SQL分析处理器(200)处理针对实时/历史数据库系统的读写请求,处理的过程如下: a2、使用语法分析器第一步分析确定输入的SQL语法是否符合实时/历史数据库系统支持的语法,同时分析出SQL语句操作类型,要操作的虚表表名,要操作虚拟字段,和要操作的约束条件; [0096] b2、如果当前请求的SQL语句操作类型是对实时/历史数据库系统的虚表的查询(SELECT)、更新(Update)或插入(INSERT)以外的请求动作,则返回失败,因为实时/历史数据库系统中的虚表是固定的,不允许创建表、修改表和删除表等操作;否则进入c2; [0097] c2、根据a2分析出的结果,调用实时/历史数据库系统的相应API执行相应请求;具体过程是:根据a2分析出的SQL语句操作类型以及要操作的虚表表名,判断执行以下不同的步骤:
[0098] 如果是INSERT语句并且虚拟表的表名是实时数据库表(RTDBRTVT),则调用实时/历史数据库系统的实时数据插入API来执行该请求;
[0099] 如果是INSERT语句并且虚拟表的表名是历史数据库表(RTDBHTVT),则调用实时/历史数据库系统的历史数据插入API来执行该请求;
[0100] 如果是SELECT语句并且虚拟表的表名是实时数据库表(RTDBRTVT),则调用实时/历史数据库系统的实时数据查询API来执行最终的请求;
[0101] 如果是SELECT语句并且虚拟表的表名是历史数据库表(RTDBHTVT),则调用实时/历史数据库系统的历史数据查询API来执行最终的请求;
[0102] 如果是Update语句并且虚拟表的表名是实时数据库表(RTDBRTVT),则调用实时/历史数据库系统的实时数据更新API来执行最终的请求;
[0103] 如果是Update语句并且虚拟表的表名是历史数据库表(RTDBHTVT),则调用实时/历史数据库系统的历史数据修改API来执行最终的请求;
[0095] [0104]
如果是Delete语句并且虚拟表的表名是实时数据库表(RTDBRTVT),则该请求属于非法的一种,实时数据是不允许被删除的;
12
CN 102521254 A[0105]
说 明 书
9/10页
如果是Delete语句并且虚拟表的表名是历史数据库表(RTDBHTVT),则调用 实时
/历史数据库系统的历史数据删除API来执行最终的请求; [0106] 这里的API指不同类型数据库厂商所提供的API函数,但是功能与作用是类似的,因此统一用API这个名词来代替。
[0107] 通常实时/历史数据库系统的原始API(720)都是基于标准C语言的函数接口。主流实时/历史数据库系统PI和PTimeDB都提供标准C语言的函数接口,提供实时数据写入、实时数据查询、历史数据查询和历史数据管理等函数接口。 [0108] 在实时/历史数据库系统中,一般不存在物理的表的概念,因此实时/历史数据库系统虚拟表构造器(410)的主要作用就是将现在实时/历史数据库系统中的数据模型抽象归纳成和传统关系数据库管理系统逻辑上一致的表概念。当然这里的表是“虚表”,也就是逻辑上的概念,而不是物理上实际存在的物理表,因此称为虚拟表构造器。本方法中,实时/历史数据库系统包括两张虚表:实时数据库表(RTDBRTVT)和历史数据库表(RTDBHTVT)。 [0109] (3)对象数据库管理系统SQL分析处理器(300)处理针对对象数据库管理系统的读写请求,处理的过程如下: [0110] a3、使用语法分析器第一步分析确定输入的SQL语法是否符合对象数据库管理系统支持的语法,同时分析出SQL语句操作类型,要操作的虚表表名,要操作虚拟字段,和要操作的约束条件。
b3、如果当前请求的SQL语句操作类型是对对象数据库系统的虚表的查询
(SELECT)、更新(Update)或插入(INSERT)以外的请求动作,则返回失败,因为对象数据库系统中的虚表是固定的,不允许创建表、修改表和删除表等操作;否则进入c3;c3、根据a3分析出的结果,调用对象数据库系统的相应API执行相应请求;具体过程是:根据a3分析出的SQL语句操作类型,要操作的虚表表名,根据判断执行以下不同的步骤: [0112] 如果是SELECT语句并且表名是模型数据表(ODBMODELVT),则调用对象数据库系统的模型数据查询API来执行最终的请求;
[0113] 如果是INSERT语句并且表名是模型数据表(ODBMODELVT),则调用对象数据库系统的模型数据插入API来执行最终的请求;
[0114] 如果是UPDATE语句并且表名是模型数据表(ODBMODELVT),则调用对象数据库系统的模型数据更新API来执行最终的请求;
[0115] 如果是Delete语句并且表名是模型数据表(ODBMODELVT),则调用对象数据库系统的模型数据删除API来执行最终的请求;
[0116] 如果是SELECT语句并且表名是类数据表(ODBCLASSVT),则调用对象数据库系统的类数据查询API来执行最终的请求;
[0117] 如果是INSERT语句并且表名是类数据表(ODBCLASSVT),则调用对象数据库系统的类数据插入API来执行最终的请求;
[0118] 如果是UPDATE语句并且表名是类数据表(ODBCLASSVT),则调用对象数据库系统的类数据更新API来执行最终的请求;
[0111]
如果是Delete语句并且表名是类数据表(ODBCLASSVT),则调用对象数据库系统的类数据删除API来执行最终的请求;
[0120] 如果是SELECT语句并且表名是实例数据表(ODBINSTANCEVT),则调用对象数据库
[0119]
13
CN 102521254 A
说 明 书
10/10页
系统的实例数据查询API来执行最终的请求;
[0121] 如果是INSERT语句并且表名是实例数据表(ODBINSTANCEVT),则调用对象数据库系统的实例数据插入API来执行最终的请求;
[0122] 如果是UPDATE语句并且表名是实例数据表(ODBINSTANCEVT),则调用对象数据库系统的实例数据更新API来执行最终的请求; 如果是Delete语句并且表名是实例数据表(ODBINSTANCEVT),则调用对象数据库系统的实例数据删除API来执行最终的请求;
[0124] 对象数据库系统的原始API(710)是指各个对象数据库系统所开发的函数指令。通常对象数据库管理系统的原始API都是基于标准C语言的函数接口。主流对象数据库管理系统db4o和OSpread都提供标准C语言的函数接口,提供对模型、类、实例的写入、查询、修改和查询等函数接口。
[0125] 所述的对象数据库管理系统虚拟表构造器(400)主要作用就是将现在对象数据库管理系统中的数据模型抽象归纳成和传统关系数据库管理系统逻辑上一致的表概念,因为目前主流的对象数据库管理系统也是一般不存在物理表的概念。上 述异构数据库统一访问技术中,对象数据库管理系统包括三张虚表:模型数据表(ODBMODELVT)、类数据表(ODBCLASSVT)和实例数据表(ODBINSTANCEVT); [0126] 步骤五:将步骤四执行后的结果返回给前台客户端。执行结果的接口规范是一致的,几类SQL语句执行返回结果规范如下: [0127] SELECT语句,如果执行成功,返回一个结果集,结果集以表的格式返回到前台客户端,返回执行失败,返回出错响应包,响应包中包含执行错误码和相应错误消息。 [0128] Insert语句,如果执行成功,返回成功响应包,响应包中包含执行成功码,返回执行失败,返回出错响应包,响应包中包含执行错误码和相应错误消息。 [0129] Update语句,如果执行成功,返回成功响应包,响应包中包含执行成功码和更新受影响的记录数,返回执行失败,返回出错响应包,响应包中包含执行错误码和相应错误消息。
[0130] Delete语句,如果执行成功,返回成功响应包,响应包中包含执行成功码和删除受影响的记录数,返回执行失败,返回出错响应包,响应包中包含执行错误码和相应错误消息。
[0131] 本发明的实施方式不限于此,在本发明上述基本技术思想前提下,按照本领域的普通技术知识和惯用手段对本发明内容所做出其它多种形式的修改、替换或变更,均落在本发明权利保护范围之内。
[0123]
14
CN 102521254 A
说 明 书 附 图
1/2页
图1
15
CN 102521254 A
说 明 书 附 图
2/2页
图2
16
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务