CN102521254B - 异构数据库的统一访问方法 - Google Patents
异构数据库的统一访问方法 Download PDFInfo
- Publication number
- CN102521254B CN102521254B CN 201110365442 CN201110365442A CN102521254B CN 102521254 B CN102521254 B CN 102521254B CN 201110365442 CN201110365442 CN 201110365442 CN 201110365442 A CN201110365442 A CN 201110365442A CN 102521254 B CN102521254 B CN 102521254B
- Authority
- CN
- China
- Prior art keywords
- request
- statement
- data base
- time
- sql
- 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.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种异构数据库的统一访问方法,包括步骤:前台客户端接收用户输入的SQL语句,并将SQL语句请求发往后台数据库请求处理程序;后台数据库请求处理程序根据SQL标准语法分析SQL语句是否合法;对请求SQL进行初步语法分析,分解出要操作的虚表表名,然后根据虚表表名判断当前的请求是发向哪类异构数据库服务器的;根据步骤三判断得到的结果选择对应异构数据库服务器的SQL分析处理器来处理SQL语句中的实际读写请求;将步骤四执行后的结果返回给前台客户端。该方法能够实现通过统一的访问接口访问各种异构数据库,从而降低数据库应用开发过程中的难度、缩短开发的时间周期,进一步降低应用系统后期的维护成本。
Description
技术领域
本发明涉及一种数据库访问方法,具体来说涉及一种异构数据库的统一访问方法。
背景技术
随着计算机和软件技术的不断发展,软件领域的分工也越发精细,具体体现在:不同的行业、不同的项目甚至同一个项目的不同阶段的侧重点完全可能不一样,所采取的技术工具、数据模型和数据库管理系统都可能完全不尽相同。
在数据库管理系统的领域内,目前就存在着:传统的关系型数据库管理系(例如:甲骨文公司的Oracle、IBM公司的DB2、Sun公司Sybase以及微软公司的SQLServer等)、实时/历史数据库系统、对象数据库管理系统。通常,传统的关系数据库管理系统都是以SQL标准对外提供访存接口,Insert/Select/Update和Delete等标准的SQL语句;而实时/历史数据库系统和对象数据库系统一般都是以和各种语言绑定的API调用来提供访存接口。因此对于数据库应用开发人员来说,开发一个应用往往需要熟悉和了解各类数据库关系系统的特性和API(应用编程接口)。
因此,目前在大型项目中,由于引入了特性各异的数据库管理系统,给软件开发人员带来了极大的开发难度和后期维护难度。一方面数据管理的精细化是必然的趋势,需要引入不同的针对性很强的数据库管理软件;另外一方面,目前没有一种行之有效的方法和统一和简化异构数据库的统一访问技术。现在,数据库管理技术领域一般将数据分为如下三种类型:
a、管理型关系数据;b、生产型时序数据;c、应用型模型数据。因此如何将各种数据抽象统一、归纳整理出一种标准的访问手段变得尤为迫切。
发明内容
本发明的目的在于提供一种异构数据库的统一访问方法,该方法能够实现通过统一的访问接口访问各种异构数据库,从而降低数据库应用开发过程中的难度、缩短开发的时间周期,进一步降低应用系统后期的维护成本。
本发明的目的可通过以下的技术措施来实现:
一种异构数据库的统一访问方法,包括如下方法:
步骤一:前台客户端接收用户输入的SQL语句,并将SQL语句请求发往后台数据库请求处理程序;
步骤二:后台数据库请求处理程序根据SQL标准语法分析SQL语句是否合法;如果SQL语句不合法,构造错误回应包给客户端,然后直接退出本流程;否则,进入下一步;
步骤三:对请求SQL进行初步语法分析,分解出要操作的虚表表名,然后根据虚表表名判断当前的请求是发向哪类异构数据库服务器的,所述异构数据库服务器的类型包括:传统关系数据库管理系统、实时/历史数据库系统、对象数据库管理系统;其中,实时/历史数据库系统包括两张虚表:实时数据库表(RTDBRTVT)和历史数据库表(RTDBHTVT);对象数据库管理系统包括三张虚表:模型数据表(ODBMODELVT)、类数据表(ODBCLASSVT)和实例数据表(ODBINSTANCEVT);如果当前SQL语句中的表名称是实时数据库表(RTDBRTVT)或历史数据库表(RTDBHTVT),则是发往实时/历史数据库服务器的请求;如果当前SQL语句中的表名称是模型数据表(ODBMODELVT)、类数据表(ODBCLASSVT)或实例数据表(ODBINSTANCEVT),则是发往对象数据库服务器的请求;否则默认是发往传统关系数据库服务器的请求;
步骤四:根据步骤三判断得到的结果选择对应异构数据库服务器的SQL分析处理器来处理SQL语句中的实际读写请求,如果是发往传统关系数据库服务器的请求则选择传统关系数据库管理系统SQL分析处理器(100);发往实时/历史数据库服务器的请求则选择实时/历史数据库系统SQL分析处理器(200);发往对象数据库服务器的请求则选择对象数据库管理系统SQL分析处理器(300);各个分析处理器的处理过程如下:
(1)、所述的传统关系数据库管理系统SQL分析处理器(100)处理针对传统关系数据管理系统的读写请求,处理的过程如下:
a1)、如果对应的传统关系数据库管理系统的原始API(710)支持标准的SQL语法语句,那么不需要进行转换处理,直接将这个原始请求传给传统关系数据库管理系统的原始API(710)调用执行;
b1)、如果对应的传统关系数据库管理系统的原始API(710)不支持标准的SQL语法语句,则进行语法转换,将请求中的标准SQL语句通过对应的传统关系数据库管理系统的语法转换器进行转换,并将转换后的SQL语句传递给对应的传统关系数据库管理系统的相应原始API(710)进行调用;
(2)、所述的实时/历史数据库系统SQL分析处理器(200)处理针对实时/历史数据库系统的读写请求,处理的过程如下:
a2)、使用语法分析器第一步分析确定输入的SQL语法是否符合实时/历史数据库系统支持的语法,同时分析SQL语句操作类型,要操作的虚表表名,要操作虚拟字段,和要操作的约束条件限制;
b2)、如果当前请求的SQL语句操作类型是对实时/历史数据库系统的虚表的查询(SELECT)、更新(Update)或插入(INSERT)以外的请求动作,则返回失败;否则进入c2;
c2)、根据a2分析出的结果,调用实时/历史数据库系统的相应API执行相应请求;
(3)、所述的对象数据库管理系统SQL分析处理器(300)处理针对对象数据库管理系统的读写请求,处理的过程如下:
a3)、使用语法分析器第一步分析确定输入的SQL语法是否符合对象数据库管理系统支持的语法,同时分析出SQL语句操作类型,要操作的虚表表名,要操作虚拟字段,和要操作的约束条件限制。
b3)、如果当前请求的SQL语句操作类型是对对象数据库系统的虚表的查询(SELECT)、更新(Update)或插入(INSERT)以外的请求动作,则返回失败,因为对象数据库系统中的虚表是固定的,不允许创建表、修改表和删除表等操作;否则进入c3;
c3)、根据a3分析出的结果,调用对象数据库系统的相应API执行相应请求;
步骤五:将步骤四执行后的结果返回给前台客户端。
所述支持标准的SQL语法语句的传统关系数据库管理系统包括Oracle、DB2、Sybase和SQL Server。
所述步骤c2)的具体过程是:根据a2分析出的SQL语句操作类型以及要操作的虚表表名,判断执行以下不同的步骤:
如果是INSERT语句并且虚拟表的表名是实时数据库表(RTDBRTVT),则调用实时/历史数据库系统的实时数据插入API来执行该请求;
如果是INSERT语句并且虚拟表的表名是历史数据库表(RTDBHTVT),则调用实时/历史数据库系统的历史数据插入API来执行该请求;
如果是SELECT语句并且虚拟表的表名是实时数据库表(RTDBRTVT),则调用实时/历史数据库系统的实时数据查询API来执行最终的请求;
如果是SELECT语句并且虚拟表的表名是历史数据库表(RTDBHTVT),则调用实时/历史数据库系统的历史数据查询API来执行最终的请求;
如果是Update语句并且虚拟表的表名是实时数据库表(RTDBRTVT),则调用实时/历史数据库系统的实时数据更新API来执行最终的请求;
如果是Update语句并且虚拟表的表名是历史数据库表(RTDBHTVT),则调用实时/历史数据库系统的历史数据修改API来执行最终的请求;
如果是Delete语句并且虚拟表的表名是实时数据库表(RTDBRTVT),则该请求属于非法的一种,实时数据是不允许被删除的;
如果是Delete语句并且虚拟表的表名是历史数据库表(RTDBHTVT),则调用实时/历史数据库系统的历史数据删除API来执行最终的请求;
实时/历史数据库系统包括两张虚表:实时数据库表(RTDBRTVT)和历史数据库表(RTDBHTVT),其中,所述实时数据库表中存储实时/历史数据库系统的标签编号、数据的时间标签、实时数值和数值状态;历史数据表中存储实时/历史数据库系统的标签编号、数据的开始时间标签、数据的结束时间标签、历史数值和数值状态。
所述步骤c3)的具体过程是:根据a3分析出的SQL语句操作类型,要操作的虚表表名,根据判断执行以下不同的步骤:
如果是SELECT语句并且表名是模型数据表(ODBMODELVT),则调用对象数据库系统的模型数据查询API来执行最终的请求;
如果是INSERT语句并且表名是模型数据表(ODBMODELVT),则调用对象数据库系统的模型数据插入API来执行最终的请求;
如果是UPDATE语句并且表名是模型数据表(ODBMODELVT),则调用对象数据库系统的模型数据更新API来执行最终的请求;
如果是Delete语句并且表名是模型数据表(ODBMODELVT),则调用对象数据库系统的模型数据删除API来执行最终的请求;
如果是SELECT语句并且表名是类数据表(ODBCLASSVT),则调用对象数据库系统的类数据查询API来执行最终的请求;
如果是INSERT语句并且表名是类数据表(ODBCLASSVT),则调用对象数据库系统的类数据插入API来执行最终的请求;
如果是UPDATE语句并且表名是类数据表(ODBCLASSVT),则调用对象数据库系统的类数据更新API来执行最终的请求;
如果是Delete语句并且表名是类数据表(ODBCLASSVT),则调用对象数据库系统的类数据删除API来执行最终的请求;
如果是SELECT语句并且表名是实例数据表(ODBINSTANCEVT),则调用对象数据库系统的实例数据查询API来执行最终的请求;
如果是INSERT语句并且表名是实例数据表(ODBINSTANCEVT),则调用对象数据库系统的实例数据插入API来执行最终的请求;
如果是UPDATE语句并且表名是实例数据表(ODBINSTANCEVT),则调用对象数据库系统的实例数据更新API来执行最终的请求;
如果是Delete语句并且表名是实例数据表(ODBINSTANCEVT),则调用对象数据库系统的实例数据删除API来执行最终的请求;
对象数据库管理系统包括三张虚表:模型数据表(ODBMODELVT)、类数据表(ODBCLASSVT)和实例数据表(ODBINSTANCEVT),其中,模型数据表中存储对象数据库管理系统中的模型名称、模型类型、创建时间、修改时间、模型描述和子类列表;类数据表中存储对象数据库管理系统中的类名称、类所属的包、创建时间、修改时间、类描述和实例列表;实例数据表中存储对象数据库管理系统中的实例名称、所属的类、创建时间、修改时间、实例描述和属性列表。
本发明对比现有技术,有如下优点:
1、本发明实现了对多种主流异构数据库的统一访问,即实现了统一采用SQL语法语句对多种异构数据库进行访问的方法;
2、传统关系数据库管理系统中的表不是数据库系统中的系统表就是用户建立的用户表。而在本方法中,除了传统关系数据库管理系统中真正存在的物理表,还有实时/历史数据库系统和对象数据库管理系统的虚拟表,而且这些虚表的结构并不复杂,大多数应用中只需要关联其中的部分虚表字段。
附图说明
图1是本发明的异构数据库统一方法的系统逻辑结构示意图;
图2是本发明的异构数据库统一方法的流程图。
具体实施方式
如图1所示,本方法的异构数据库统一访问方法的系统中包括:调用客户端(0);传统关系数据库管理系统SQL分析处理器(100);实时/历史数据库系统SQL分析处理器(200);对象数据库管理系统SQL分析处理器(300);虚拟表构造器(400),其中包含实时/历史数据库系统虚拟表构造器(410)和对象数据库系统虚拟表构造器(420);数据库原始API(700),其中包含传统关系数据库管理系统原始API(710)、实时/历史数据库系统原始API(720)和对象数据库管理系统原始API(730);最后是后台异构数据库服务器系统(800)。
调用客户端(0)的是数据库应用软件开发人员调用的接口,是本实用新型提供给外部的访问接口。它类似于传统意义上的应用程序开发接口(API)。其实质也是一系列的SQL语法语句,不同的是这些SQL语法会被解析以辨别当前的请求是发往后台的那类数据库系统,同时在解析的过程中做一下语法的校验和验证操作。
传统关系数据库管理系统SQL分析处理器(100)用于处理针对传统关系数据管理系统的读写请求,将统一访问的请求转换翻译成传统关系数据库管理系统的原始API(710),通常这种原始的API都是标准的SQL语法语句。传统关系数据库管理系统Oracle、DB2、Sybase和SQL Server都支持标准的SQL语法语句,传统关系数据库管理系统SQL分析处理器(100)可以缓冲部分使用频率很高的数据以加快数据访问的速度。
实时/历史数据库系统SQL分析处理器(200)用于处理针对实时/历史数据库系统的读写请求,将统一访问的请求通过实时/历史数据库系统虚表构造器(410)转换翻译成实时/历史数据库系统的原始API(720),通常实时/历史数据库系统的原始API都是基于标准C语言的函数接口。主流实时/历史数据库系统PI和PTimeDB都提供标准C语言的函数接口,提供实时数据写入、实时数据查询、历史数据查询和历史数据管理等函数接口。一般情况下,实时/历史数据库系统很多读写接口中都需要让调用者提供内存缓存区,实时/历史数据库系统SQL分析处理器(200)可以替调用者智能管理这部分。
对象数据库管理系统SQL分析处理器(300)用于处理针对对象数据库管理系统的读写请求,将统一访问的请求通过对象数据库管理系统虚表构造器(420)转换翻译成对象数据库管理系统的原始API(730),通常对象数据库管理系统的原始API都是基于标准C语言的函数接口。主流对象数据库管理系统db4o和OSpread都提供标准C语言的函数接口,提供对模型、类、实例的写入、查询、修改和查询等函数接口。
虚拟表构造器(400)包含实时/历史数据库系统虚拟表构造器(410)和对象数据库管理系统虚拟表构造器(420)两部分。在实时/历史数据库系统中,一般不存在物理的表的概念,因此实时/历史数据库系统虚拟表构造器(410)的主要作用就是将现在实时/历史数据库系统中的数据模型抽象归纳成和传统关系数据库管理系统逻辑上一致的表概念。当然这里的表是“虚表”,也就是逻辑上的概念,而不是物理上实际存在的物理表,因此称为虚拟表构造器。上述异构数据库统一访问技术中,实时/历史数据库系统被虚拟成两张虚表:实时数据表RTDBRTVT和历史数据表RTDBHTVT两张虚表,两张表结构一致,如表1所示:
含义 | 字段名 | 字段类型 |
标签编号 | RTDBTID | long |
时间标签 | RTDBTS | long |
实时数值 | RTDB RVAL | float |
数值状态 | RTDBSTA | int32 |
表1
其中包含RTDBTID、RTDBTS、RTDBRVAL和RTDBSTA四个字段,分别表示实时/历史数据库系统中的标签编号、数据的时间标签、实时数值和数值状态。
对象数据库管理系统虚拟表构造器(420)的主要作用就是将现在对象数据库管理系统中的数据模型抽象归纳成和传统关系数据库管理系统逻辑上一直的表概念,因为目前主流的对象数据库管理系统也是一般不存在物理表的概念。上述异构数据库统一访问技术中,对象数据库管理系统被虚拟成四张虚表:模型数据表ODBMODELVT、类数据表ODBCLASSVT和实例数据表ODBINSTANCEVT三张虚表,
模型数据表ODBMODELVT的结构如表2所示:
含义 | 字段名 | 字段类型 |
模型名称 | OBDBMLNAME | char(64) |
模型类型 | OBDBMLTYPE | long |
创建时间 | OBDBMLCT | char(32) |
修改时间 | OBDBMLUT | char(32) |
模型描述 | OBDBMLDESC | char(64) |
子类列表 | OBDBMLCLASS | binary |
表2
其中包含OBDBMLNAME、OBDBMLTYPE、OBDBMLCT、OBDBMLUT、OBDBMLDESC和OBDBMLCLASS六个字段,分别表示对象数据库管理系统中的模型名称、模型类型、创建时间、修改时间、模型描述和子类列表。
类数据表ODBCLASSVT的结构如表3所示:
含义 | 字段名 | 字段类型 |
类名称 | OBDBCSNAME | char(64) |
所属包 | OBDBCSCATG | char(64) |
创建时间 | OBDBCSCT | char(32) |
修改时间 | OBDBCSUT | char(32) |
类描述 | OBDBCSDESC | char(64) |
实例列表 | OBDBCSINST | binary |
表3
其中包含OBDBCSNAME、OBDBCSCATG、OBDBCSCT、OBDBCSUT、OBDBCSDESC和OBDBCSINST六个字段,分别表示对象数据库管理系统中的类名称、类所属的包、创建时间、修改时间、类描述和实例列表。
实例数据表ODBINSTANCEVT的结构如表4所示:
含义 | 字段名 | 字段类型 |
实例名称 | OBDBISNAME | char(64) |
所属类 | OBDBISCS | char(64) |
创建时间 | OBDBISCT | char(32) |
修改时间 | OBDBISUT | char(32) |
实例描述 | OBDBISDESC | char(64) |
属性列表 | OBDBISPRPS | binary |
表4
其中包含OBDBISNAME、OBDBISCS、OBDBISCT、OBDBISUT、OBDBISDESC和OBDBISPRPS六个字段,分别表示对象数据库管理系统中的实例名称、所属的类、创建时间、修改时间、实例描述和属性列表。
数据库原始API(700)是一个主流异构数据库管理系统的原始API集合,其中包含传统关系数据库管理系统原始API(710)、实时/历史数据库系统原始API(720)和对象数据库管理系统原始API(730)。
数据库原始API模块(700)可以根据不同需要加入其它产品的原始API,在异构数据库统一访问技术中其它部分不需要变化,直接在数据库原始API模块(700)可以无限扩充。
后台异构数据库服务器系统(800)一个异构数据库群,其中可以包含一种或者多种不同的数据库管理系统,同时同一类别的数据库管理系统也可以存在多个,比如在传统关系数据库管理系统可以同时有Oracle和DB2等,实时/历史数据库系统可以同时有PI和PTimeDB。
但是对数据库应用开发者而言开发的接口还是标准的SQL语法语句,不同的是传统关系数据库管理系统中的表不是数据库系统中的系统表就是用户建立的用户表。而在异构数据库统一访问技术中,除了传统关系数据库管理系统中真正存在的物理表,还有实时/历史数据库系统和对象数据库管理系统的虚拟表,而且这些虚表的结构并不复杂,大多数应用中只需要关联其中的部分虚表字段。
如图2所示,本发明的具体处理流程如下:
步骤一:前台客户端接收用户输入的SQL语句,并将SQL语句请求发往后台数据库请求处理程序;
步骤二:后台数据库请求处理程序根据SQL标准语法分析SQL语句是否合法;如果SQL语句不合法,构造错误回应包给客户端,然后直接退出本流程;否则,进入下一步;
步骤三:对请求SQL进行初步语法分析,分解出要操作的虚表表名,然后根据虚表表名判断当前的请求是发向哪类异构数据库服务器的,所述异构数据库服务器的类型包括:传统关系数据库管理系统、实时/历史数据库系统、对象数据库管理系统;其中,实时/历史数据库系统包括两张虚表:实时数据库表RTDBRTVT和历史数据库表RTDBHTVT;对象数据库管理系统包括三张虚表:模型数据表ODBMODELVT、类数据表ODBCLASSVT和实例数据表ODBINSTANCEVT;如果当前SQL语句中的表名称是RTDBRTVT或RTDBHTVT,则是发往实时/历史数据库服务器的请求;如果当前SQL语句中的表名称是ODBMODELVT、ODBCLASSVT或ODBINSTANCEVT,则是发往对象数据库服务器的请求;否则默认是发往传统关系数据库服务器的请求;
步骤四:根据步骤三判断得到的结果选择对应异构数据库服务器的SQL分析处理器:传统关系数据库管理系统SQL分析处理器(100)、实时/历史数据库系统SQL分析处理器(200)或者对象数据库管理系统SQL分析处理器(300)来处理SQL语句中的实际读写请求,各个分析处理器的处理过程如下:
能够根据SQL语句中包含的虚表表名选择相应的分析处理器,是因为实时/历史数据库系统和对象数据库管理系统中所使用的虚拟表名是固定的,在本发明中,传统关系数据库管理系统中不会出现和这些虚拟表重名冲突的表;
(1)传统关系数据库管理系统SQL分析处理器(100)处理针对传统关系数据管理系统的读写请求,处理的过程如下:
a1、如果对应的传统关系数据库管理系统的原始API(710)支持标准的SQL语法语句,那么不需要进行转换处理,直接将这个原始请求传给传统关系数据库管理系统的原始API(710)调用执行;因为原始请求就是一个SQL语句;
b1、如果对应的传统关系数据库管理系统的原始API(710)不支持标准的SQL语法语句,则进行语法转换,将请求中的标准SQL语句通过对应的传统关系数据库管理系统的语法转换器进行转换(语法转换器包含在SQL分析处理器(100)中),并将转换后的SQL语句传递给对应的传统关系数据库管理系统的相应原始API(710)进行调用;
传统关系数据库管理系统的原始API(710)是指各个关系数据库厂商所开发的函数指令。这里存在两种情况,一种是厂商开发的API指令符合行业内标准SQL语法,另外一种情况是不符合标准SQL语法,如果是后者,就必须将不符合标准SQL语法的请求进行语法转换,具体过程是指将a1步骤中发过来的原始请求中的SQL语句通过关系数据库管理系统中的语法转换器的解析,将原始请求中的SQL语句进行语法转换,达到符合厂商产品支持的SQL语法的效果,如,一个查询SQL语句:
SELECT productname,price,number FROM[product info],当表名中存在空格时,标准SQL语法规定必须使用[]进行包括,但是个别厂商支持的却是{},所以转换后,SQL语句变为
SELECT productname,price,number FROM{product info}。
支持标准的SQL语法语句的传统关系数据库管理系统包括Oracle、DB2、Sybase和SQL Server。
(2)实时/历史数据库系统SQL分析处理器(200)处理针对实时/历史数据库系统的读写请求,处理的过程如下:
a2、使用语法分析器第一步分析确定输入的SQL语法是否符合实时/历史数据库系统支持的语法,同时分析出SQL语句操作类型,要操作的虚表表名,要操作虚拟字段,和要操作的约束条件限制;
b2、如果当前请求的SQL语句操作类型是对实时/历史数据库系统的虚表的查询(SELECT)、更新(Update)或插入(INSERT)以外的请求动作,则返回失败,因为实时/历史数据库系统中的虚表是固定的,不允许创建表、修改表和删除表等操作;否则进入c2;
c2、根据a2分析出的结果,调用实时/历史数据库系统的相应API执行相应请求;具体过程是:根据a2分析出的SQL语句操作类型以及要操作的虚表表名,判断执行以下不同的步骤:
如果是INSERT语句并且虚拟表的表名是实时数据库表(RTDBRTVT),则调用实时/历史数据库系统的实时数据插入API来执行该请求;
如果是INSERT语句并且虚拟表的表名是历史数据库表(RTDBHTVT),则调用实时/历史数据库系统的历史数据插入API来执行该请求;
如果是SELECT语句并且虚拟表的表名是实时数据库表(RTDBRTVT),则调用实时/历史数据库系统的实时数据查询API来执行最终的请求;
如果是SELECT语句并且虚拟表的表名是历史数据库表(RTDBHTVT),则调用实时/历史数据库系统的历史数据查询API来执行最终的请求;
如果是Update语句并且虚拟表的表名是实时数据库表(RTDBRTVT),则调用实时/历史数据库系统的实时数据更新API来执行最终的请求;
如果是Update语句并且虚拟表的表名是历史数据库表(RTDBHTVT),则调用实时/历史数据库系统的历史数据修改API来执行最终的请求;
如果是Delete语句并且虚拟表的表名是实时数据库表(RTDBRTVT),则该请求属于非法的一种,实时数据是不允许被删除的;
如果是Delete语句并且虚拟表的表名是历史数据库表(RTDBHTVT),则调用实时/历史数据库系统的历史数据删除API来执行最终的请求;
这里的API指不同类型数据库厂商所提供的API函数,但是功能与作用是类似的,因此统一用API这个名词来代替。
通常实时/历史数据库系统的原始API(720)都是基于标准C语言的函数接口。主流实时/历史数据库系统PI和PTimeDB都提供标准C语言的函数接口,提供实时数据写入、实时数据查询、历史数据查询和历史数据管理等函数接口。
在实时/历史数据库系统中,一般不存在物理的表的概念,因此实时/历史数据库系统虚拟表构造器(410)的主要作用就是将现在实时/历史数据库系统中的数据模型抽象归纳成和传统关系数据库管理系统逻辑上一致的表概念。当然这里的表是“虚表”,也就是逻辑上的概念,而不是物理上实际存在的物理表,因此称为虚拟表构造器。本方法中,实时/历史数据库系统包括两张虚表:实时数据库表(RTDBRTVT)和历史数据库表(RTDBHTVT)。
(3)对象数据库管理系统SQL分析处理器(300)处理针对对象数据库管理系统的读写请求,处理的过程如下:
a3、使用语法分析器第一步分析确定输入的SQL语法是否符合对象数据库管理系统支持的语法,同时分析出SQL语句操作类型,要操作的虚表表名,要操作虚拟字段,和要操作的约束条件限制。
b3、如果当前请求的SQL语句操作类型是对对象数据库系统的虚表的查询(SELECT)、更新(Update)或插入(INSERT)以外的请求动作,则返回失败,因为对象数据库系统中的虚表是固定的,不允许创建表、修改表和删除表等操作;否则进入c3;c3、根据a3分析出的结果,调用对象数据库系统的相应API执行相应请求;具体过程是:根据a3分析出的SQL语句操作类型,要操作的虚表表名,根据判断执行以下不同的步骤:
如果是SELECT语句并且表名是模型数据表(ODBMODELVT),则调用对象数据库系统的模型数据查询API来执行最终的请求;
如果是INSERT语句并且表名是模型数据表(ODBMODELVT),则调用对象数据库系统的模型数据插入API来执行最终的请求;
如果是UPDATE语句并且表名是模型数据表(ODBMODELVT),则调用对象数据库系统的模型数据更新API来执行最终的请求;
如果是Delete语句并且表名是模型数据表(ODBMODELVT),则调用对象数据库系统的模型数据删除API来执行最终的请求;
如果是SELECT语句并且表名是类数据表(ODBCLASSVT),则调用对象数据库系统的类数据查询API来执行最终的请求;
如果是INSERT语句并且表名是类数据表(ODBCLASSVT),则调用对象数据库系统的类数据插入API来执行最终的请求;
如果是UPDATE语句并且表名是类数据表(ODBCLASSVT),则调用对象数据库系统的类数据更新API来执行最终的请求;
如果是Delete语句并且表名是类数据表(ODBCLASSVT),则调用对象数据库系统的类数据删除API来执行最终的请求;
如果是SELECT语句并且表名是实例数据表(ODBINSTANCEVT),则调用对象数据库系统的实例数据查询API来执行最终的请求;
如果是INSERT语句并且表名是实例数据表(ODBINSTANCEVT),则调用对象数据库系统的实例数据插入API来执行最终的请求;
如果是UPDATE语句并且表名是实例数据表(ODBINSTANCEVT),则调用对象数据库系统的实例数据更新API来执行最终的请求;
如果是Delete语句并且表名是实例数据表(ODBINSTANCEVT),则调用对象数据库系统的实例数据删除API来执行最终的请求;
对象数据库系统的原始API(710)是指各个对象数据库系统所开发的函数指令。通常对象数据库管理系统的原始API都是基于标准C语言的函数接口。主流对象数据库管理系统db4o和OSpread都提供标准C语言的函数接口,提供对模型、类、实例的写入、查询、修改和查询等函数接口。
所述的对象数据库管理系统虚拟表构造器(400)主要作用就是将现在对象数据库管理系统中的数据模型抽象归纳成和传统关系数据库管理系统逻辑上一致的表概念,因为目前主流的对象数据库管理系统也是一般不存在物理表的概念。上述异构数据库统一访问技术中,对象数据库管理系统包括三张虚表:模型数据表(ODBMODELVT)、类数据表(ODBCLASSVT)和实例数据表(ODBINSTANCEVT);
步骤五:将步骤四执行后的结果返回给前台客户端。执行结果的接口规范是一致的,几类SQL语句执行返回结果规范如下:
SELECT语句,如果执行成功,返回一个结果集,结果集以表的格式返回到前台客户端,返回执行失败,返回出错响应包,响应包中包含执行错误码和相应错误消息。
Insert语句,如果执行成功,返回成功响应包,响应包中包含执行成功码,返回执行失败,返回出错响应包,响应包中包含执行错误码和相应错误消息。
Update语句,如果执行成功,返回成功响应包,响应包中包含执行成功码和更新受影响的记录数,返回执行失败,返回出错响应包,响应包中包含执行错误码和相应错误消息。
Delete语句,如果执行成功,返回成功响应包,响应包中包含执行成功码和删除受影响的记录数,返回执行失败,返回出错响应包,响应包中包含执行错误码和相应错误消息。
本发明的实施方式不限于此,在本发明上述基本技术思想前提下,按照本领域的普通技术知识和惯用手段对本发明内容所做出其它多种形式的修改、替换或变更,均落在本发明权利保护范围之内。
Claims (6)
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语句操作类型,要操作的虚拟表表名,要操作的虚拟字段,和要操作的约束条件限制;
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来执行最终的请求;
如果是UPDATE语句并且表名是模型数据表,则调用对象数据库系统的模型数据更新API来执行最终的请求;
如果是Delete语句并且表名是模型数据表,则调用对象数据库系统的模型数据删除API来执行最终的请求;
如果是SELECT语句并且表名是类数据表,则调用对象数据库系统的类数据查询API来执行最终的请求;
如果是INSERT语句并且表名是类数据表,则调用对象数据库系统的类数据插入API来执行最终的请求;
如果是UPDATE语句并且表名是类数据表,则调用对象数据库系统的类数据更新API来执行最终的请求;
如果是Delete语句并且表名是类数据表,则调用对象数据库系统的类数据删除API来执行最终的请求;
如果是SELECT语句并且表名是实例数据表,则调用对象数据库系统的实例数据查询API来执行最终的请求;
如果是INSERT语句并且表名是实例数据表,则调用对象数据库系统的实例数据插入API来执行最终的请求;
如果是UPDATE语句并且表名是实例数据表,则调用对象数据库系统的实例数据更新API来执行最终的请求;
如果是Delete语句并且表名是实例数据表,则调用对象数据库系统的实例数据删除API来执行最终的请求。
6.根据权利要求1所述的异构数据库的统一访问方法,其特征在于:所述对象数据库管理系统包括三张虚拟表:模型数据表、类数据表和实例数据表,其中,模型数据表中存储对象数据库管理系统中的模型名称、模型类型、创建时间、修改时间、模型描述和子类列表;类数据表中存储对象数据库管理系统中的类名称、类所属的包、创建时间、修改时间、类描述和实例列表;实例数据表中存储对象数据库管理系统中的实例名称、所属的类、创建时间、修改时间、实例描述和属性列表。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110365442 CN102521254B (zh) | 2011-11-17 | 2011-11-17 | 异构数据库的统一访问方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110365442 CN102521254B (zh) | 2011-11-17 | 2011-11-17 | 异构数据库的统一访问方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102521254A CN102521254A (zh) | 2012-06-27 |
CN102521254B true CN102521254B (zh) | 2013-04-10 |
Family
ID=46292176
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201110365442 Active CN102521254B (zh) | 2011-11-17 | 2011-11-17 | 异构数据库的统一访问方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102521254B (zh) |
Families Citing this family (43)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103823815B (zh) * | 2012-11-19 | 2017-05-17 | 中国联合网络通信集团有限公司 | 服务器及数据库访问方法 |
CN103761140B (zh) * | 2013-11-29 | 2018-04-13 | 北京中启智源数字信息技术有限责任公司 | 一种在异构关系型数据库中实现事务处理的方法 |
CN104391923A (zh) * | 2014-11-20 | 2015-03-04 | 北京锐安科技有限公司 | 一种查询数据集的方法及装置 |
CN105989150B (zh) * | 2015-03-02 | 2019-11-26 | 中国移动通信集团四川有限公司 | 一种基于大数据环境的数据查询方法及装置 |
WO2016141590A1 (zh) * | 2015-03-12 | 2016-09-15 | 华为技术有限公司 | 时序数据处理方法及装置 |
CN106547781B (zh) * | 2015-09-21 | 2021-06-11 | 南京中兴新软件有限责任公司 | 一种实现分布式事务的方法、装置及数据库服务器 |
CN105260403B (zh) * | 2015-09-22 | 2019-05-31 | 同望科技股份有限公司 | 通用跨数据库访问方法 |
CN105389342A (zh) * | 2015-10-23 | 2016-03-09 | 浪潮软件股份有限公司 | 一种数据库访问工具、系统和方法 |
US10592471B2 (en) * | 2015-11-23 | 2020-03-17 | International Business Machines Corporation | Processing database statements for a relational database |
CN106897322B (zh) * | 2015-12-21 | 2019-10-29 | 中国移动通信集团山西有限公司 | 一种数据库和文件系统的访问方法和装置 |
CN105719184A (zh) * | 2016-01-15 | 2016-06-29 | 优品财富管理有限公司 | 一种交易指令转换方法及系统 |
CN106503173A (zh) * | 2016-10-24 | 2017-03-15 | 上海携程商务有限公司 | Kv数据库访问方法及装置 |
CN106777108A (zh) * | 2016-12-15 | 2017-05-31 | 贵州电网有限责任公司电力科学研究院 | 一种基于混合存储架构的数据查询方法和装置 |
CN108255852B (zh) * | 2016-12-29 | 2020-09-11 | 中国移动通信集团浙江有限公司 | Sql执行方法及装置 |
CN108415909A (zh) * | 2017-02-09 | 2018-08-17 | 北京京东尚科信息技术有限公司 | 一种访问不同数据库的系统及方法 |
CN106980672A (zh) * | 2017-03-28 | 2017-07-25 | 中国电子科技集团公司第二十九研究所 | 一种异构环境下面向对象的数据存储系统及方法 |
CN106897467A (zh) * | 2017-04-24 | 2017-06-27 | 成都四方伟业软件股份有限公司 | 一种大数据分析引擎的数据库适配方法 |
CN107370725A (zh) * | 2017-06-21 | 2017-11-21 | 西安电子科技大学 | 一种云环境下通用加密数据库的存取方法及系统 |
CN108009236B (zh) * | 2017-11-29 | 2020-11-03 | 北京锐安科技有限公司 | 一种大数据查询方法、系统、计算机及存储介质 |
CN108446397B (zh) * | 2018-03-27 | 2022-05-20 | 四川师范大学 | 一种百万级Spatialite空间数据库的快速查询方法 |
CN110309213B (zh) * | 2018-03-28 | 2023-10-13 | 腾讯科技(深圳)有限公司 | 一种数据库访问控制方法、装置、系统、介质及设备 |
CN109165039B (zh) * | 2018-04-28 | 2019-10-01 | 北京数聚鑫云信息技术有限公司 | 一种web API的配置及执行方法、系统及介质 |
CN108734023B (zh) * | 2018-04-28 | 2021-12-21 | 西安电子科技大学 | 一种密文数据库系统的访问与集成系统及方法 |
CN108920109A (zh) * | 2018-07-19 | 2018-11-30 | 郑州云海信息技术有限公司 | 一种存储平台统一管理方法、装置、设备及系统 |
CN109614427B (zh) * | 2018-10-23 | 2024-08-13 | 平安科技(深圳)有限公司 | 多源数据库的访问方法及装置、存储介质和电子设备 |
CN110046287A (zh) * | 2019-03-19 | 2019-07-23 | 厦门市美亚柏科信息股份有限公司 | 一种与数据库类型无关的数据查询方法、装置及存储介质 |
CN110597844B (zh) * | 2019-08-14 | 2023-07-21 | 中国平安财产保险股份有限公司 | 异构数据库数据统一访问方法及相关设备 |
CN111124805A (zh) * | 2019-11-25 | 2020-05-08 | 中国联合网络通信集团有限公司 | 数据采集方法、装置、设备及存储介质 |
CN111125218A (zh) * | 2019-12-13 | 2020-05-08 | 成都安恒信息技术有限公司 | 一种基于协议解析的数据库兼容方法及其兼容性代理装置 |
CN111708803A (zh) * | 2020-06-11 | 2020-09-25 | 北京计算机技术及应用研究所 | 一种通用的异构数据库数据管理方法 |
CN111737527A (zh) * | 2020-06-29 | 2020-10-02 | 中国南方电网有限责任公司 | 异构终端的数据处理方法、装置、电子设备和存储介质 |
CN111782652B (zh) * | 2020-06-30 | 2024-04-02 | 深圳赛安特技术服务有限公司 | 数据调用方法、装置、计算机设备和存储介质 |
SG10202008564PA (en) * | 2020-09-03 | 2021-12-30 | Grabtaxi Holdings Pte Ltd | Data Base System and Method for Maintaining a Data Base |
CN113641862A (zh) * | 2020-11-23 | 2021-11-12 | 国网上海能源互联网研究院有限公司 | 一种基于统一访问分布式集成多源异构数据的方法及系统 |
CN112635087B (zh) * | 2020-12-23 | 2024-01-12 | 福建福清核电有限公司 | 一种核电站操纵员站直接识别故障设备真实状态的方法 |
CN112632625A (zh) * | 2020-12-31 | 2021-04-09 | 深圳昂楷科技有限公司 | 数据库安全网关系统、数据处理方法、电子设备 |
CN112910980B (zh) * | 2021-01-27 | 2022-11-15 | 中国银联股份有限公司 | 一种数据库访问系统和方法 |
CN112835873A (zh) * | 2021-02-26 | 2021-05-25 | 中国电力科学研究院有限公司 | 电网调控异构系统服务化访问方法、系统、设备及介质 |
CN113254522A (zh) * | 2021-06-18 | 2021-08-13 | 深圳追一科技有限公司 | 一种数据库访问方法、装置、设备及可读存储介质 |
CN113688151A (zh) * | 2021-08-25 | 2021-11-23 | 中国工商银行股份有限公司 | 基于虚拟数据库的数据访问方法、装置、系统、设备和介质 |
CN113821557B (zh) * | 2021-09-24 | 2023-06-13 | 四川新网银行股份有限公司 | Web页面与后端进行数据交互的方法 |
CN114168669B (zh) * | 2021-11-29 | 2024-06-28 | 国网浙江省电力有限公司嵊泗县供电公司 | 一种bs访问的数据库管理系统 |
CN117908848B (zh) * | 2024-02-01 | 2024-06-28 | 中国电子投资控股有限公司 | 一种统一sql语法可视化数据服务方法和装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101174271B (zh) * | 2007-11-28 | 2010-06-02 | 金蝶软件(中国)有限公司 | 数据库系统管理方法 |
CN101645074A (zh) * | 2009-09-07 | 2010-02-10 | 浪潮集团山东通用软件有限公司 | 一种访问不同类型关系型数据库的方法 |
CN102081661A (zh) * | 2011-01-19 | 2011-06-01 | 吉林大学 | 基于xml的异构关系型数据库的数据集成方法和系统 |
-
2011
- 2011-11-17 CN CN 201110365442 patent/CN102521254B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN102521254A (zh) | 2012-06-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102521254B (zh) | 异构数据库的统一访问方法 | |
JP5598017B2 (ja) | 判定プログラム、方法及び装置 | |
Casati et al. | Deriving active rules for workflow enactment | |
US9280568B2 (en) | Zero downtime schema evolution | |
US20170083573A1 (en) | Multi-query optimization | |
US20180081956A1 (en) | Method for automatically synchronizing multi-source heterogeneous data resources | |
EP2891994A1 (en) | Method for achieving automatic synchronization of multisource heterogeneous data resources | |
US8307015B2 (en) | Decorated model architecture for efficient model-driven application development | |
CN105868204A (zh) | 一种转换Oracle脚本语言SQL的方法及装置 | |
CN111752959B (zh) | 一种实时数据库跨库sql交互方法和系统 | |
CN106897322A (zh) | 一种数据库和文件系统的访问方法和装置 | |
CN110019314B (zh) | 基于数据项分析的动态数据封装方法、客户端和服务端 | |
CN105022739A (zh) | 数据的存储方法及装置 | |
Cleve | Program analysis and transformation for data-intensive system evolution | |
CN1976320B (zh) | 数据访问控制方法及系统 | |
US20130014082A1 (en) | Method of configuring business logic supporting multi-tenancy | |
US7185322B2 (en) | Method and apparatus for parallel action processing | |
CN117270960A (zh) | 一种应用系统架构的分析方法及装置 | |
CN105045912A (zh) | 一种关系型数据库数据分发的方法 | |
US7712078B1 (en) | Techniques for data store population | |
CN106874364A (zh) | 基于xml配置的动态化sql查询方法 | |
CN102707956B (zh) | 用于处理触发器返回结果不确定性的方法 | |
US6496976B1 (en) | Method and system for dynamic recompilation of statements of a first language embedded in a program having statements of a second language | |
CN114116773A (zh) | 一种结构化查询语言sql文本审核方法及装置 | |
CN112597169A (zh) | 一种工业软件多租户数据隔离的实现方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address |
Address after: 510080 Dongfeng East Road, Dongfeng, Guangdong, Guangzhou, Zhejiang Province, No. 8 Patentee after: Electric Power Research Institute of Guangdong Power Grid Co.,Ltd. Address before: Guangzhou City, Guangdong province Yuexiu District 510080 Dongfeng East Road, No. 8 building water Kong Guangdong Patentee before: ELECTRIC POWER RESEARCH INSTITUTE OF GUANGDONG POWER GRID Corp. |
|
CP03 | Change of name, title or address |