一种数据库同步方法及装置转让专利

申请号 : CN201210011419.8

文献号 : CN102426611B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李擎梁

申请人 : 广州从兴电子开发有限公司

摘要 :

本发明提供了一种数据库同步方法及与方法对应的装置,用于将第一数据库的内容同步到第二数据库中,所述方法包括:建立与所述第二数据库对应的哈希表,所述哈希表中的每个关键字-哈希值对与所述第二数据库中的每条数据一一对应;获取所述第一数据库中的数据对应的关键字;当所述第一数据库中数据对应的关键字包含在所述哈希表中时,利用与所述关键字对应的哈希值比较所述第一数据库中与所述关键字对应的数据和第二数据库中与所述关键字对应的数据是否相同,若不相同,则将所述第一数据库中与所述关键字对应的数据同步到所述第二数据库中,从而避免了数据库同步中的手工环节,提高了同步的准确性。

权利要求 :

1.一种数据库同步方法,用于将第一数据库的内容同步到第二数据库中,其特征在于,包括:获取所述第二数据库中每条数据对应的关键字,并将所述数据的内容作为与所述关键字对应的哈希值;

将所述关键字及与其对应的哈希值作为关键字-哈希值对,存储到预设表中,作为与所述第二数据库对应的哈希表;

所述哈希表中的每个所述关键字-哈希值对与所述第二数据库中的每条数据一一对应;

获取所述第一数据库中的数据对应的关键字;

当所述第一数据库中数据对应的关键字包含在所述哈希表中时,利用与所述关键字对应的哈希值比较所述第一数据库中与所述关键字对应的数据和第二数据库中与所述关键字对应的数据是否相同,若不相同,则将所述第一数据库中与所述关键字对应的数据同步到所述第二数据库中。

2.根据权利要求1所述的方法,其特征在于,所述将第一数据库中与所述关键字对应的数据同步到所述第二数据库中包括:将所述第一数据库中与所述关键字对应的数据使用由结构化查询语言组成的语句写入到所述第二数据库中。

3.根据权利要求1所述的方法,其特征在于,还包括:

当所述第一数据库中数据对应的关键字不包含在所述哈希表中时,则将第一数据库中所述关键字对应的数据插入到所述第二数据库中。

4.根据权利要求1所述的方法,其特征在于,还包括:

当所述哈希表中的关键字不包含在所述第一数据库中数据对应的全部关键字中时,删除所述第二数据库中所述关键字对应的数据。

5.根据权利要求1所述的方法,其特征在于,在所述建立与所述第二数据库对应的哈希表之前,还包括:将所述第一数据库中的数据和所述第二数据库中的数据转换为相同的格式。

6.一种数据库同步装置,其特征在于,包括:

哈希表创建模块,用于获取第二数据库中每条数据对应的关键字,并将所述数据的内容作为与所述关键字对应的哈希值,将所述关键字及与其对应的哈希值作为关键字-哈希值对,存储到预设表中,作为与所述第二数据库对应的哈希表,所述哈希表中的每个关键字-哈希值对与所述第二数据库中的每条数据一一对应;

关键字获取模块,用于获取第一数据库中的数据对应的关键字;

同步模块,用于当所述第一数据库中数据对应的关键字包含在所述哈希表中时,利用与所述关键字对应的哈希值比较所述第一数据库中与所述关键字对应的数据和第二数据库中与所述关键字对应的数据是否相同,若不相同,将所述第一数据库中所述关键字对应的数据同步到所述第二数据库中。

7.根据权利要求6所述的装置,其特征在于,还包括:

新数据插入模块,用于当所述第一数据库中数据对应的关键字不包含在所述哈希表中时,则将第一数据库中所述关键字对应的数据插入到所述第二数据库中。

8.根据权利要求6所述的装置,其特征在于,还包括:

删除模块,用于当所述哈希表中的关键字不包含在所述第一数据库中数据对应的全部关键字中时,删除所述第二数据库中所述关键字对应的数据。

9.根据权利要求6所述的装置,其特征在于,还包括:

格式转换模块,用于将所述第一数据库中的数据和所述第二数据库中的数据转换为相同的格式。

说明书 :

一种数据库同步方法及装置

技术领域

[0001] 本发明涉及数据库领域,尤其涉及一种数据库同步方法及装置。

背景技术

[0002] 数据库是存储在一起的相关数据的集合,这些数据是结构化的,并为多种应用服务。按照不同的标准,可以将数据库进行分类,例如IBM的Informix数据库和ORACLE的TimesTen数据库。而这些不同的类型的数据库之间是没有同步接口的,所以如果要同步不同类型数据库的内容,一般需要采用以下方式:以将Informix同步到TimesTen为例,首先需要维护人员导出Informix中的数据,然后将导出的数据按照TimesTen数据的格式,转化为能够插入TimesTen数据库的使用结构化查询语言(Structured Query Language,SQL)做成的语句,最后将原有的TimesTen数据库中的内容清空,插入组成的SQL语句,完成更新。
[0003] 以上数据库同步中导出数据、生成SQL、清空数据库及插入SQL语句的过程之间不能连贯进行,而都需要人为的参与,所以,现有的数据库同步方法涉及的手工环节多,容易出错,所以导致同步的准确性低。

发明内容

[0004] 有鉴于此,本发明提供了一种数据库同步方法及装置,目的在于解决现有的数据库同步方法因手工环节多而导致的同步准确性低的问题。
[0005] 一种数据库同步方法,用于将第一数据库的内容同步到第二数据库中,包括:
[0006] 建立与所述第二数据库对应的哈希表,所述哈希表中的每个关键字-哈希值对与所述第二数据库中的每条数据一一对应;
[0007] 获取所述第一数据库中的数据对应的关键字;
[0008] 当所述第一数据库中数据对应的关键字包含在所述哈希表中时,利用与所述关键字对应的哈希值比较所述第一数据库中与所述关键字对应的数据和第二数据库中与所述关键字对应的数据是否相同,若不相同,则将所述第一数据库中与所述关键字对应的数据同步到所述第二数据库中。
[0009] 优选地,所述建立与所述第二数据库对应的哈希表包括:
[0010] 获取所述第二数据库中每条数据对应的关键字,并将所述数据的内容作为与所述关键词对应的哈希值;
[0011] 将所述关键字及与其对应的哈希值作为关键字-哈希值对,存储到预设表中,作为与所述第二数据库对应的哈希表。
[0012] 优选地,所述将第一数据库中与所述关键字对应的数据同步到所述第二数据库中包括:
[0013] 将所述第一数据库中与所述关键字对应的数据使用由结构化查询语言组成的语句写入到所述第二数据库中。
[0014] 优选地,所述方法还包括:
[0015] 当所述第一数据库中数据对应的关键字不包含在所述哈希表中时,则将第一数据库中所述关键字对应的数据插入到所述第二数据库中。
[0016] 优选地,所述方法还包括:
[0017] 当所述哈希表中的关键字不包含在所述第一数据库中数据对应的全部关键字中时,删除所述第二数据库中所述关键字对应的数据。
[0018] 优选地,在所述建立与所述第二数据库对应的哈希表之前,还包括:
[0019] 将所述第一数据库中的数据和所述第二数据库中的数据转换为相同的格式。
[0020] 一种数据库同步装置,包括:
[0021] 哈希表创建模块,用于建立与所述第二数据库对应的哈希表,所述哈希表中的每个关键字-哈希值对与所述第二数据库中的每条数据一一对应;
[0022] 关键字获取模块,用于获取所述第一数据库中的数据对应的关键字;
[0023] 同步模块,用于当所述第一数据库中数据对应的关键字包含在所述哈希表中时,利用与所述关键字对应的哈希值比较所述第一数据库中与所述关键字对应的数据和第二数据库中与所述关键字对应的数据是否相同,若不相同,将所述第一数据库中所述关键字对应的数据同步到所述第二数据库中。
[0024] 优选地,所述装置还包括:
[0025] 新数据插入模块,用于当所述第一数据库中数据对应的关键字不包含在所述哈希表中时,则将第一数据库中所述关键字对应的数据插入到所述第二数据库中。
[0026] 优选地,所述装置还包括:
[0027] 删除模块,用于当所述哈希表中的关键字不包含在所述第一数据库中数据对应的全部关键字中时,删除所述第二数据库中所述关键字对应的数据。
[0028] 优选地,所述装置还包括:
[0029] 格式转换模块,用于将所述第一数据库中的数据和所述第二数据库中的数据转换为相同的格式。
[0030] 本发明实施例提供的数据库同步方法及装置,在将第一数据库中的数据同步到第二数据库时,将第二数据库中的数据对应到哈希表中,通过将代表第一数据库数据的关键字与哈希表中的关键字-哈希值对进行比较,即可判断出哪些数据需要同步,只将需要同步的数据在第二数据库中进行更新即可,而不再需要人为导出第一数据数据库的全部内容,也不再需要人为清空第二数据库,从而使得同步过程免去了过多的手工环节,增大了同步过程的连贯性,提高了数据库同步的准确性。

附图说明

[0031] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0032] 图1为本发明实施例公开的一种数据库同步方法的流程图;
[0033] 图2为本发明实施例公开的一种数据库同步装置的结构示意图。

具体实施方式

[0034] 本发明公开了用于数据库同步的方法及装置,在将第一数据库的内容同步到第二数据库中时,建立与所述第二数据库对应的哈希表,并获取所述第一数据库的数据对应的关键字,通过将所述关键字与所述哈希表中的关键字-哈希值对进行比较,确定需要同步的数据后进行同步,从而免去了传统的同步方法中的手工环节,提高了数据同步的准确性。
[0035] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0036] 本发明公开的一种数据同步方法,用于将第一数据库的内容同步到第二数据库中,在前台出发同步指令后,同步过程被触发,此时开始读取第一数据库和第二数据库中数据,同步过程如图1所示,包括步骤:
[0037] S101:建立与所述第二数据库对应的哈希表,所述哈希表中的每个关键字-哈希值对与所述第二数据库中的每条数据一一对应;
[0038] 其中,哈希表(Hash table)也称为散列表,是根据关键字-哈希值而直接进行访问的数据结构,也就是说将数据库中的数据结构映射到哈希表中的关键字-哈希值中,以加快查找的速度。
[0039] 本实施例中,建立与所述第二数据库对应的哈希表的过程为:
[0040] 获取所述第二数据库中每条数据对应的关键字,并将所述数据内容作为与所述关键字对应的哈希值;将所述关键字及与其对应的哈希值作为关键字-哈希值对存储到预设的表中,作为与所述第二数据库对应得哈希表。
[0041] 以第一数据库为Informix数据库,第二数据库为TimesTen数据库为例,将TimesTen数据库中的以一定格式表示的数据:
[0042] 0|13001000000|13001099999|010|2|2003-01-01|2099-12-31 00:00:00 中 唯一能够标识此条数据的字段13001000000|13001099999|2003-01-01 00:00:00作为关键字,此条数据的全部字段0|13001000000|13001099999|010|2|2003-01-01|2099-12-3100:00:00作为哈希值,组成与此条数据对应的关键字-哈希值对,将所述关键字-哈希值对存储到预设的表中,按照此例将第二数据库中的每条数据都进行相同的操作,即可建立与第二数据库对应的哈希表。
[0043] S102:获取与所述第一数据库中的数据对应的关键字;
[0044] 这里,第一数据库中每条数据的关键字的获取过程与第一数据库中关键字的获取过程相同,例如,Informix数据库中以一定格式表示的数据为:
[0045] 17136022|13001000000|13001099999|010|01|62|02|0|A2|200301|2003-01-0100:00:00|2012-01-01 00:00:00
[0046] 对应的关键字为13001000000|13001099999|2003-01-01 00:00:00。
[0047] S103:当所述第一数据库中数据对应的关键字包含在所述哈希表时,利用与所述关键字对应的哈希值比较所述第一数据库中与所述关键字对应的数据和第二数据库中与所述关键字对应的数据是否相同,若不相同,则将所述第一数据库中与所述关键字对应的数据同步到所述第二数据库中。
[0048] 其中,第一数据库中数据对应的关键字包含在哈希表中是指,第一数据库中数据对应的关键字,与哈希表中的关键字-哈希值对中的关键字相同,当关键字相同时,说明其对应的数据具有相似性,进一步地,再比较哈希值与第一数据库中对应的数据是否相同,如不同,则说明两者不相同。
[0049] 例如,上述第一数据库中的数据对应的关键字为13001000000|13001099999|2003-01-01 00:00:00,第二数据库中数据对应的关键字为13001000000|13001099999|2003-
01-01 00:00:00,通过比较,两者相同,及第一数据库中数据对应的关键字包含在了哈希表中,所以,进一步判断关键字对应的哈希值0|13001000000|13001099999|010|2|2003-01-0
1|2099-12-3100:00:00与第一数据库中关键字对应的数据17136022|13001000000|13001
099999|010|01|62|02|0|A2|200301|2003-01-0100:00:00|2012-01-01 00:00:00是否相同,可以看出,两者不同,这就说明同一关键字对应的数据在第一数据库中有所改变,所以,将此改变同步到第二数据库中。
[0050] 本实施例中,同步的过程为:
[0051] 将第一数据库中与所述关键字对应的数据使用由结构化查询语言组成的语句写入到所述第二数据库中。
[0052] 例如,上例中第一数据库数据的失效时间为2012-01-01 00:00:00,而第二数据库中数据的失效时间为2099-12-31 00:00:00,则产生的同步语句为:
[0053] Update abc set exp_date=‘2012-01-01 00:00:00’where
[0054] begin=‘13001000000’and last=‘13001099999’and
[0055] eff_data=‘2003-01-01 00:00:00’
[0056] 需要说明的是,无论是第一数据库还是第二数据库,其中包括的数据通常情况下都比较大,本实施例中的步骤S102和S103的执行方式有两种情况:
[0057] 第一种情况为,对于第一数据库的数据逐条执行S102和S103,即在获取当前数据的关键字后,接着针对此关键字执行S103;第二种情况为逐条获取第一数据库中每条数据的关键字后再执行S103,这时,是将两个关键字集合中的关键字进行逐一比对。
[0058] 本实施例公开的数据库同步方法,将第二数据库映射到哈希表中,从而免去了人工删除第二数据库中内容的环节,只将第一数据库中与第二数据库中不同的内容进行同步,也避免了手工导出第一数据库中数据的环节,所以,最大限度地减少了人工参与环节,提高了数据同步的准确性。
[0059] 进一步地,本实施例所述的方法,还包括:
[0060] 当所述第一数据库中数据对应的关键字不包含在所述哈希表中时,则将第一数据库中所述关键字对应的数据插入到所述第二数据库中。
[0061] 第一数据库中数据对应的关键字不包含在所述哈希表中,则说明所述数据相对于第二数据库来说,是全新的数据,则是需要同步的内容,将其插入到第二数据库中的方法可以采用前述的使用由结构化查询语言组成的插入语句进行。
[0062] 此方法在同步第二数据库原有数据的基础上,实现了将增量数据也进行同步的目的,而这在传统的数据库同步方法中是很难做到的。
[0063] 进一步地,本实施例所述的方法,还包括:
[0064] 当所述哈希表中的关键字不包含在所述第一数据库中数据对应的全部关键字中时,删除所述第二数据库中所述关键字对应的数据。
[0065] 也就是说,第一数据库中没有的数据,则第二数据库中也要删除,从而实现全面的同步。
[0066] 进一步地,本实施例中所述的方法,在建立与所述第二数据库对应的哈希表之前,还包括:
[0067] 将所述第一数据库中的数据和所述第二数据库中的数据转换为相同的格式,以更易于数据间的比较。
[0068] 需要强调的是,本实施例所述的数据库同步方法,不仅可以实现数据库一对一的同步,还可以实现一对多的数据库同步,例如将第一数据库的内容同步到多个数据库中,则这多个数据库的同步方法都与上述第二数据库的同步方法相同,这里不再赘述。
[0069] 与上述方法实施例相对应的,本发明还公开了一种数据库同步装置,如图2所示,包括:
[0070] 哈希表创建模块201,用于建立与所述第二数据库对应的哈希表,所述哈希表中的每个关键字-哈希值对与所述第二数据库中的每条数据一一对应;
[0071] 关键字获取模块202,用于获取所述第一数据库中的数据对应的关键字;
[0072] 同步模块203,用于当所述第一数据库中数据对应的关键字包含在所述哈希表中时,利用与所述关键字对应的哈希值比较所述第一数据库中与所述关键字对应的数据和第二数据库中与所述关键字对应的数据是否相同,若不相同,将所述第一数据库中所述关键字对应的数据同步到所述第二数据库中。
[0073] 进一步地,所述装置还包括:
[0074] 新数据插入模块,用于当所述第一数据库中数据对应的关键字不包含在所述哈希表中时,则将第一数据库中所述关键字对应的数据插入到所述第二数据库中;
[0075] 删除模块,用于当所述哈希表中的关键字不包含在所述第一数据库中数据对应的全部关键字中时,删除所述第二数据库中所述关键字对应的数据;
[0076] 格式转换模块,用于将所述第一数据库中的数据和所述第二数据库中的数据转换为相同的格式。
[0077] 本实施例所述的数据库同步装置+,能够实现数据库同步的一键触发,即当前台发出同步指令后,不再需要人工的介入,就可完成同步过程。
[0078] 本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。
[0079] 对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。