一种数据库的数据同步方法和装置与流程

文档序号:15095934发布日期:2018-08-04 14:34阅读:151来源:国知局
本发明涉及数据库
技术领域
,特别是涉及一种数据库的数据同步方法和装置。
背景技术
:随着数据库技术的发展,越来越多的业务系统采用数据库对数据进行存储和管理。在业务系统运行的过程中,所产生的数据被记录在业务系统的数据库中。而为了便于业务方对数据进行分析和处理,业务系统数据库的数据需要同步到业务方的其他数据库,以形成业务系统中的数据的备份。在现有技术中,每一次需要从业务系统的数据库同步数据到另一数据库时,业务系统的数据库都需要对所要同步的数据进行查找。但是,对于一些要求数据同步频繁的场景,尤其是要求实时数据同步的场景,过于频繁的数据同步会导致业务系统的数据库面对大量的数据查找任务,从而影响到业务系统的数据库对业务系统运行过程所产生的数据处理任务的处理能力,使得业务系统的正常运行受到影响。技术实现要素:本发明所要解决的技术问题是,提供一种数据库的数据同步方法和装置,以避免业务系统的数据库面对数据同步时产生的大量数据查找任务,使得频繁甚至是实时的数据同步任务不会影响到业务系统的数据库对业务系统运行过程所产生的数据处理任务的处理能力,从而在业务系统的正常运行不受影响的情况下实现数据库的实时数据同步。第一方面,本发明实施例提供了一种数据库的数据同步方法,包括:响应于数据同步的触发指令,从第一数据库中读取未同步过的日志信息;对所述日志信息进行解析得到目标字符串;按照所述日志信息的格式,将所述目标字符串转换为目标数据信息;将所述目标数据信息同步到第二数据库。可选地,所述对所述日志信息进行解析得到目标字符串,包括:若所述日志信息对应的数据操作为插入操作,从所述日志信息中查找定长字符串和/或变长字符串;将所述定长字符串和/或所述变长字符串确定为所述目标字符串。可选地,所述对所述日志信息进行解析得到目标字符串,包括:若所述日志信息对应的数据操作为更新操作,从所述日志信息中查找所述更新操作对应的更新字符串;获取所述更新操作之前的初始数据信息对应的初始字符串;以所述更新字符串对所述初始字符串进行更新,得到所述目标字符串。可选地,所述获取所述更新操作之前的初始数据信息对应的初始字符串,包括:从所述日志信息中查找定长主键和/或变长主键;根据所述定长主键和/或变长主键,在所述第二数据库中查找所述初始数据信息;将所述初始数据信息转换成所述初始字符串。可选地,所述第一数据库为SQLServer数据库。第二方面,本发明实施例提供了一种数据库的数据同步装置,包括:读取单元,用于响应于数据同步的触发指令,从第一数据库中读取未同步过的日志信息;解析单元,用于对所述日志信息进行解析得到目标字符串;转换单元,用于按照所述日志信息的格式,将所述目标字符串转换为目标数据信息;同步单元,用于将所述目标数据信息同步到第二数据库。可选地,所述解析单元包括:第一查找子单元,用于若所述日志信息对应的数据操作为插入操作,从所述日志信息中查找定长字符串和/或变长字符串;确定单元,用于将所述定长字符串和/或所述变长字符串确定为所述目标字符串。可选地,所述解析单元包括:第二查找子单元,用于若所述日志信息对应的数据操作为更新操作,从所述日志信息中查找所述更新操作对应的更新字符串;获取子单元,用于获取所述更新操作之前的初始数据信息对应的初始字符串;更新子单元,用于以所述更新字符串对所述初始字符串进行更新,得到所述目标字符串。可选地,所述获取子单元包括:第三查找子单元,用于从所述日志信息中查找定长主键和/或变长主键;第四查找子单元,用于根据所述定长主键和/或变长主键,在所述第二数据库中查找所述初始数据信息;转换子单元,用于将所述初始数据信息转换成所述初始字符串。第三方面,本发明实施例提供了一种数据库的数据同步设备,所述设备包括处理器以及存储器:所述存储器用于存储程序代码,并将所述程序代码传输给所述处理器;所述处理器用于根据所述程序代码中的指令执行上述第一方面提供的所述数据库的数据同步方法。第四方面,本发明实施例提供了一种存储介质,所述存储介质用于存储程序代码,所述程序代码用于执行上述第一方面提供的所述数据库的数据同步方法。与现有技术相比,本发明实施例具有以下优点:在本发明实施例中,通过读取和解析第一数据库中未同步过的日志信息,可以从第一数据库中获得所要同步的数据信息,从而该数据信息就可以同步到第二数据库。因此,若以业务系统数据库作为第一数据库,业务系统数据库可以不必为了向其他数据库进行数据同步而查找所要同步的数据信息,这样就避免了业务系统的数据库面对数据同步时产生的大量数据查找任务,使得频繁甚至是实时的数据同步任务不会影响到业务系统的数据库对业务系统运行过程所产生的数据处理任务的处理能力,从而在业务系统的正常运行不受影响的情况下实现数据库的实时数据同步。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本发明实施例中一个示例性应用场景的网络系统示意图;图2为本发明实施例提供的一种数据库的数据同步方法的流程图;图3为本发明实施例提供的一种解析更新操作对应的日志信息的流程图;图4为本发明提供的一种数据库的数据同步方法场景实施例流程图;图5为本发明实施例提供的一种数据库的数据同步装置的结构图;图6为本发明实施例提供的一种数据库的数据同步设备的硬件结构示意图。具体实施方式为了使本
技术领域
的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。在业务系统运行的过程中会产生的越来越多的数据,这些数据会由该业务系统的数据库对这些数据相关的记录以及处理。目前,为了便于业务方对数据进行分析和处理,需要将业务系统数据库中记录的数据,同步到该业务方的其他数据库中。而每次从业务系统的数据库同步数据到业务方的另一数据库,都需要业务系统的数据库耗费一定的性能资源来查找所要同步的数据。而为了不影响业务系统的正常运行,上述数据同步操作会按照较长的周期执行,如一天进行一次数据同步,并且,数据同步操作的执行时间通常也会选择业务系统比较空闲的时段,比如晚上。但是,随着大数据时代的到来,很多场景中均要求数据可以频繁地、甚至实时地被同步,以便通过对实时同步数据的分析和处理,实现随时地、准确地对该业务系统中业务的分析以及预测。而由于每次从业务系统的数据库同步数据到业务方的另一数据库,都需要业务系统的数据库耗费一定的性能资源来查找所要同步的数据,所以,在实现实时数据同步时就需要业务系统的数据库耗费资源来进行查找操作。而业务系统的数据库频繁地执行查找操作,业务系统数据库的性能就会降低,则必然会导致该业务系统的数据库对业务系统运行过程所产生的数据的处理能力受到影响,进而会影响到该业务系统的正常运行。基于此,为了解决在数据库实时同步时业务系统数据库频繁执行查找操作而带来的数据库所在的业务系统正常运行受影响的问题,本发明实施例提供了一种数据库的数据同步的方法和装置,既可以实现数据库的实时数据同步,又可以确保不影响业务系统的正常运行。具体而言,在本发明实施例中,在响应到数据同步的触发指令的情况下,可以从第一数据库中读取未同步过的日志信息,然后,可以对该日志信息进行解析得到目标字符串,再按照日志信息的格式,可以将该目标字符串转换为目标数据信息,从而可以将目标数据信息同步到第二数据库。由此可知,在本发明实施例中,业务系统数据库向其他数据库进行数据同步时,可以通过读取和解析业务系统数据库中的日志信息来获得所要同步的数据,而不需要业务系统数据库去查找所要同步的数据信息,这样就避免了业务系统数据库在数据同步时执行大量数据查找操作,也就不会影响到业务系统的数据库对业务系统运行过程所产生数据的处理能力,从而在业务系统的正常运行不受影响的情况下实现数据库的实时数据同步。举例说明,本发明实施例可以应用到如图1所示的场景。在该场景中,包括第一数据库101、第二数据库102以及同步服务器103。其中,第一数据库101以及第二数据库102,用于对数据进行存储、分析和处理。同步服务器103,通过网络分别与第一数据库101和第二数据库102进行数据交互,实现将第一数据库101中的数据,同步到第二数据库102中。具体的数据同步过程为:首先,同步服务器103响应于数据同步的触发指令,从第一数据库101中读取未同步过的日志信息;然后,同步服务器103对该日志信息进行解析得到目标字符串;接着,同步服务器103按照日志信息的格式,将目标字符串转换为目标数据信息;最后,同步服务器103将该目标数据信息同步到第二数据库102。可以理解的是,第一数据库101可以是业务系统中用于存储业务数据的数据库,第二数据库102为业务系统对应的业务方的数据库。其中,业务系统是指为用户提供某种业务功能的系统,例如“铁路12306”,即为向用户提供购买火车票服务的业务系统。需要注意的是,上述应用场景仅是为了便于理解本发明而示出,本发明的实施方式在此方面不受任何限制。相反,本发明的实施方式可以应用于适用的任何场景。需要说明的是,所述同步服务器103可以独立布置在网络中,也可以集成在第一数据库101或第二数据库102所在的系统中。下面结合附图,详细说明本发明的各种非限制性实施方式。参见图2,为本发明实施例提供的一种数据库的数据同步方法的流程图。在本实施例中,所述方法具体可以包括以下步骤:步骤201,响应于数据同步的触发指令,从第一数据库中读取未同步过的日志信息。其中,第一数据库,例如可以为业务系统中的数据库,用于记录业务系统运行过程中产生的数据,同时也对这些数据进行一定的处理。可以理解的是,第一数据库例如可以是SQLServer数据库。SQLServer数据库,是一种关系型数据库,可以为关系型数据和结构化数据提供安全可靠的存储功能。SQLServer数据库的优点在于,其使用方便、可伸缩性好以及相关软件集成程度高等。需要说明的是,当用户在业务系统中进行一次数据操作,该业务系统将会对应产生与该数据操作对应的至少一条日志信息,该日志信息记录了该数据操作下产生的数据信息。在SQLServer数据库中,数据信息会被转换成16进制的字符串,存储在日志信息中。对于SQLServer数据库来说,其日志信息中存在CurrentLSN字段,该字段表示当前日志序列号,每个日志信息都由一个唯一的日志序列号(LSN)标识。LSN的具体排序方式为:如果LSN2大于LSN1,则LSN2所标识的日志信息对应的更改发生在LSN1所表示的日志信息对应的更改之后。在第一数据库为SQLServer数据库的情况下,第一数据库中日志信息的读取可以通过函数fn_dblog来实现。具体地,在数据同步时,同步服务器向业务系统的第一数据库发送函数fn_dblog,第一数据库接收到函数fn_dblog后,运行该函数,即可读取到该第一数据库中未同步过的日志信息。可以理解的是,在数据同步时,从第一数据库中读取的日志信息通常是之前没有同步过的日志信息。在第一数据库为SQLServer数据库的情况下,可以通过日志信息中记录的LSN来确定日志信息是否同步过,从而读取到未同步过的日志信息。具体实现时,可以以上次数据同步的日志信息对应的LSN之后的LSN,作为本次需要数据同步的日志信息对应的LSN取值范围,这样就可以根据该LSN取值范围,读取到该第一数据库中未同步过的日志信息。举例来说,假设第一数据库中日志信息的最大的LSN为150,经过一次数据操作后,生成了LSN为151、152和153的日志信息。当需要进行数据同步时,同步服务器将函数fn_dblog发送至第一数据库后,第一数据库运行该函数fn_dblog,得到的本次需要数据同步的日志信息,即为LSN为151、152和153的日志信息。步骤202,对日志信息进行解析得到目标字符串。在日志信息中,记录了由数据操作产生的数据信息转换成的字符串,该字符串可以记作目标字符串。若日志信息对应不同的数据操作,日志信息对目标字符串的记录方式通常也不相同例如,在第一数据库为SQLServer数据库的情况下,日志信息包含了以下字段:Operation:当前LSN所做的数据操作;RowLogContents0:记录了插入操作的原始信息,更新操作之前的数据(只包括修改的部分);RowLogContents1:记录了更新操作之后的数据(只有相对于旧的值修改的);RowLogContents2:记录了更新操作时的主键信息;RowLogContents3:在LogRecord字段中,该字段之后的信息即为更新操作相关的信息;RowLogContents4:记录了更新操作相关的信息;LogRecord:记录了更新操作时的一些长度和位置索引的控制信息,包含了RowLogContents0,RowLogContents1,RowLogContents2,RowLogContents3,RowLogContents4各个字段中的信息。其中,当前LSN所做的数据操作(即Operation字段的内容),如下表1所示。表1数据操作的常见解释当前LSN所做的数据操作(Operation)解释LOP_INSERT_ROWS插入数据LOP_DELETE_ROWS删除数据LOP_MODIFY_ROW修改某一行记录LOP_MODIFY_COLUMS修改某一行较复杂的记录具体地,数据操作可以包括插入操作和更新操作,而更新操作可以包括删除和修改两种操作类型。其中,上述LOP_MODIFY_ROW和LOP_MODIFY_COLUMNS可以表示两种不同的更新操作,该两者实质上都要对数据信息做修改。可以理解的是,在日志信息对目标字符串的记录方式不同的情况下,通常从日志信息中解析出目标字符串的方式也可能不同。下面针对不同数据操作的日志信息,分别说明如何对日志信息进行解析得到目标字符串。在一些实施例中,对于日志信息对应的数据操作为插入操作的情况,步骤202可以具体包括:若日志信息对应的数据操作为插入操作,从日志信息中查找定长字符串和/或变长字符串;将定长字符串和/或变长字符串确定为目标字符串。其中,插入操作,是指在第一数据库中新增了一条数据。该条数据在此次插入操作之前,在第一数据库中不存在。该插入操作,产生的数据中包括的数据信息,将被转换为字符串记录在一个日志信息中,该日志信息即为该插入操作对应的日志信息。即,日志信息中记录的数据信息对应的字符串,就是该插入操作对应的目标字符串。在数据操作为插入操作时,所产生的日志信息中,插入的数据信息直接被以定长字符串和/或变长目标字符的形式,保存在日志信息中。即,插入的数据信息直接对应日志信息的字符串中的部分字符串,该部分字符串记作目标字符串。举例来说,假设执行了一次插入操作,在第一数据库中插入数据A,包括数据信息abc,说明在此次插入操作之前,第一数据库中不包括该数据A;而该插入操作对应的日志信息中,用查找定长字符串和/或变长字符串表示数据信息abc,则表示该数据信息abc的定长字符串和/或变长字符串即为目标字符串。以一个具体的示例,对插入操作产生的日志信息的解析方式进行介绍。在该示例中,若第一数据库为SQLServer数据库,第一数据库执行以下语句,以实现一条数据的插入操作:INSERTINTOuser1(id,sex,name,photo,describe,age,weight,yn,birthday,birthday2,age2,college,own,own2,own3,character,address)VALUES(1,0,'zhangsan',null,null,22,123.44,1,GETDATE(),GETDATE(),3453,'东北大',null,2342.234,534.23,'呵呵','哈哈')。对于上述插入操作所产生的日志信息,使用以下语句进行解析:SELECTa.[CurrentLSN],a.Operation,a.Context,a.[RowLogContents0],a.[RowLogContents1],a.[RowLogContents2],a.[RowLogContents3],a.[RowLogContents4],a.[LogRecord]FROMfn_dblog(null,null)aWHEREa.allocunitnameLIKE'%user1%'ANDOperationIN('LOP_INSERT_ROWS','LOP_DELETE_ROWS','LOP_MODIFY_ROW','LOP_MODIFY_COLUMNS')ORDERBYa.[CurrentLSN]DESC。解析后可以获得RowLogContents0字段的内容,具体如下:RowLogContents0=0x3000B000010000001816005C8FC2F528DC5E400160339D0037A300003C0237A37D0D000000000000608FE30E0000000001EF9203000000000001D626080000000000755475542000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002000B9FEB9FE2020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202011001810000400C700C700C700CF007A68616E6773616E1C4E17532759665B。具体关于RowLogContents0字段的构成简要说明见下表2。表2RowLogContents0字段构成的简要说明需要说明的是,该日志信息中记录的是16进制的字符串,其中每两位字符表示一个字节,分为高低位,低位在前,高位在后。RowLogContents0的解具体析流程如下:(1)、通过第3个字节,可以获取到列数量的地址A(B000,对应的十进制为176)。(2)、通过(1)中的结果获取表的列数N(1100,对应的十进制17)。(3)、通过(2)中的结果,计算出需要K个字节标识空值列,从地址A+2开始截取K个字节,然后获取哪些列为空。(每个字节8位,最多可表示8个字段,该表总共17个字段,需要三个字节来表示,即181000,对应的二进制为1000000011000,共13位,需要在前面补4个0,即00001000000011000,从后往前看,0为有值,1为空)。结合在第一数据库中插入的一条数据可知,最终插入数据库中的数据,列photo,describe,own为空(null),其他列均有具体值。(4)、获取表结构信息,根据(3)的结果可以知道哪些字段是非空的,根据字段的字节数,依次从第5个字节开始,截取相应的长度,它们依次为表中的定长字段的值,然后解析该十六进制日志信息。也就是说,将加粗的十六进制字符串,先按照长度截取成段,然后将每段解析成具体的十进制值,就能得到每个列的值是多少。(5)、变长字段的数据对应的字符串存储在日志信息的末尾。从A+2+K地址开始,截取两个字节,获取变长字段的个数N变长。具体来说,从0x0400解析出来为4,即,总共有四个变长的列。(6)、每次截取两个字节,直到截取了2N变长个字节为止,这些截取的字节依次存储了每个变长字段十六进制数据的结束地址。例如,0xC700解析出来为199,0xCF00解析出来为207。(7)、解析(6)中获取到的变长字段的结束地址,获取相应的变长字段的十六进制数据并解析。例如:将斜体的十六进制字符串7A68616E6773616E1C转成zhangsan。通过以上步骤,就能解析出来一条简单的插入的数据信息。在另一些实施例中,对于日志信息对应的数据操作为更新操作的情况,如图3所示,步骤202具体可以包括:步骤301,若日志信息对应的数据操作为更新操作,从日志信息中查找更新操作对应的更新字符串;步骤302,获取更新操作之前的初始数据信息对应的初始字符串;步骤303,以更新字符串对初始字符串进行更新,得到目标字符串。其中,更新操作,是指在第一数据库中对已有的一条数据中的至少一个数据信息进行了修改或者删除操作,该条数据中的数据信息发生了变化。一种情况下,数据在更新操作之前包括数据信息abc,在更新操作之后包括数据信息adc,即,将数据信息b修改为数据信息d。另一种情况下,数据在更新操作之前包括数据信息abc,在更新操作之后包括数据信息ac,即,将数据信息b删除。在一些日志信息中,当数据操作为更新操作时,所产生的日志信息中,所记录的关于该更新操作对应的字符串,可以用于说明数据中数据信息的变化情况,而没有记录数据操作后的数据信息,即,该情况下,日志信息中可以没有目标字符串而只有更新字符串。例如,更新操作之前,该更新操作对应的数据包括数据信息abc,在更新操作之后,该条数据包括数据信息adc,那么,该日志信息中,包括更新字符串,用于记录“数据a→数据d”的变化,而不是当前该条数据中的数据信息adc。在得到更新字符串后,可以通过查询该条数据对应的在第一数据库中所有相关日志信息,按照日志信息的时间顺序,迭代得出该更新操作对应的目标字符串,如此,每次更新操作对应的数据同步,都会对第一数据库进行大量的查找操作,影响第一数据库的正常数据处理。作为一种具体的实现方式,为了不影响第一数据库的正常工作,减少数据同步对第一数据库资源的占用,而且,为了提高获得目标字符串的效率,在获得更新字符串后,可以通过在第二数据库中查找该条数据对应的初始数据信息,获得初始字符串,利用初始字符串和更新字符串获得目标字符串。具体而言,步骤302具体可以包括:从日志信息中查找定长主键和/或变长主键;根据定长主键和/或变长主键,在第二数据库中查找初始数据信息;将初始数据信息转换成初始字符串。其中,主键即为数据库中的每条数据的数据索引,在数据库中,根据数据索引可以唯一的找到与该数据索引对应的一条数据。需要说明的是,第一数据库和第二数据库,对于同一条数据的主键或者数据索引一致。可以理解的是,日志信息的字符串中包括该条数据的定长主键和/或变长主键。当同步服务器从第一数据库中读取到该更新操作对应的日志信息后,该同步服务器可以从该日志信息的字符串中查找到定长主键和/或变长主键。然后,在第二数据库中,根据该定长主键和/或变长主键,查找到该定长主键和/或变长主键对应的一条数据,作为初始数据信息。也就是说,该初始数据信息,与第一数据库在进行更新操作之前对应的那条数据中包括的数据信息一致。最后,按照日志信息中将数据信息转换为字符串的规则,将该初始数据信息转换为初始字符串。在获得更新字符串和初始字符串后,可以以更新字符串对初始字符串进行更新,得到目标字符串。举例来说,假设对于数据A从第一数据库读取到的日志信息中,获得用于表示“数据b→数据d”变化的更新字符串1;然后,在第二数据库中查找数据A对应的初始数据信息abc,并通过格式转换,获得初始数据信息abc对应的初始字符串2;最后,利用更新字符串1对应的信息“b→d”,对初始字符串2对应的数据信息abc进行更新,获得目标字符串3,用于记录数据信息adc。以一个具体的示例,对更新操作产生的日志信息的解析方式进行介绍。在该示例中,若第一数据库为SQLServer数据库。其中,更新操作分为两种情况:第一种情况的更新操作为LOP_MODIFY_ROW;第二种情况的更新操作为LOP_MODIFY_COLUMNS。对于第一种情况,第一数据库执行的更新操作语句为:updateuser1set-name='lisi'whereid=1。对于该更新操作所产生的日志信息为:Operation=LOP_MODIFY_ROW;RowLogContents0=0xC700C700C700CF007A68616E6773616E;RowLogContents1=0xC300C300C300CB006C697369;RowLogContents2=0x1601000000010000;RowLogContents3=0x0101000C0000E0F387350000010200040204000A010086470766;RowLogContents4=0x;LogRecord=0x00003E004F000000EB1000000100020057490000000004029400000001000000FE0000004F000000DF100000440000010000A70000000001B70010000000040010000C0008001A00C700C700C700CF007A68616E6773616EC300C300C300CB006C69736916010000000100000101000C0000E0F387350000010200040204000A0100864707661600。这种情况下,我们在获取到整条数据的十六进制字符串的以后,只需要简单的替换对应的十六进制字符串即可。对于第二种情况,第一数据库执行的更新操作语句为:updateuser1setsex=1,name='wangwu'whereid=1。对于该更新操作所产生的日志信息为:Operation=LOP_MODIFY_COLUMNS;RowLogContents0=0x08000800B700B700;RowLogContents1=0x01000C00;RowLogContents2=0x1601000000010000;RowLogContents3=0x0101000C0000E0F387350000010200040204000A010086470766;RowLogContents4=0x1800864719661600C300C300C300CB006C697369C500C500C500CD0077616E677775AD00;LogRecord=0x00003E004F000000EC1000000100020058490000000006029400000001000000FE0000004F000000EB100000020000010000A7000000000100000000000008000800040008001A00010001000C000E0008000800B700B70001000C0016010000000100000101000C0000E0F387350000010200040204000A010086470766000A1800864719661600C300C300C300CB006C697369C500C500C500CD0077616E677775AD00。其中,由于LogRecord中包含了RowLogContents0~RowLogContents4的信息,所以,现在只针对LogRecord做一些说明。关于LogRecord的构成,见下表3中的简要说明。表3LogRecord构成的简要说明其中,LogRecord的具体解析流程如下:(1)、通过第3,4两个字节,可以获取存储更新的数据信息的地址A。(2)、地址A~A+10个字节处存储的是一些标志信息,对更新操作的日志信息的解析没有用处,直接跳过。(3)、循环截取RowLogContents0,每次截取两个字节,依次为第i处的更新前的首地址,第i处更新后的首地址;与此同时,从A+11处开始,截取LogRecord,每次截取两个字节,依次为第i处更新前的字节数,第i处更新后的字节数。要注意的是,RowLogContents1中只记录了更新前的长度,更新后的长度只能从LogRecord中获取。(4)、根据第一数据库表结构,按先后顺序获取主键的相关定义,如,主键字段名,类型,长度等。从RowLogContents2的第2个字节处开始,依次截取相应的长度,对应的是各个定长主键的值;定长主键的值截取完成后,再截取2个字节,这2个字节存储的是主键的总数量;然后跳过1个字节,再截取2个字节,这两个字节存储的是变长主键的数量N变长主键;然后循环依次截取2个字节,分别对应第i个变长主键的结束地址,直到截取了N变长主键个;然后再根据各结束地址,依次截取各变长主键对应的十六进制字符串。(5)、根据(4)中获取的主键,到第二数据库中查询对应的数据,作为初始数据信息,并将这些初始数据信息转换成十六进制字符串,记作初始字符串。(6)、从RowLogContents4中的第1个字节开始,依次截取第i处更新前的字节,补全第i处更新前的字节(字节数为4的整数倍,除以4向上取整),第i处更新后的字节,补全第i处更新后的字节(字节数为4的整数倍,除以4向上取整)。(7)、从(5)(6)中获取的结果中,将相应的字节替换。通过以上的步骤,就能解析出来一条的更新操作对应的目标字符串。此外,对于步骤302的具体实现方式,也可以是:在同步服务器上记录每次进行更新操作后的日志信息,而在解析新的更新操作时,直接从该同步服务器中获取该条数据对应的日志信息,从其中获取初始字符串,再利用更新字符串更新初始字符串,获得目标字符串。本发明可以通过以上任何的实现方式,均可以实现对日志信息的解析,从而获得目标字符串,具体采用何种实现方式,在本实施例中不作具体限定。步骤203,按照日志信息的格式,将目标字符串转换为目标数据信息。在第一数据库中,采用一定的规则,将数据信息转换为字符串,记录于日志信息中。同理,按照相同的规则,可以将日志信息中的字符串转换为数据信息。例如,对于目标字符串3,按照日志信息与数据信息的转换形式,将该目标字符串3转换为目标数据信息adc。其中,目标数据信息可以包括:汉语拼音、字母以及数字等。步骤204,将所述目标数据信息同步到第二数据库。一种情况下,当数据操作为插入操作时,步骤204具体可以是,将目标数据信息对应插入到第二数据库中的相应位置。另一种情况下,当数据操作为更新操作时,步骤204具体可以是,用获得的目标数据信息替换第二数据库中的对应的初始数据信息(即,初始字符串对应的数据信息)。在本发明实施例中,通过读取和解析第一数据库中未同步过的日志信息,可以利用格式转换将日志信息中的目标字符串转换为所需同步的目标数据信息,从而就可以将该目标数据信息同步到第二数据库,实现第一数据库到第二数据库的数据同步。可见,业务系统中的第一数据库可以不必为了向其他数据库进行数据同步,而查找所要同步的数据信息,这样就避免了业务系统的第一数据库面对数据同步时执行大量数据查找操作,使得频繁甚至是实时的数据同步操作不会影响到业务系统的第一数据库对业务系统运行过程所产生的数据进行处理的能力,从而在业务系统的正常运行不受影响的情况下实现数据库的实时数据同步。在介绍了本发明实施例提供的数据库的数据同步方法之后,下面以一个具体场景实施例的形式,结合图4,从信令交互的角度介绍本发明提供的数据库的数据同步方法。在该具体场景中,该数据库的数据同步需要:业务系统101、同步服务器103以及业务方102。其中,业务系统101和同步服务器103之间,以及业务方102同步服务器103之间均可以通过互联网进行数据交互。而且,业务系统101中包括第一数据库;业务方102中包括第二数据库。图4为本实施例中一种数据库的数据同步方法的流程图,所述方法可以包括:步骤401,同步服务器103向业务系统101的第一数据库发送函数fn_dblog。步骤402,业务系统101的第一数据库运行函数fn_dblog,获得第一数据库中未同步过的日志信息。步骤403,业务系统101将获得的第一数据库中未同步过的日志信息发送给同步服务器103。步骤404,同步服务器103解析接收到的日志信息,获得目标字符串。步骤405,同步服务器103按照日志信息的格式,将获得的目标字符串进行转换,获得目标数据信息。步骤406,同步服务器103将获得的目标数据信息同步到业务方102的第二数据库中。在本实施例中,具体的实现方式以及达到的效果,均可参见图2所示的实施例的描述,这里不再赘述。此外,本发明实施例还还提供了一种数据库的数据同步装置,如图5所示,为该装置的结构图,该装置包括:读取单元501,用于响应于数据同步的触发指令,从第一数据库中读取未同步过的日志信息;解析单元502,用于对所述日志信息进行解析得到目标字符串;转换单元503,用于按照所述日志信息的格式,将所述目标字符串转换为目标数据信息;同步单元504,用于将所述目标数据信息同步到第二数据库。可选地,所述解析单元502包括:第一查找子单元,用于若所述日志信息对应的数据操作为插入操作,从所述日志信息中查找定长字符串和/或变长字符串;确定单元,用于将所述定长字符串和/或所述变长字符串确定为所述目标字符串。可选地,所述解析单元502包括:第二查找子单元,用于若所述日志信息对应的数据操作为更新操作,从所述日志信息中查找所述更新操作对应的更新字符串;获取子单元,用于获取所述更新操作之前的初始数据信息对应的初始字符串;更新子单元,用于以所述更新字符串对所述初始字符串进行更新,得到所述目标字符串。可选地,所述获取子单元包括:第三查找子单元,用于从所述日志信息中查找定长主键和/或变长主键;第四查找子单元,用于根据所述定长主键和/或变长主键,在所述第二数据库中查找所述初始数据信息;转换子单元,用于将所述初始数据信息转换成所述初始字符串。以上是对本发明实施例提供的数据库的数据同步装置的介绍,具体实现方式可以参见上文图2所示方法实施例中的描述,达到的效果与上述图2所示的方法实施例一致,这里不再赘述。另外,本发明实施例还提供了一种数据库的数据同步设备,如图6所示,该设备包括处理器601以及存储器602:所述存储器602,用于存储程序代码,并将所述程序代码传输给所述处理器601;所述处理器601,用于根据所述程序代码中的指令执行图2所示的实施例中任意一种实施方式的数据库的数据同步方法。此外,本发明实施例还提供了一种存储介质,该存储介质用于存储程序代码,所述程序代码用于执行图2所示的实施例中任意一种实施方式的数据库的数据同步方法。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。以上所述仅是本申请的具体实施方式,应当指出,对于本
技术领域
的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1