CN103778133A - 一种数据库对象的变更方法及装置 - Google Patents
一种数据库对象的变更方法及装置 Download PDFInfo
- Publication number
- CN103778133A CN103778133A CN201210398278.XA CN201210398278A CN103778133A CN 103778133 A CN103778133 A CN 103778133A CN 201210398278 A CN201210398278 A CN 201210398278A CN 103778133 A CN103778133 A CN 103778133A
- Authority
- CN
- China
- Prior art keywords
- database
- database object
- dependence
- attribute information
- name
- 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.)
- Pending
Links
Images
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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种数据库对象的变更方法和装置。所述方法包括:收集数据库依赖***与数据库对象的依赖关系,所述依赖关系中包括依赖***与所依赖的数据库对象的对应关系,以及所述数据库对象的属性信息;接收并解析对数据库对象的变更操作,得到请求变更的数据库对象的属性信息;判断所述依赖关系中,是否包含请求变更的数据库对象的属性信息;若是,则向对应的数据库依赖***发送变更提示信息,并执行所述对数据库对象的变更操作。通过本申请,可以在数据库中的数据表结构发生变化时,对依赖***中的相应的数据表做变更。
Description
技术领域
本申请涉及数据库技术领域,特别是涉及一种数据库对象的变更方法和装置。
背景技术
数据库已经在信息技术领域有了广泛的应用,特别是在互联网公司,数据库集群规模随着业务的拓展越来越大;在数据库规模发展的同时,产生了各种数据库的依赖***(如数据仓库、搜索***),以满足各种各样的数据分析和数据搜索的需求。
数据仓库需要基于数据库中的线上业务数据做分析,然后转换为适合于各类数据报表提取的内容;搜索***需要基于线上业务数据进行分析,然后转换为为适合于搜索业务的数据内容。
依赖***来提取数据是通过表来获取的,如果表的结构发生变化,提取数据的过程就会出现错误,从而导致依赖***出现问题。例如:依赖***需要一张用户信息表“USER_INFO”,每天提取一次,当白天有人将该表的表名修改为“USER_BASE_INFO”,如果下游***不知道表名称发生改变,还是按照以前的表名就没办法提取到所需数据。
目前一些大型网络公司的数据库,仅仅目前在线使用的就达到几十万个表。同时,这些依赖于数据库的***各自又都有着庞大而又繁杂的存储内容,并且会采用更多的云计算技术,因此,数据库和依赖***之间的依赖关系非常复杂,当数据库中的表结构发生变更时,人为无法判断需要对哪些依赖***的数据表做相应的变更,从而导致依赖***的正常运行出现问题。
因此,目前需要本领域技术人员解决的一个技术问题就是,提供一种数据库对象的变更机制,使得数据库中的数据表结构发生变化时,可以对依赖***中的相应的数据表做变更。
发明内容
本申请所要解决的技术问题是提供一种数据库对象的变更方法,使得数据库中的数据表结构发生变化时,可以对依赖***中的相应的数据表做变更。
本申请还提供了一种数据库对象的变更装置,用以保证上述方法在实际中的应用及实现。
为了解决上述问题,本申请公开了一种数据库对象的变更方法,包括:
收集数据库依赖***与数据库对象的依赖关系,所述依赖关系中包括依赖***与所依赖的数据库对象的对应关系,以及所述数据库对象的属性信息;
接收并解析对数据库对象的变更操作,得到请求变更的数据库对象的属性信息;
判断所述依赖关系中,是否包含请求变更的数据库对象的属性信息;
若是,则向对应的数据库依赖***发送变更提示信息,并执行所述对数据库对象的变更操作。
优选的,所述数据库对象为数据表,所述变更操作为数据表结构操作,所述数据库依赖***包括数据仓库和搜索***。
优选的,所述属性信息包括主机名称、端口、数据库名称和数据表名。
优选的,所述收集数据库依赖***与数据库对象的依赖关系的步骤为,
在数据仓库和搜索***中,分别提取对数据库对象的依赖关系记录。
优选的,所述收集的依赖关系存储在内存的哈希表中。
优选的,所述方法还包括:
对所述属性信息中的数据表名进行格式转换;
按照预设hash算法,对格式转换后的数据表名取hash值作为key,将主机名称、数据库名称和端口作为value,以key-value的数据结构存储在哈希表中。
优选的,所述解析对数据库对象的变更操作,得到请求变更的数据库对象的属性信息的步骤包括:
将所述变更操作拆分为多个子操作,并提取出对数据库对象进行修改、结构变更和删除的子操作;
利用正则表达式,对提取的各个子操作进行正则匹配,得出各个子操作对应的属性信息,其中所述主机名称在提交所述变更操作的同时提交。
优选的,所述属性信息中的数据库名称为主库名称,所述解析对数据库对象的变更操作,得到请求变更的数据库对象的属性信息的步骤还包括:
在数据库监控平台中提取主库和备库的对应表;
依据所述对应表和主库名称,得出各个子操作对应的主机名称、端口、数据库名称和数据表名,其中,数据库名称包括主库名称和备库名称。
优选的,所述解析对数据库对象的变更操作,得到请求变更的数据库对象的属性信息的步骤还包括:
修正所述变更操作中的目标字符。
优选的,所述收集数据库依赖***与数据库对象的依赖关系的步骤按照预设频率执行,并依据最新一次收集的依赖关系进行更新。
优选的,所述方法还包括:
若否,则执行所述对数据库对象的变更操作。
优选的,所述判断所述依赖关系中,是否包含请求变更的数据库对象的属性信息的步骤包括:
提取解析出的属性信息中的数据表名,按照预设hash算法,将所述数据表名转换为hash值;
在哈希表中搜索与所述hash值相同的key,若存在,则判断所述变更操作中的其余属性信息,是否包含该key对应的value;
若一致,则判定所述依赖关系中包含请求变更的数据库对象的属性信息。
优选的,所述变更提示信息包括请求变更的数据库对象的属性信息,以及所述变更操作的链接。
本申请还提供了一种数据库对象的变更装置,包括:
依赖关系收集模块,用于收集数据库依赖***与数据库对象的依赖关系,所述依赖关系中包括依赖***与所依赖的数据库对象的对应关系,以及所述数据库对象的属性信息;
变更操作解析模块,用于接收并解析对数据库对象的变更操作,得到请求变更的数据库对象的属性信息;
判断模块,用于判断所述依赖关系中,是否包含请求变更的数据库对象的属性信息,若是,则执行提示信息发送模块和变更模块;
提示信息发送模块,用于向对应的数据库依赖***发送变更提示信息;
变更模块,用于执行所述对数据库对象的变更操作。
与现有技术相比,本申请具有以下优点:
依据本申请,预先收集数据库依赖***与数据表的依赖关系,依赖关系中包含数据表的属性,然后判断提交的数据库对象变更操作中,是否也包含这些信息,若包含,则说明对该依赖表的修改操作会影响依赖***,可以向依赖表对应的依赖***发送提示信息,使得数据库中的数据表结构发生变化时,自动分析变更任务所涉及到的依赖***,可以对依赖***中的相应的数据表做变更。
其次,本申请将收集的依赖关系以key-value的数据结构保存在hash表中,以key为标识快速查找到对应的数据表,然后对比value即可完成分析,大大提高了分析效率。
当然,实施本申请的任一产品不一定需要同时达到以上所述的所有优点。
附图说明
图1是本申请的一种数据库对象的变更方法实施例1的流程图;
图2是本申请的一种数据库对象的变更方法实施例2的流程图;
图3是本申请的一种数据库对象的变更装置实施例1的结构框图;
图4是本申请的一种数据库对象的变更装置实施例2的结构框图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
本申请提出一种数据库对象的变更方法,预先收集了数据库依赖***与数据库的依赖关系,业务人员在变更***提交对数据库对象的变更操作,并通知数据库任务管理平台;数据库任务管理平台通过调度***,建立并调度执行数据库的各个任务,数据库任务平台接收到通知后,由调度***建立分析任务,分析任务会按照预设的调度规则被调度,依据依赖关系分析变更操作会对哪些依赖***产生影响。进而可以对依赖***中的相应的数据表做变更。
参考图1,其示出了本申请的一种数据库对象的变更方法实施例1的流程图,具体可以包括以下步骤:
步骤101、收集数据库依赖***与数据库对象的依赖关系,所述依赖关系中包括依赖***与所依赖的数据库对象的对应关系,以及所述数据库对象的属性信息。
本申请中,所述数据库可以是OLTP(Online Transaction Processing,在线事务处理)数据库,OLTP数据库是线上业务***的后台数据库,一般具有较高的并发;本申请也可以应用于其他类型的数据库,例如,DSS(Decision Suport System,决策支持***)数据库。
数据库对象可以是最基本的数据表和视图,以及约束、序列、函数、存储过程、包、触发器等。若所述数据库对象为数据表,则所述变更操作为数据表结构操作,所述属性信息可以包括主机名称、端口、数据库名称和数据表名。
所述数据库依赖***可以包括数据仓库和搜索***,均需要用到数据库对象做数据分析。
优选的,所述步骤101可以包括:
子步骤S11、在数据仓库和搜索***中,分别提取数据库对象的依赖关系记录。
数据仓库和搜索***的数据表依赖于数据库,会以数据库的数据为基础,通过数据库名、数据库对象名、主机名等作为提取数据的单位,所以其依赖关系也是以这些为基础。数据仓库和搜索***中记录了在数据库中提取的数据库对象,提取的时间,数据库对象的属性信息,可以将依赖***与所依赖的数据库对象的对应关系,以及所述数据库对象的属性信息整理出来备用。
在具体的实现中,所述收集数据库依赖***与数据库对象的依赖关系的步骤可以按照预设频率执行,并依据最新一次收集的依赖关系进行更新。收集的依赖关系可以保存在公共数据库中。
步骤102、接收并解析对数据库对象的变更操作,得到请求变更的数据库对象的属性信息。
对数据库表结构变更是基于业务需求的,业务人员在变更***提交变更单操作,变更***接收变更操作后会通知数据库任务管理平台,数据库任务平台接收变更***发送过来的变更操作,建立分析任务,并调度执行分析任务,对变更操作进行解析。
当数据库对象为数据表时,对数据库对象的变更操作即是进行表结构变更的DDL语句(Data Description Language,数据库模式定义语言)。变更操作的内容主要可包含执行的具体主机、端口、数据库名、数据表名;其中主机定位到一个数据库实例,库名定位到具体的数据库上,DDL语句为修改对应数据库上的一个或多个表结构的语句,该语句可以在一个数据库中正常的执行,经过正则表达式转换后可以被执行。
在具体的实现中,主机名称可能并不包含在DDL语句中,而是在提交数据库对象变更操作时,一同提交。具体的,可以在变更***填写变更时,在选项“变更设备”中填写主机名称。
如下两个DDL语句:172.23.100.17:3306sns_01库中执行:
DDL语句1、Create table sns_blogs(id number,name varchar2(32));
DDL语句2、Alter table sns_groups add column group_desc varchar2(32)。
填写changefree变更时,填写为主机名称为A。
前一个DDL语句表示在sns_01数据库中进行创建表sns_blogs的操作;
后一个DDL语句表示在sns_01数据库中进行修改表sns_groups的操作。
对上面的DDL语句提取得到请求变更的数据库对象的属性信息如下:
DDL语句1:主机名称172.23.100.17、端口3306、数据库名sns_01、表sns_blogs
DDL语句2:主机名称172.23.100.17、端口3306、数据库名sns_01、表sns_groups。
在本申请的一种优选实施例中,所述步骤102可以包括:
子步骤S21、将所述变更操作拆分为多个子操作,并提取出对数据库对象进行修改、结构变更和删除的子操作;
子步骤S22、利用正则表达式,对提取的各个子操作进行正则匹配,得出各个子操作对应的属性信息,其中,所述主机名称在提交所述变更操作的同时提交。
由于变更操作可能会涉及到对多个不同的数据库对象的进行变更的多个操作,因此,还需要将变更操作拆分为多个子操作。对于数据表而言,即是将变更语句拆分为单个操作的DDL语句,然后提取出其中对数据库对象进行修改,结构变更和删除的语句,因为这些语句才会对依赖***造成影响。
由于每个DDL语句都有可能会对依赖***带来影响,所以拆分出来的数据是循环判定的。首先判断各个DDL语句中是否alter table类型的操作,那么就是对表要进行修改,再看该语句中是否包含关键词add、drop或rename,若是,则表示该语句的确对表结构进行变化;如果该语句并非altertable类型,那么就看语句是否包含关键词drop table或turncate,如果是,则进行表的删除或数据删除操作。
变更操作一般会包含有多个语句,这些语句可能会操作多个主机多个库多个表,在具体执行的时候,是将它们拆分开来执行的,如下例:
Use db1;
Create table test1(id bigint);
Create table test2(id bigint,name varchar(32));
drop table test3。
按照操作对象的不同,上述变更操作可以被依次拆分为4个DDL语句,分别对应着如下的操作:
第一步:切换到db1库操作;
第二步:创建表test1,包含列id类型bigint,其他属性默认;
步骤三:创建表test2,包含列id和name,属性分别是bigint和varchar,name长度为32;
步骤四:丢弃表test3。
在判断的过程中,首先判断上述DDL语句中并不是alter table类型的操作,因此也不会含关键词add、drop或rename中的任一个;然后判断上述DDL语句中包含关键词drop table,因此,上述DDL语句中包含了对表的删除操作,可以将drop table test3这个语句提取出来,进行进一步的分析。
本申请利用正则表达式对于拆分出来的各个子操作进行匹配,利用正则匹配有效对大批量DDL语句进行划分和过滤,能精准提取各个子操作中的属性信息。
数据库是有主、备的关系,可以认为主、备的结构和数据是一样的。变更操作必须针对主库中的数据库对象进行变更,对主库信息进行修改后,会自动对备库信息进行更新,但由于依赖***既可以从主库也可以从备库上提取信息,不一定从主库上提取信息,因此,对于依赖备库的依赖***,依赖关系的属性信息中还会包括备库名称,所以需要进一步提取较为完整的主备关系,得出一个变更对应影响的主库和备库信息。在本申请中,主库和备库的对应关系可以保存在数据库监控平台中。
所述步骤102还可以包括:
子步骤S23、在数据库监控平台中提取主库和备库的对应表;
子步骤S24、依据所述对应表和主库名称,得出各个子操作对应的主机名称、端口、数据库名称和数据表名,其中,数据库名称包括主库名称和备库名称。
依据上述步骤中得出的各个子操作对应的主机名称、端口、主库名称和数据表名,以及数据库监控平台中主库和备库的对应关系,可以进一步得出,各个子操作对应的主机名称、端口、主库名称、备库名称和数据表名的对应关系。
在具体的实现中,所述步骤102还可以包括:
子步骤S25、修正所述变更操作中的目标字符。
变更操作中可能会存在一些特殊的字符需要处理,将这些特殊字符作为目标字符,在拆分变更操作为多个子操作之前,需要针对执行脚本中分析若存在目标字符,则需要进行修正,得到较为标准的语句。特殊字符包括如下两种情况:
1、分号
在具体的实现中,由于多个DDL语句是同时提交的,所以多个语句之间就有分隔符号,例如,SQL(Structured Query Language,结构化查询语言)语句默认的分隔符号是“;”,如果DDL语句内容中本身也存在“;”那么在按照分隔符拆分语句时,就可能拆分错误。
对于结构变更语句(包含create table、alter table、drop table等关键词)中,如果在语句内容中出现分号,检测出来后,可以将这个分号,替换为逗号或其他符号,使得拆分出错的问题得以解决。
如下例:
create table abc(
id bigint,
ss_desc varchar(400)comment‘1:XXX;2ddd;DD”D’
)
可以将其中的分号修正为逗号:
create table abc(
id bigint,
ss_desc varchar(400)comment‘1:XXX,2ddd;DD”D’
)
对于订正语句(包含insert、update、delete等关键词),就是对数据库数据内容进行修改的语句,此时不能修改原本的语句内容,可以对语句进行转义,将分号转为相应的ascii码值,例如分号的ascii码为59。
例如:
Insert into abc(id,ss_desc)
Values(1,‘abc;ddd’);
如果在mysql(关联数据库管理***)中会被转义为:
Insert into abc(id,ss_desc)
Values(1,concat(‘abc’,char(59),’ddd’));
在oracle数据库中会被转义为:
Insert into abc(id,ss_desc)
Values(1,‘abc’||chr(59)||’ddd’);
2、其他
由于数据库对象的变更操作可以同时在多台机器上运行,中间存在如/**/--#这类符号包含的数据,会被认为是注释信息,这些内容不是语句中的内容,主要是方便审核和查看,和***无关,也不是DDL语句所要执行内容,本申请对于此类的符号可以直接做删除处理,和执行内容放在一起会使得执行内容报错。
步骤103、判断所述依赖关系中,是否包含请求变更的数据库对象的属性信息,若是,则执行步骤104。
通过步骤101收集了依赖***与所依赖的数据库对象的对应关系,以及数据库对象的属性信息;通过步骤102得到了变更操作所针对的数据库对象的属性信息。若依赖关系中存在变更操作所涉及的数据库对象,说明此次变更操作所针对的数据库对象存在相应的依赖***,那么此次变更就会对依赖***产生影响。
具体的,可以依据数据库对象的属性信息来进行判断,依赖关系中包含了依赖***所依赖的数据库对象的属性信息,若收集的依赖关系中,包含了请求变更的数据库对象的属性信息,则说明本次变更会对依赖***产生影响。
如下例收集的依赖关系:
DB主机:172.23.100.17、DB端口:3306、DB库名:sns_01、DB表名:sns_blog_[0000-0255]、依赖库:ABC、依赖目标表:XXX。
该依赖关系表示依赖库ABC和依赖目标表XXX,依赖于数据库sns_01中的数据表sns_blog_[0000-0255],该数据表的DB主机为172.23.100.17、DB端口为3306。
提交的变更操作如下:
在172.23.100.17:3306sns_01库执行:Create table sns_blogs(id number,name varchar2(32));
解析变更操作得出请求变更的数据库对象的属性信息如下:
主机名称172.23.100.17、端口3306、数据库名sns_01、表sns_blogs
将解析得到的属性信息与依赖关系进行对照,可以发现主机名称、端口、数据库名和表名,均包含在上述上述依赖关系中。
步骤104、向对应的数据库依赖***发送变更提示信息,并执行所述对数据库对象的变更操作。
由于依赖关系中保存了依赖***和其所依赖的数据库对象的对应的关系,因此,可以向对应的依赖***发送提示信息。具体的,所述变更提示信息可以包括请求变更的数据库对象的属性信息,以及所述变更操作的链接,依赖***接收到变更提示信息后,可以依据数据库对象的属性信息,找到相应的数据库对象,并依据变更操作的链接,进行相应的变更操作。
参考图2,其示出了本申请的一种数据库对象的变更方法实施例2的流程图,具体可以包括以下步骤:
步骤201、收集数据库依赖***与数据库对象的依赖关系,所述依赖关系中包括依赖***与所依赖的数据库对象的对应关系,以及所述数据库对象的属性信息。
步骤202、对所述属性信息中的数据表名进行格式转换。
在数据库中,存在大量的分库分表,每个表会被拆分为几千个表,所以不论在写DDL脚本还是在配置数据时,每天语句如果不做处理,就会变成几千条语句,这样书写代价和评审代价都是很高的,由于这些分表的结构都是一摸一样的(只有名称后缀有变化),所以在配置和变更单编写时可以采用一些简易写法,例如:
Create table user_info_[0000-1023](.....)
这样就可以代表1024个表的创建,评审人员可以一目了然,也有逐个编写的,以及跳跃式的如:
Create table user_info_[0,3,5,7,9](.....)
等等写法不一,但是最终拿到数据库中执行时,相应的数据库名称会和数据库中的表名保持一致。因此,需要进一步进行转换为可进行快速匹配的实际数据的格式。
例如,对Create table test_[0000-0255](id bigint)中的数据表名进行格式转换后可以得到256条语句:
Create table test_0000(id bigint);
Create table test_0001(id bigint);
Create table test_0002(id bigint);
Create table test_0255(id bigint)。
不论书写格式是什么样,转换后都转换为一种统一的标准格式存放在内存中,在判断属性信息是否一致的时候,就不用考虑是什么书写格式,转换为同一的格式,不论是分表还是单表都能得到准确的匹配,大大提高了分析的效率。
步骤203、按照预设hash算法,对格式转换后的数据表名取hash值作为key,将主机名称、数据库名称和端口作为value,以key-value的数据结构存储在哈希表中。
哈希表(Hashmap)是一种数据存放结构,具备高效查找的特征。例如,若每个物品有一个数字标号ID,从1开始自动增长,此时,根据物品的ID查找物品的内容信息,如果是从1开始逐个匹配,如果数据量比较大,匹配过程就会非常慢而且极度消耗性能。Hash算法就是将这些ID进行散列,例如,以数组10为基数,此时ID为1、11、21、31等等数据就会放在第一个数组下标中,Hashmap内部一般是使用链表存储,若要进一步优化就可以使用范围存储更加细化定位。
本申请中,收集的依赖关系可以存储在内存的哈希表(HashMap)中。使用预先定义的内存hash来提高匹配的性能,所有的匹配过程都不依赖于文件***和数据库本身,这大大提高了匹配的速度。
HashMap中的数据以Key-Value的数据结构存放,其中,Key是通过预设的hash算法,对转换格式后的数据表名计算出来的。
例如,对字符串的ascii值进行拼接,即将每个表名的一串字符串的数字叠加起来,然后与预置的一个Hash的基本数组大小进行取模,得到所存放的Hash数组(即哈希桶)的下标。例如:Hash桶个数为100,编号从0-99,那么任意数字和100取模就能得到0-99之间的数字,对应的就是Hash桶的编号,可以将查找范围直接缩小一百倍。并且随着数据量增大,每次计算缩小的范围也会随着桶的个数增加而增加,也就是不会随着数据量增加。
以下例的依赖关系来说明依据数据表名计算key的过程:
DB主机:172.23.100.17、DB端口:3306、DB库名:sns_01、DB表名:abc_table、依赖库:ABC、依赖目标表:XXX。
表名包括12个字符,对应的每个字符的ascii列表为:
字符 | a | b | c | - | t | a | b | l | e |
ascii码 | 97 | 98 | 99 | 95 | 116 | 97 | 98 | 108 | 101 |
将其叠加起来为:key=97+98+99+95+116+97+98+108+10=909。如果此时Hash数组有10个,那么将909%10得到下标为9(下标为0-9),那么此时就在下标为9的哈希桶里可以找到相应的value值,包括DB主机172.23.100.17、DB端口3306、DB库名sns_01。
以主机名称、数据库名称和端口作为value,上例中的value包括DB主机172.23.100.17、DB端口3306、DB库名sns_01。在具体的实现中,依赖关系中还可以包括依赖库对数据表的调用信息,例如,对所依赖的数据表的最后使用时间为2012-12-21、所属类型为DW|SEARCH、同步类型为datax、dbsync、drc等信息,这些也可以作为value的一部分。
步骤204、接收并解析对数据库对象的变更操作,得到请求变更的数据库对象的属性信息;
步骤205、判断所述依赖关系中,是否包含请求变更的数据库对象的属性信息,若是,则执行步骤206和207,若否,则执行步骤207。
步骤206、向对应的数据库依赖***发送变更提示信息;
步骤207、执行所述对数据库对象的变更操作。
在本申请的一种优选实施例中,所述步骤103可以包括:
子步骤S31、用于提取解析出的属性信息中的数据表名,按照预设hash算法,将所述数据表名转换为hash值;
子步骤S32、在哈希表中搜索与所述hash值相同的key,若存在,则判断所述变更操作中的其余属性信息,是否包含该key对应的value,若一致,则判定所述依赖关系中包含请求变更的数据库对象的属性信息。
在对比收集的依赖关系与变更操作中的属性信息时,需要在依赖关系中查找同样的数据,利用本申请,使用同样的算法对属性信息中数据表名取Hash值,就可以快速得到在哪一个数组下标下面,进而缩小很大的范围,然后直接对比value是否一致即可,查找速度非常快,进而可以提高分析的效率。
HashMap提前预置,放入到内存中,key对应了所有可能影响的表,由于依赖关系的更新不是特别频繁,所以这个内存结构很少发生变动,因此,只要Hashmap中能查找到,则是有影响的,查找不到是没有影响的。依据本申请对变更操作进行分析,平均每次变更分析时间可以保持在30ms以内。
本申请相应的程序可以使用计算机语言中的java语言,需配合java虚拟机环境,OS及硬件环境不需要太多要求,只需要该主机支持安装java虚拟机即可,程序由于使用java编写,所以可以做到跨平台分析。
综上所述,依据本申请,预先收集数据库依赖***与数据表的依赖关系,依赖关系中包含数据表的属性,然后判断提交的数据库对象变更操作中,是否也包含这些信息,若包含,则说明对该依赖表的修改操作会影响依赖***,可以向依赖表对应的依赖***发送提示信息,使得数据库中的数据表结构发生变化时,自动分析变更任务所涉及到的依赖***,可以对依赖***中的相应的数据表做变更。
其次,本申请将收集的依赖关系以key-value的数据结构保存在hash表中,以key为标识快速查找到对应的数据表,然后对比value即可完成分析,大大提高了分析效率。
对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
参考图3,其示出了本申请的一种数据库对象的变更装置实施例1的结构框图,具体可以包括以下模块:
依赖关系收集模块301,用于收集数据库依赖***与数据库对象的依赖关系,所述依赖关系中包括依赖***与所依赖的数据库对象的对应关系,以及所述数据库对象的属性信息;
变更操作解析模块302,用于接收并解析对数据库对象的变更操作,得到请求变更的数据库对象的属性信息;
判断模块303,用于判断所述依赖关系中,是否包含请求变更的数据库对象的属性信息,若是,则执行提示信息发送模块和变更模块;
提示信息发送模块304,用于向对应的数据库依赖***发送变更提示信息;
变更模块305,用于执行所述对数据库对象的变更操作。
在具体的实现中,变更***和数据库管理平台可以位于同一个设备或是共享同一服务器,变更***可以将内容存储在本地,然后由数据库任务管理平台进行分析;由于变更***和数据库任务管理平台是相互独立的,因此,也可以在远程的变更***提交对数据库对象的变更操作,变更***通知数据库任务管理平台要求进行分析,数据库任务管理平台进行远程DDL语句的读取,具体的,可以使用HttpClient中读取变更内容;若DDL语句数据量比较大,可以采用附件上传的方式,使用URLConnection来进行远程附件的内容读取。
在本申请的一种优选实施例中,所述数据库对象可以为数据表,所述变更操作为数据表结构操作,所述数据库依赖***可以包括数据仓库和搜索***。所述属性信息可以包括主机名称、端口、数据库名称和数据表名。
在本申请的一种优选实施例中,所述依赖关系收集模块可以包括:
依赖关系记录提取子模块,用于在数据仓库和搜索***中,分别提取对数据库对象的依赖关系记录。
所述收集的依赖关系可以存储在内存的哈希表中。
在本申请的一种优选实施例中,所述变更操作解析模块可以包括:
拆分子模块,用于将所述变更操作拆分为多个子操作,并提取出对数据库对象进行修改、结构变更和删除的子操作;
正则匹配子模块,用于利用正则表达式,对提取的各个子操作进行正则匹配,得出各个子操作对应的属性信息,其中所述主机名称在提交所述变更操作的同时提交。
在本申请的一种优选实施例中,所述属性信息中的数据库名称为主库名称,所述解析模块还可以包括:
主备对应表提取模块,用于在数据库监控平台中提取主库和备库的对应表;
主备库确定子模块,用于依据所述对应表和主库名称,得出各个子操作对应的主机名称、端口、数据库名称和数据表名,其中,数据库名称包括主库名称和备库名称。
在本申请的一种优选实施例中,所述变更操作解析模块还可以包括:
目标字符修正模块,用于修正所述变更操作中的目标字符。
在具体的实现中,所述依赖关系收集模块可以按照预设频率执行。
参考图4,其示出了本申请的一种数据库对象的变更装置实施例2的结构框图,具体可以包括以下模块:
依赖关系收集模块401,用于收集数据库依赖***与数据库对象的依赖关系,所述依赖关系中包括依赖***与所依赖的数据库对象的对应关系,以及所述数据库对象的属性信息;
格式转换模块402,用于对所述属性信息中的数据表名进行格式转换;
存储模块403,用于按照预设hash算法,对格式转换后的数据表名取hash值作为key,将主机名称、数据库名称和端口作为value,以key-value的数据结构存储在哈希表中。
变更操作解析模块404,用于接收并解析对数据库对象的变更操作,得到请求变更的数据库对象的属性信息;
判断模块405,用于判断所述依赖关系中,是否包含请求变更的数据库对象的属性信息,若是,则执行提示信息发送模块406和变更模块407,若否,则执行变更模块407;
提示信息发送模块406,用于向对应的数据库依赖***发送变更提示信息;
变更模块407,用于执行所述对数据库对象的变更操作。
在本申请的一种优选实施例中,所述判断模块405可以包括:
Hash转换子模块,用于提取解析出的属性信息中的数据表名,按照预设hash算法,将所述数据表名转换为hash值;
搜索子模块,用于在哈希表中搜索与所述hash值相同的key,若存在,则判断所述变更操作中的其余属性信息,是否包含该key对应的value,若一致,则判定所述依赖关系中包含请求变更的数据库对象的属性信息。
在本申请的一种优选实施例中,所述变更提示信息可以包括请求变更的数据库对象的属性信息,以及所述变更操作的链接。
由于所述装置实施例基本相应于前述图1和图2所示的方法实施例,故本实施例的描述中未详尽之处,可以参见前述实施例中的相关说明,在此就不赘述了。
本申请可用于众多通用或专用的计算***环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器***、基于微处理器的***、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何***或设备的分布式计算环境等等。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本申请所提供的一种数据库对象的变更方法,以及,一种数据库对象的变更装置进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (14)
1.一种数据库对象的变更方法,其特征在于,包括:
收集数据库依赖***与数据库对象的依赖关系,所述依赖关系中包括依赖***与所依赖的数据库对象的对应关系,以及所述数据库对象的属性信息;
接收并解析对数据库对象的变更操作,得到请求变更的数据库对象的属性信息;
判断所述依赖关系中,是否包含请求变更的数据库对象的属性信息;
若是,则向对应的数据库依赖***发送变更提示信息,并执行所述对数据库对象的变更操作。
2.如权利要求1所述的方法,其特征在于,所述数据库对象为数据表,所述变更操作为数据表结构操作,所述数据库依赖***包括数据仓库和搜索***。
3.如权利要求2所述的方法,其特征在于,所述属性信息包括主机名称、端口、数据库名称和数据表名。
4.如权利要求3所述的方法,其特征在于,所述收集数据库依赖***与数据库对象的依赖关系的步骤为,
在数据仓库和搜索***中,分别提取对数据库对象的依赖关系记录。
5.如权利要求4所述的方法,其特征在于,所述收集的依赖关系存储在内存的哈希表中。
6.如权利要求5所述的方法,其特征在于,还包括:
对所述属性信息中的数据表名进行格式转换;
按照预设hash算法,对格式转换后的数据表名取hash值作为key,将主机名称、数据库名称和端口作为value,以key-value的数据结构存储在哈希表中。
7.如权利要求3所述的方法,其特征在于,所述解析对数据库对象的变更操作,得到请求变更的数据库对象的属性信息的步骤包括:
将所述变更操作拆分为多个子操作,并提取出对数据库对象进行修改、结构变更和删除的子操作;
利用正则表达式,对提取的各个子操作进行正则匹配,得出各个子操作对应的属性信息,其中所述主机名称在提交所述变更操作的同时提交。
8.如权利要求7所述的方法,其特征在于,所述属性信息中的数据库名称为主库名称,所述解析对数据库对象的变更操作,得到请求变更的数据库对象的属性信息的步骤还包括:
在数据库监控平台中提取主库和备库的对应表;
依据所述对应表和主库名称,得出各个子操作对应的主机名称、端口、数据库名称和数据表名,其中,数据库名称包括主库名称和备库名称。
9.如权利要求7或8所述的方法,其特征在于,所述解析对数据库对象的变更操作,得到请求变更的数据库对象的属性信息的步骤还包括:
修正所述变更操作中的目标字符。
10.如权利要求1所述的方法,其特征在于,所述收集数据库依赖***与数据库对象的依赖关系的步骤按照预设频率执行,并依据最新一次收集的依赖关系进行更新。
11.如权利要求1所述的方法,其特征在于,还包括:
若否,则执行所述对数据库对象的变更操作。
12.如权利要求6所述的方法,其特征在于,所述判断所述依赖关系中,是否包含请求变更的数据库对象的属性信息的步骤包括:
提取解析出的属性信息中的数据表名,按照预设hash算法,将所述数据表名转换为hash值;
在哈希表中搜索与所述hash值相同的key,若存在,则判断所述变更操作中的其余属性信息,是否包含该key对应的value;
若一致,则判定所述依赖关系中包含请求变更的数据库对象的属性信息。
13.如权利要求1所述的方法,其特征在于,所述变更提示信息包括请求变更的数据库对象的属性信息,以及所述变更操作的链接。
14.一种数据库对象的变更装置,其特征在于,包括:
依赖关系收集模块,用于收集数据库依赖***与数据库对象的依赖关系,所述依赖关系中包括依赖***与所依赖的数据库对象的对应关系,以及所述数据库对象的属性信息;
变更操作解析模块,用于接收并解析对数据库对象的变更操作,得到请求变更的数据库对象的属性信息;
判断模块,用于判断所述依赖关系中,是否包含请求变更的数据库对象的属性信息,若是,则执行提示信息发送模块和变更模块;
提示信息发送模块,用于向对应的数据库依赖***发送变更提示信息;
变更模块,用于执行所述对数据库对象的变更操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210398278.XA CN103778133A (zh) | 2012-10-18 | 2012-10-18 | 一种数据库对象的变更方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210398278.XA CN103778133A (zh) | 2012-10-18 | 2012-10-18 | 一种数据库对象的变更方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103778133A true CN103778133A (zh) | 2014-05-07 |
Family
ID=50570377
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210398278.XA Pending CN103778133A (zh) | 2012-10-18 | 2012-10-18 | 一种数据库对象的变更方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103778133A (zh) |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104112016A (zh) * | 2014-07-18 | 2014-10-22 | 北京京东尚科信息技术有限公司 | 变更数据表结构的方法 |
CN104699811A (zh) * | 2015-03-23 | 2015-06-10 | 重庆广播电视大学 | 一种无侵入式表单数据变化记录和回溯的方法及装置 |
WO2016192583A1 (zh) * | 2015-06-04 | 2016-12-08 | 阿里巴巴集团控股有限公司 | 数据仓库的数据处理方法及装置 |
CN107180053A (zh) * | 2016-03-11 | 2017-09-19 | ***通信集团河北有限公司 | 一种数据仓库优化方法和装置 |
CN107357910A (zh) * | 2017-07-18 | 2017-11-17 | 郑州云海信息技术有限公司 | 一种数据对比的方法及装置 |
CN108415998A (zh) * | 2018-02-24 | 2018-08-17 | 平安科技(深圳)有限公司 | 应用依赖关系更新方法、终端、设备及存储介质 |
CN109697068A (zh) * | 2017-10-24 | 2019-04-30 | 中移(苏州)软件技术有限公司 | 一种分库分表模式下逻辑sql语句翻译方法和装置 |
CN110262803A (zh) * | 2019-06-30 | 2019-09-20 | 潍柴动力股份有限公司 | 一种依赖关系的生成方法及装置 |
CN110879801A (zh) * | 2019-11-21 | 2020-03-13 | 中国银行股份有限公司 | 一种数据读取方法及装置 |
CN110968569A (zh) * | 2019-12-19 | 2020-04-07 | 广州品唯软件有限公司 | 数据库的管理方法、数据库的管理装置及存储介质 |
CN111104409A (zh) * | 2019-12-25 | 2020-05-05 | 上海米哈游天命科技有限公司 | 一种数据库处理方法、装置、存储介质及电子设备 |
CN111651431A (zh) * | 2020-06-09 | 2020-09-11 | 中国雄安集团数字城市科技有限公司 | 一种面向数据库服务的管理流程标准化方法 |
CN112016982A (zh) * | 2020-08-19 | 2020-12-01 | 云账户技术(天津)有限公司 | 一种开票金额的计算方法及装置 |
CN112115125A (zh) * | 2020-09-27 | 2020-12-22 | 北京人大金仓信息技术股份有限公司 | 数据库访问对象名称解析方法、装置及电子设备 |
CN112347202A (zh) * | 2020-11-27 | 2021-02-09 | 中国工商银行股份有限公司 | 一种数据变更消息的通知方法及装置 |
-
2012
- 2012-10-18 CN CN201210398278.XA patent/CN103778133A/zh active Pending
Cited By (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104112016B (zh) * | 2014-07-18 | 2017-10-03 | 北京京东尚科信息技术有限公司 | 变更数据表结构的方法 |
CN104112016A (zh) * | 2014-07-18 | 2014-10-22 | 北京京东尚科信息技术有限公司 | 变更数据表结构的方法 |
CN104699811A (zh) * | 2015-03-23 | 2015-06-10 | 重庆广播电视大学 | 一种无侵入式表单数据变化记录和回溯的方法及装置 |
CN104699811B (zh) * | 2015-03-23 | 2018-02-23 | 重庆广播电视大学 | 一种无侵入式表单数据变化记录和回溯的方法及装置 |
CN106294478B (zh) * | 2015-06-04 | 2019-11-08 | 阿里巴巴集团控股有限公司 | 数据仓库的数据处理方法及装置 |
WO2016192583A1 (zh) * | 2015-06-04 | 2016-12-08 | 阿里巴巴集团控股有限公司 | 数据仓库的数据处理方法及装置 |
CN106294478A (zh) * | 2015-06-04 | 2017-01-04 | 阿里巴巴集团控股有限公司 | 数据仓库的数据处理方法及装置 |
CN107180053A (zh) * | 2016-03-11 | 2017-09-19 | ***通信集团河北有限公司 | 一种数据仓库优化方法和装置 |
CN107180053B (zh) * | 2016-03-11 | 2020-10-20 | ***通信集团河北有限公司 | 一种数据仓库优化方法和装置 |
CN107357910A (zh) * | 2017-07-18 | 2017-11-17 | 郑州云海信息技术有限公司 | 一种数据对比的方法及装置 |
CN109697068A (zh) * | 2017-10-24 | 2019-04-30 | 中移(苏州)软件技术有限公司 | 一种分库分表模式下逻辑sql语句翻译方法和装置 |
WO2019161620A1 (zh) * | 2018-02-24 | 2019-08-29 | 平安科技(深圳)有限公司 | 应用依赖关系更新方法、终端、设备及存储介质 |
CN108415998A (zh) * | 2018-02-24 | 2018-08-17 | 平安科技(深圳)有限公司 | 应用依赖关系更新方法、终端、设备及存储介质 |
CN110262803B (zh) * | 2019-06-30 | 2023-04-18 | 潍柴动力股份有限公司 | 一种依赖关系的生成方法及装置 |
CN110262803A (zh) * | 2019-06-30 | 2019-09-20 | 潍柴动力股份有限公司 | 一种依赖关系的生成方法及装置 |
CN110879801A (zh) * | 2019-11-21 | 2020-03-13 | 中国银行股份有限公司 | 一种数据读取方法及装置 |
CN110968569A (zh) * | 2019-12-19 | 2020-04-07 | 广州品唯软件有限公司 | 数据库的管理方法、数据库的管理装置及存储介质 |
CN110968569B (zh) * | 2019-12-19 | 2023-12-29 | 广州品唯软件有限公司 | 数据库的管理方法、数据库的管理装置及存储介质 |
CN111104409A (zh) * | 2019-12-25 | 2020-05-05 | 上海米哈游天命科技有限公司 | 一种数据库处理方法、装置、存储介质及电子设备 |
CN111651431A (zh) * | 2020-06-09 | 2020-09-11 | 中国雄安集团数字城市科技有限公司 | 一种面向数据库服务的管理流程标准化方法 |
CN112016982A (zh) * | 2020-08-19 | 2020-12-01 | 云账户技术(天津)有限公司 | 一种开票金额的计算方法及装置 |
CN112115125A (zh) * | 2020-09-27 | 2020-12-22 | 北京人大金仓信息技术股份有限公司 | 数据库访问对象名称解析方法、装置及电子设备 |
CN112115125B (zh) * | 2020-09-27 | 2024-04-26 | 北京人大金仓信息技术股份有限公司 | 数据库访问对象名称解析方法、装置及电子设备 |
CN112347202A (zh) * | 2020-11-27 | 2021-02-09 | 中国工商银行股份有限公司 | 一种数据变更消息的通知方法及装置 |
CN112347202B (zh) * | 2020-11-27 | 2023-12-29 | 中国工商银行股份有限公司 | 一种数据变更消息的通知方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103778133A (zh) | 一种数据库对象的变更方法及装置 | |
JP6617117B2 (ja) | 半構造データのためのスケーラブルな分析プラットフォーム | |
US10983967B2 (en) | Creation of a cumulative schema based on an inferred schema and statistics | |
CN108874971B (zh) | 一种应用于海量标签化实体数据存储的工具和方法 | |
CN106897322B (zh) | 一种数据库和文件***的访问方法和装置 | |
US10565208B2 (en) | Analyzing multiple data streams as a single data object | |
US10268645B2 (en) | In-database provisioning of data | |
CN111767303A (zh) | 一种数据查询方法、装置、服务器及可读存储介质 | |
CN107408114B (zh) | 基于事务访问模式识别联结关系 | |
CN104881424A (zh) | 一种基于正则表达式的电力大数据采集、存储及分析方法 | |
CN106708993A (zh) | 基于大数据技术的空间数据存储处理中间件框架实现方法 | |
CN104866580A (zh) | 一种数据库变更对现有业务影响的快速侦测方法 | |
CN104239377A (zh) | 跨平台的数据检索方法及装置 | |
CN103970902A (zh) | 一种大量数据情况下的可靠即时检索方法及*** | |
CN114116716A (zh) | 一种层次数据检索方法、装置和设备 | |
CN105493028A (zh) | 用于云分析的数据一致性和回退 | |
Jewell et al. | Performance and capacity implications for big data | |
CN106055678A (zh) | 一种基于hadoop的全景大数据分布式存储方法 | |
US20190311051A1 (en) | Virtual columns to expose row specific details for query execution in column store databases | |
CN104714974A (zh) | 一种查询语句解析与再处理的方法和装置 | |
CN114297173A (zh) | 一种面向大规模海量数据的知识图谱构建方法和*** | |
CN113821573A (zh) | 海量数据快速检索服务构建方法、***、终端及存储介质 | |
KR101955376B1 (ko) | 비공유 아키텍처 기반의 분산 스트림 처리 엔진에서 관계형 질의를 처리하는 방법, 이를 수행하기 위한 기록 매체 및 장치 | |
CN111125045B (zh) | 一种轻量级etl处理平台 | |
CN104408097A (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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20140507 |