背景技术
目前行业内的主流数据同步方案一般为两种,分别是基于基于触发器的数据同步方案和基于逻辑日志的数据同步方案。
基于触发器的数据同步方案中,需要在数据库设备中数据表上创建触发器,当数据表发生变化时,触发器能够捕获到数据的变化,并记录到日志中去,再由客户端设备根据触发器的触发情况读取变化的数据,再转换成相应的结构化查询语句,同步到其他数据库中。但是,由于在上述过程中,存在写放大的问题,一个变化的数据在整个过程中可能需要数倍的写入消耗才可以完成数据同步,因此存在处理开销过大的问题,不适合持续处理压力较大的应用场景。
基于逻辑日志的数据同步方案中,在数据库设备在其内核端获取数据的变化,再把数据的变化转化成同类数据库在逻辑层面的结构化数据作为数据同步信息,发送给其它同类数据库进行同步,因此,此种方案仅可以应用在同构数据库之间(如PostgreSQL数据库与PostgreSQL数据库之间)的数据同步中,无法实现异构数据库之间的数据同步。
因此,现有技术中缺少一种处理开销较小且适用于异构数据库的数据同步方案。
申请内容
本申请的一个目的是提供一种实现数据同步的方案,用以解决现有技术中无法同时实现处理开销较小且适用于异构数据库的问题。
为实现上述目的,本申请提供了一种在数据库设备端生成数据同步信息的方法,该方法包括:
基于重做日志获取事务逻辑信息,其中,所述事务逻辑信息用于表示所述重做日志对应的事务的变化数据;
向客户端设备发送所述事务逻辑信息,以使所述客户端设备根据所述重做日志对应的事务的变化数据生成用于数据同步的结构化查询语句。
进一步地,基于重做日志获取事务逻辑信息,包括:
基于所述重做日志获取与事务相关的预解析数据,所述预解析数据包括用于确定事务的标记信息以及事务中数据表变更的行信息;
根据数据库的***表确定所述事务中数据表变更的行信息所对应的索引信息,并将所述事务中数据表变更的行信息和其对应的索引信息确定为事务的变更数据信息;
根据所述用于确定事务的标记信息和事务的变更数据信息,生成用于表示所述重做日志对应的事务的变化数据的所述事务逻辑信息。
进一步地,所述索引信息包括数据表的主键列的列名。
进一步地,该方法还包括:
若所述事务中数据表变更的行信息中包含未发生变更的大字段,以大字段标记替换所述未发生变更的大字段。
进一步地,该方法还包括:
获取客户端设备回传的关于事务逻辑信息的接收进度信息,其中,所述接收进度信息用于标示所述客户端设备已完成接收的事务逻辑信息;
根据客户端设备回传的接收进度信息,向所述客户端设备发送未完成接收的事务逻辑信息。
进一步地,向客户端设备发送所述事务逻辑信息,包括:
以字符串的形式向所述客户端设备发送所述事务逻辑信息,其中,所述字符串包含用于校验所述事务逻辑信息的校验信息和用于表示所述事务逻辑信息的正文信息。
相应地,本申请还提供了一种在客户端设备端生成数据同步信息的方法,该方法包括:
从数据库设备接收基于重做日志获取的事务逻辑信息,其中,所述事务逻辑信息包括用于表示所述重做日志对应的事务的变化数据;
根据所述重做日志对应的事务的变化数据生成用于数据同步的结构化查询语句。
本申请还提供了一种在客户端设备端进行数据同步的方法,其中,该方法包括:
从数据库设备接收基于重做日志获取的事务逻辑信息,其中,所述事务逻辑信息用于表示所述重做日志对应的事务的变化数据;
根据所述重做日志对应的事务的变化数据生成用于数据同步的结构化查询语句;
将所述结构化查询语句发送至目标数据库设备,以使所述目标数据库设备执行所述结构化查询语句,完成数据同步。
进一步地,该方法还包括:
在从数据库设备接收基于重做日志获取的事务逻辑信息时,若接收中断,向所述数据库设备发送关于所述事务逻辑信息的接收进度信息,其中,所述接收进度信息用于标示客户端设备已完成接收的事务逻辑信息。
进一步地,从数据库设备接收基于重做日志获取的事务逻辑信息,包括:
以字符串的形式从数据库设备接收基于重做日志获取的事务逻辑信息,其中,所述字符串包含用于校验所述事务逻辑信息的校验信息和用于表示所述事务逻辑信息的正文信息;
在从数据库设备接收基于重做日志获取的事务逻辑信息之后,采用校验信息对所述正文信息所表示的事务逻辑信息进行校验。
进一步地,根据所述事务逻辑信息生成用于数据同步的结构化查询语句,包括:
根据预定义的数据规则,由所述字符串中获取所述事务逻辑信息,并生成关于所述事务逻辑信息的结构化数据;
根据所述结构化数据中的用于确定事务的标记信息将事务的变更数据信息封装为以事务为单位的变化数据;
根据所述以事务为单位的变化数据,生成各个事务的结构化查询语句。
基于本申请的另一方面,还提供了一种用于生成数据同步信息的数据库设备,该设备包括:
解析装置,用于基于重做日志获取事务逻辑信息,其中,所述事务逻辑信息用于表示所述重做日志对应的事务的变化数据;
传输装置,用于向客户端设备发送所述事务逻辑信息,以使所述客户端设备根据所述重做日志对应的事务的变化数据生成用于数据同步的结构化查询语句。
进一步地,所述解析装置,用于基于所述重做日志获取与事务相关的预解析数据,所述预解析数据包括用于确定事务的标记信息以及事务中数据表变更的行信息;根据数据库的***表确定所述事务中数据表变更的行信息所对应的索引信息,并将所述事务中数据表变更的行信息和其对应的索引信息确定为事务的变更数据信息;以及根据所述用于确定事务的标记信息和事务的变更数据信息,生成用于表示所述重做日志对应的事务的变化数据的所述事务逻辑信息。
进一步地,所述索引信息包括数据表的主键列的列名。
进一步地,所述解析装置,还用于若所述事务中数据表变更的行信息中包含未发生变更的大字段,以大字段标记替换所述未发生变更的大字段。
进一步地,所述传输装置,还用于获取客户端设备回传的关于事务逻辑信息的接收进度信息,其中,所述接收进度信息用于标示所述客户端设备已完成接收的事务逻辑信息;以及根据客户端设备回传的接收进度信息,向所述客户端设备发送未完成接收的事务逻辑信息。
进一步地,所述传输装置,用于以字符串的形式向所述客户端设备发送所述事务逻辑信息,其中,所述字符串包含用于校验所述事务逻辑信息的校验信息和用于表示所述事务逻辑信息的正文信息。
相应地,本申请还提供了一种用于生成数据同步信息的客户端设备,该设备包括:
传输装置,用于从数据库设备接收基于重做日志获取的事务逻辑信息,其中,所述事务逻辑信息用于表示所述重做日志对应的事务的变化数据;
整合装置,用于根据所述重做日志对应的事务的变化数据生成用于数据同步的结构化查询语句。
本申请还提供了一种用于进行数据同步的客户端设备,该设备包括:
传输装置,用于从数据库设备接收基于重做日志获取的事务逻辑信息,其中,所述事务逻辑信息用于表示所述重做日志对应的事务的变化数据;以及将结构化查询语句发送至目标数据库设备,以使所述目标数据库设备执行所述结构化查询语句,完成数据同步。
整合装置,用于根据所述重做日志对应的事务的变化数据生成用于数据同步的结构化查询语句。
进一步地,所述传输装置,还用于在从数据库设备接收基于重做日志获取的事务逻辑信息时,若接收中断,向所述数据库设备发送关于所述事务逻辑信息的接收进度信息,其中,所述接收进度信息用于标示客户端设备已完成接收的事务逻辑信息。
进一步地,所述传输装置,用于以字符串的形式从数据库设备接收基于重做日志获取的事务逻辑信息,其中,所述字符串包含用于校验所述事务逻辑信息的校验信息和用于表示所述事务逻辑信息的正文信息;
所述整合装置,还用于在从数据库设备接收基于重做日志获取的事务逻辑信息之后,采用校验信息对所述正文信息所表示的事务逻辑信息进行校验。
进一步地,所述整合装置,用于根据预定义的数据规则,由所述字符串中获取所述事务逻辑信息,并生成关于所述事务逻辑信息的结构化数据;根据所述结构化数据中的用于确定事务的标记信息将事务的变更数据信息封装为以事务为单位的变化数据;以及根据所述以事务为单位的变化数据,生成各个事务的结构化查询语句。
此外,本申请还提供了一种用于生成数据同步信息的数据库设备,该设备包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:基于重做日志获取事务逻辑信息,其中,所述事务逻辑信息用于表示所述重做日志对应的事务的变化数据;以及向客户端设备发送所述事务逻辑信息,以使所述客户端设备根据所述重做日志对应的事务的变化数据生成用于数据同步的结构化查询语句
本申请还提供了一种用于生成数据同步信息的客户端设备,该设备包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:从数据库设备接收基于重做日志获取的事务逻辑信息,其中,所述事务逻辑信息用于表示所述重做日志对应的事务的变化数据;以及根据所述重做日志对应的事务的变化数据生成用于数据同步的结构化查询语句。
本申请还提供了一种用于进行数据同步的客户端设备,该设备包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:从数据库设备接收基于重做日志获取的事务逻辑信息,其中,所述事务逻辑信息用于表示所述重做日志对应的事务的变化数据;根据所述所述重做日志对应的事务的变化数据生成用于数据同步的结构化查询语句;以及将所述结构化查询语句发送至目标数据库设备,以使所述目标数据库设备执行所述结构化查询语句,完成数据同步。
与现有技术相比,本申请提供了一种实现数据同步的方案,该方案首先基于重做日志获取事务逻辑信息,该事务逻辑信息表示数据库中每次事务的数据新增、更新、删除等变化情况,数据库设备将事务逻辑信息发送给客户端设备之后,由客户端设备对其进行整合,生成结构化查询语句(SQL语句),作为数据同步信息,此过程中无需利用触发器,因此不会有写放大的问题,处理开销较小。由于结构化查询语句能够适用于任意基于SQL的数据库(例如PostgreSQL、MySQL、SQL Server等),由此在进行数据同步时,可以适用于异构数据库之间的数据同步。
具体实施方式
下面结合附图对本申请作进一步详细描述。
在本申请一个典型的配置中,终端、服务网络的设备均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
图1示出了一种异构数据库***,该数据库***中包括多个异构的数据库设备以及数据同步客户端设备,为简明期间,本实施例中以两个数据库设备和一个数据同步客户端设备130为例进行详细说明,其中,数据库设备110采用PostgreSQL数据库,而数据库设备120则采用MySQL数据库,两者为异构数据库。图中示出的各类元素的数量可能小于实际场景中相应元素的数量,但这种省略无疑地是以不会影响对本发明进行清楚、充分的公开为前提的。对于上述数据库设备和客户端设备,其具体实现可以包括但不限于:用户设备、网络设备或用户设备与网络设备通过网络相集成所构成的设备。所述用户设备包括但不限于个人计算机、触控终端、移动终端等设备;所述网络设备包括但不限于如单个网络服务器、多个网络服务器组成的集群或基于云计算的计算机集合等。
本申请实施例提供了一种生成数据同步信息的方法,用于生成一种能够适用于异构数据库之间进行数据同步的数据同步信息,结合图1中的设备,该方法的处理流程如图2所示。
在数据库设备端,具体的处理步骤包括:
S201,数据库设备基于重做日志(redo log)获取事务逻辑信息。其中,所述事务逻辑信息用于表示所述重做日志对应的事务的变化数据。
在实际场景中,重做日志中会记录一段时间内所提交的事务相关信息,其中会包含这些事务的变化数据,这些变化数据即对应该段时间内数据库中数据所发生的变化,通过获取能够表示这些变化数据的事务逻辑信息,从而提供数据同步的依据。
所述重做日志对应的事务的变化数据可以至少包括用于确定事务的标记信息和事务的变更数据信息。其中,所述用于确定事务的标记信息是指用于唯一确定某一事务的信息,例如可以是事务标识、事务开始时间、事务提交时间等信息,通过这些信息区分各个事务。而事务的变更数据信息是指每一个事务所涉及的数据变化的内容。由此,通过用于确定事务的标记信息和事务的变更数据信息可以确定重做日志对应的事务的变化数据。
实际场景中,所述事务标识可以是事务ID,事务开始时间和事务提交时间可以由与事务相关的时间戳中确定,事务的变更数据信息是指在本次事务处理过程中发生变化的数据的相关信息。事务的变更数据信息是指某一事务中,关于数据表中的数据所发生的变化的信息。
在本申请的一个实施例中,数据库设备获取事务逻辑信息的具体处理过程可以采用如下的处理步骤:
首先,基于重做日志获取与事务相关的预解析数据,所述预解析数据包括用于确定事务的标记信息以及事务中数据表变更的行信息。
由于重做日志中除了包含与事务相关的预解析数据之外,还包含其它无关的数据,例如与存储相关的数据,因此对可以其进行预处理,筛选需要与事务相关的预解析数据,这些预解析数据可以包括用于确定事务的标记信息以及事务中数据表变更的行信息。对于数据库事务来说,数据变化类型包括新增(insert)、修改(update)和删除(delete),由此,所述事务中数据表变更的行信息,可以是某一数据表中第N行中的一个数据“10”修改成了“11”,或者第M行中的数据“A”被删除,还可能是第L行中的某一列新增了一个数据“B”等等。
然后,根据数据库的***表确定所述事务中数据表变更的行信息所对应的索引信息。通过查询***表(catalog),可以确定变化数据对应的表名、列名、表模式名、数据类型等索引信息,通过这些索引信息可以快速定位到变化数据在数据库所有数据中的具***置。
此时,可以将所述事务中数据表变更的行信息和其对应的索引信息确定为事务的变更数据信息。最后,根据获取到的根据所述用于确定事务的标记信息和事务的变更数据信息,可以生成用于表示所述重做日志对应的事务的变化数据的所述事务逻辑信息。由此,通过事务逻辑信息可以快速确定数据库中位于哪个位置的数据发生了何种变化,以便于在数据同步更新时,实现快速准确的定位和写入,提高处理效率。
S202,数据库设备向客户端设备发送所述事务逻辑信息,以使所述客户端设备根据所述事务逻辑信息生成用于数据同步的结构化查询语句。
本申请的一个实施例中,所述数据库设备在发送所述事务逻辑信息时,可以先将事务逻辑信息整合成字符串之后,以字符串的形式向所述客户端设备发送所述事务逻辑信息。由于在传输过程中,可能会因为网络环境等原因使得传输的数据发生错误,因此,所述字符串可以具体包括两个部分,即用于校验所述事务逻辑信息的校验信息和用于表示所述事务逻辑信息的正文信息,使得客户端设备在接收到字符串之后,可以采用校验信息对所述正文信息所表示的事务逻辑信息进行校验,以保证数据传输的准确性。
在实际场景中,除了可能发生数据错误的情况之外,在发送所述事务逻辑信息时,还有可能出现传输中断的情况,由此,本申请的一个实施例还支持事务逻辑信息的断点续传。具体地,生成数据同步信息的方法还包括:数据库设备获取客户端设备回传的关于事务逻辑信息的接收进度信息,以及在需要进行断点续传时,根据客户端设备回传的接收进度信息,向所述客户端设备发送未完成接收的事务逻辑信息。其中,所述接收进度信息用于标示所述客户端设备已完成接收的事务逻辑信息。
例如,数据库设备在传输中断后,接收到来自客户端设备回传的关于事务逻辑信息的接收进度信息,该接收进度信息中表明客户端设备已完成信息001~100的接收。在后续过程中,若该客户端设备要继续获取事务逻辑信息,可以根据之前接收到的接收进度信息,从信息101开始发送后续的事务逻辑信息。在具体实施过程中,可以采用合适的接口来进行相关信息的传输,例如对于PostgreSQL数据库,由于其在9.4版本之后提供了逻辑流复制接口,则可以利用逻辑流复制接口传输事务逻辑信息以及相应的接收进度信息。
此外,本申请实施例还提供了一种实施方式,以实现对包含大字段的数据表的优化。对于数据表变更的行信息,若该行中包含大字段,且该大字段未发生变更,则数据库设备获取事务逻辑信息时,可以通过大字段标记替换所述未发生变更的大字段,从而不传输大字段。由于大字段标记仅为一标记信息,仅用于表示该行中的该部分内容为大字段,且未发生变化,其数据量远远小于实际的大字段,因此可以减少传输数据量,以达到优化流量的目的。
相应地,在客户端设备端,生成数据同步信息的方法包括:
步骤S203,客户端设备从数据库设备接收基于重做日志获取的事务逻辑信息。
若数据库设备是以字符串的方式发送所述事务逻辑信息,则客户端设备也会以字符串的形式从数据库设备接收基于重做日志获取的事务逻辑信息,其中,所述二进制字符串包含用于校验所述事务逻辑信息的校验信息和用于表示所述事务逻辑信息的正文信息。
在从数据库设备接收基于重做日志获取的事务逻辑信息之后,客户端设备可以采用校验信息对所述正文信息所表示的事务逻辑信息进行校验。例如,传输时每个数据帧的总长度为4字节,前两个字节的为验证信息,后两个字节为正文信息,在接收前两个字节的验证信息之后,可以基于该验证信息对后续接收到的两个字节正文信息进行验证,只有在验证通过后才认为接收到了正文信息所表示所述事务逻辑信息,由此提高信息传输的准确性。
此外,客户端设备在从数据库设备接收基于重做日志获取的事务逻辑信息时,若接收中断,向所述数据库设备发送关于所述事务逻辑信息的接收进度信息,其中,所述接收进度信息用于标示客户端设备已完成接收的事务逻辑信息。由此,实现事务逻辑信息的断点续传功能。
步骤S204,客户端设备根据所述事务逻辑信息所表示的所述重做日志对应的事务的变化数据生成用于数据同步的结构化查询语句,将该结构化查询语句作为数据同步信息。由此,对于需要进行数据同步的目标数据库设备,只要该目标数据库设备使用的数据库产品能够使用结构化查询语句(SQL语句),即可采用本申请实施例中生成的同步数据信息进行数据同步。例如,对图1中所示的数据库设备,若采用现有技术中的方案,仅能够实现采用PostgreSQL的数据库设备之间的数据同步;而对本申请实施例提供的方案,采用PostgreSQL的数据库设备可以实现向任意使用SQL语句的数据库设备(例如使用MySQL的数据库设备120)进行数据同步。
本申请的一个实施例中,客户端设备生成结构化查询语句的具体处理流程如图3所示,包括:
步骤S301,根据预定义的数据规则,由所述字符串中获取所述事务逻辑信息,并生成关于所述事务逻辑信息的结构化数据。仍以前述场景为例,若客户端设备通给定的接口,获取到数据库设备发送的二进制字符串之后,将根据预定义的数据规则,对二进制字符串进行处理,例如提取二进制字符串中特定位置的内容,对这些内容进行解析之后,提取出事务逻辑信息所对应的信息。进一步地,为便于后续处理,可以形成特定格式的格式化数据。
步骤S302,根据所述结构化数据中的用于确定事务的标记信息将事务的变更数据信息封装为以事务为单位的变化数据。若仍以前例中的标记信息为例,即用于确定事务的标记信息包括事务ID、事务开始的时间戳、事务提交的时间戳,由此,可以通过事务ID、事务开始的时间戳、事务提交的时间戳可以确定某一事务在其开始至提交的时间段内所涉及的变更数据信息,由此以以事务为单位的变化数据。例如,对于事务ID为001的事务,其开始的时间戳为01:00:00:000,提交的时间戳为:01:00:02:000,由此可以确定在此期间内该事务的变更数据信息,进而以事务为单位封装该事务的变化数据。
步骤S303,根据所述以事务为单位的变化数据,生成各个事务的结构化查询语句。根据封装的内容,将变化的数据按照事务为单位转化为SQL语句后,使得需要同步的目标数据库设备可以通过执行该SQL语句,实现数据的同步。
此外,本申请实施例还提供了一种进行数据同步的方法,该方法中,采用前述生成数据同步信息的方式,生成事务的结构化查询语句,然后由客户端设备将所述结构化查询语句发送至目标数据库设备,以使所述目标数据库设备执行所述结构化查询语句,完成数据同步。
对于目标数据库设备,在更新数据时若数据表中包含主键,则可以通过查询主键的方式快速定位数据表变更的行信息,而无需遍历整个数据表,并且目标数据库设备可以按照数据表或者主键实现并行的数据写入,由此提高目标数据库设备的写入性能。因此,生成数据同步信息时,若变更的行信息所在的数据表中包含主键,数据库设备可以将该数据表的主键列的列名也作为一项索引信息获取,包含于数据同步信息中,由此在进行数据同步过程中实现高性能的写入。
基于同一发明构思,本申请实施例中还提供了用于实现数据同步的数据库设备和客户端设备,数据库设备和客户端设备对应的方法是前述实施例中的实现数据同步的相关方法,并且其解决问题的原理与所述方法相似。
图4示出了本申请实施例提供的一种用于生成数据同步信息的数据库设备400,该数据库设备400包括解析装置410和传输装置420。所述解析装置410用于基于重做日志获取事务逻辑信息。其中,所述事务逻辑信息用于表示所述重做日志对应的事务的变化数据。所述传输装置420用于设备向客户端设备发送所述事务逻辑信息,以使所述客户端设备根据所述事务逻辑信息生成用于数据同步的结构化查询语句。
在实际场景中,重做日志中会记录一段时间内所提交的事务相关信息,其中会包含这些事务的变化数据,这些变化数据即对应该段时间内数据库中数据所发生的变化,通过获取能够表示这些变化数据的事务逻辑信息,从而提供数据同步的依据。
所述重做日志对应的事务的变化数据可以至少包括用于确定事务的标记信息和事务的变更数据信息。其中,所述用于确定事务的标记信息是指用于唯一确定某一事务的信息,例如可以是事务标识、事务开始时间、事务提交时间等信息,通过这些信息区分各个事务。而事务的变更数据信息是指每一个事务所涉及的数据变化的内容。由此,通过用于确定事务的标记信息和事务的变更数据信息可以确定重做日志对应的事务的变化数据。
实际场景中,所述事务标识可以是事务ID,事务开始时间和事务提交时间可以由与事务相关的时间戳中确定,事务的变更数据信息是指在本次事务处理过程中发生变化的数据的相关信息。事务的变更数据信息是指某一事务中,关于数据表中的数据所发生的变化的信息。
在本申请的一个实施例中,数据库设备的解析装置410获取事务逻辑信息的具体处理过程可以采用如下的处理步骤:
首先,解析装置基于重做日志获取与事务相关的预解析数据,所述预解析数据用于确定事务的标记信息以及事务中数据表变更的行信息。
由于重做日志中除了包含与事务相关的预解析数据之外,还包含其它无关的数据,例如与存储相关的数据,因此对可以其进行预处理,筛选需要与事务相关的预解析数据,这些预解析数据可以包括用于确定事务的标记信息以及事务中数据表变更的行信息。对于数据库事务来说,数据变化类型包括新增(insert)、修改(update)和删除(delete),由此,所述事务中数据表变更的行信息,可以是某一数据表中第N行中的一个数据“10”修改成了“11”,或者第M行中的数据“A”被删除,还可能是第L行中的某一列新增了一个数据“B”等等。
然后,解析装置根据数据库的***表确定所述事务中数据表变更的行信息所对应的索引信息。通过查询***表(catalog),可以确定变化数据对应的表名、列名、表模式名、数据类型等索引信息,通过这些索引信息可以快速定位到变化数据在数据库所有数据中的具***置。
此时,解析装置可以将所述事务中数据表变更的行信息和其对应的索引信息确定为事务的变更数据信息。最后,解析装置根据获取到的根据所述用于确定事务的标记信息和事务的变更数据信息,可以生成用于表示所述重做日志对应的事务的变化数据的所述事务逻辑信息。由此,通过事务逻辑信息可以快速确定数据库中位于哪个位置的数据发生了何种变化,以便于在数据同步更新时,实现快速准确的定位和写入,提高处理效率。
本申请的一个实施例中,所述数据库设备的传输装置420在发送所述事务逻辑信息时,可以先将事务逻辑信息整合成字符串之后,以字符串的形式向所述客户端设备发送所述事务逻辑信息。由于在传输过程中,可能会因为网络环境等原因使得传输的数据发生错误,因此,所述字符串可以具体包括两个部分,即用于校验所述事务逻辑信息的校验信息和用于表示所述事务逻辑信息的正文信息,使得客户端设备在接收到字符串之后,可以采用校验信息对所述正文信息所表示的事务逻辑信息进行校验,以保证数据传输的准确性。
在实际场景中,除了可能发生数据错误的情况之外,传输装置420在发送所述事务逻辑信息时,还有可能出现传输中断的情况,由此,本申请的一个实施例还支持事务逻辑信息的断点续传。具体地,所述传输装置420还用于获取客户端设备回传的关于事务逻辑信息的接收进度信息,以及在需要进行断点续传时,根据客户端设备回传的接收进度信息,向所述客户端设备发送未完成接收的事务逻辑信息。其中,所述接收进度信息用于标示所述客户端设备已完成接收的事务逻辑信息。
例如,数据库设备在传输中断后,所述传输装置会接收到来自客户端设备回传的关于事务逻辑信息的接收进度信息,该接收进度信息中表明客户端设备已完成信息001~100的接收。在后续过程中,若该客户端设备要继续获取事务逻辑信息,可以根据之前接收到的接收进度信息,从信息101开始发送后续的事务逻辑信息。在具体实施过程中,可以采用合适的接口来进行相关信息的传输,例如对于PostgreSQL数据库,由于其在9.4版本之后提供了逻辑流复制接口,则可以利用逻辑流复制接口传输事务逻辑信息以及相应的接收进度信息。
此外,本申请实施例还提供了一种实施方式,以实现对包含大字段的数据表的优化。对于数据表变更的行信息,若该行中包含大字段,且该大字段未发生变更,则数据库设备的所述解析装置在获取事务逻辑信息时,可以通过大字段标记替换所述未发生变更的大字段,从而不传输大字段。由于大字段标记仅为一标记信息,仅用于表示该行中的该部分内容为大字段,且未发生变化,其数据量远远小于实际的大字段,因此可以减少传输数据量,以达到优化流量的目的。
相应地,本申请实施例还提供了一种用于生成数据同步信息的客户端设备500,该客户端设备的结构如图4所示,包括传输装置510和整合装置520。其中,所述传输装置510用于从数据库设备接收基于重做日志获取的事务逻辑信息。所述整合装置520用于根据所述事务逻辑信息所表示的所述重做日志对应的事务的变化数据生成用于数据同步的结构化查询语句,将该结构化查询语句作为数据同步信息。
若数据库设备的传输装置420是以字符串的方式发送所述事务逻辑信息,则客户端设备的传输装置510也会以字符串的形式从数据库设备接收基于重做日志获取的事务逻辑信息,其中,所述二进制字符串包含用于校验所述事务逻辑信息的校验信息和用于表示所述事务逻辑信息的正文信息。
在从数据库设备接收基于重做日志获取的事务逻辑信息之后,客户端设备可以采用校验信息对所述正文信息所表示的事务逻辑信息进行校验。例如,传输时每个数据帧的总长度为4字节,前两个字节的为验证信息,后两个字节为正文信息,在接收前两个字节的验证信息之后,可以基于该验证信息对后续接收到的两个字节正文信息进行验证,只有在验证通过后才认为接收到了正文信息所表示所述事务逻辑信息,由此提高信息传输的准确性。
此外,客户端设备的传输装置510在从数据库设备接收基于重做日志获取的事务逻辑信息时,若接收中断,向所述数据库设备发送关于所述事务逻辑信息的接收进度信息,其中,所述接收进度信息用于标示客户端设备已完成接收的事务逻辑信息。由此,实现事务逻辑信息的断点续传功能。
对于需要进行数据同步的目标数据库设备,只要该目标数据库设备使用的数据库产品能够使用结构化查询语句(SQL语句),即可采用本申请实施例中生成的同步数据信息进行数据同步。例如,对图1中所示的数据库设备,若采用现有技术中的方案,仅能够实现采用PostgreSQL的数据库设备之间的数据同步;而对本申请实施例提供的方案,采用PostgreSQL的数据库设备可以实现向任意使用SQL语句的数据库设备(例如使用MySQL的数据库设备120)进行数据同步。
本申请的一个实施例中,客户端设备的整合装置510生成结构化查询语句的具体处理流程如图3所示,包括:
步骤S301,整合装置根据预定义的数据规则,由所述字符串中获取所述事务逻辑信息,并生成关于所述事务逻辑信息的结构化数据。仍以前述场景为例,若客户端设备通给定的接口,获取到数据库设备发送的二进制字符串之后,将根据预定义的数据规则,对二进制字符串进行处理,例如提取二进制字符串中特定位置的内容,对这些内容进行解析之后,提取出事务逻辑信息所对应的信息。进一步地,为便于后续处理,可以形成特定格式的格式化数据。
步骤S302,整合装置根据所述结构化数据中的用于确定事务的标记信息将事务的变更数据信息封装为以事务为单位的变化数据。若仍以前例中的标记信息为例,即用于确定事务的标记信息包括事务ID、事务开始的时间戳、事务提交的时间戳,由此,可以通过事务ID、事务开始的时间戳、事务提交的时间戳可以确定某一事务在其开始至提交的时间段内所涉及的变更数据信息,由此以以事务为单位的变化数据。例如,对于事务ID为001的事务,其开始的时间戳为01:00:00:000,提交的时间戳为:01:00:02:000,由此可以确定在此期间内该事务的变更数据信息,进而以事务为单位封装该事务的变化数据。
步骤S303,整合装置根据所述以事务为单位的变化数据,生成各个事务的结构化查询语句。根据封装的内容,将变化的数据按照事务为单位转化为SQL语句后,使得需要同步的目标数据库设备可以通过执行该SQL语句,实现数据的同步。
此外,本申请实施例还提供了一种进行数据同步的客户端设备,该客户端设备包括传输装置510和整合装置520。其中,所述传输装置510用于从数据库设备接收基于重做日志获取的事务逻辑信息,而所述整合装置520用于根据所述事务逻辑信息生成用于数据同步的结构化查询语句,将该结构化查询语句作为数据同步信息。进一步地,所述传输装置510还用于将结构化查询语句发送至目标数据库设备,以使所述目标数据库设备执行所述结构化查询语句,完成数据同步。
对于目标数据库设备,在更新数据时若数据表中包含主键,则可以通过查询主键的方式快速定位数据表变更的行信息,而无需遍历整个数据表,并且目标数据库设备可以按照数据表或者主键实现并行的数据写入,由此提高目标数据库设备的写入性能。因此,生成数据同步信息时,若变更的行信息所在的数据表中包含主键,数据库设备的解析装置410可以将该数据表的主键列的列名也作为一项索引信息获取,包含于数据同步信息中,由此在进行数据同步过程中实现高性能的写入。
作为另一种实施方式,本申请实施例还提供了一种用于生成数据同步信息的数据库设备,其中,该设备包括:处理器;以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:基于数据库的重做日志获取事务逻辑信息,其中,所述事务逻辑信息至少包括事务标识、事务开始时间、事务提交时间以及事务的变更数据信息;以及向客户端发送所述事务逻辑信息,以使所述客户端根据所述事务逻辑信息生成用于数据同步的结构化查询语句
本申请实施例还提供了一种用于生成数据同步信息的客户端设备,其中,该设备包括:处理器;以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:从数据库设备接收基于重做日志获取的事务逻辑信息,其中,所述事务逻辑信息至少包括事务标识、事务开始时间、事务提交时间以及事务的变更数据信息;以及根据所述事务逻辑信息生成用于数据同步的结构化查询语句。
本申请实施例还提供了一种用于进行数据同步的客户端设备,其中,该设备包括:处理器;以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:从数据库设备接收基于重做日志获取的事务逻辑信息,其中,所述事务逻辑信息至少包括事务标识、事务开始时间、事务提交时间以及事务的变更数据信息;根据所述事务逻辑信息生成用于数据同步的结构化查询语句;以及将所述结构化查询语句发送至目标数据库设备,以使所述目标数据库设备执行所述结构化查询语句,完成数据同步。
综上所述,该方案首先基于重做日志获取事务逻辑信息,该事务逻辑信息表示数据库中每次事务的数据新增、更新、删除等变化情况,数据库设备将事务逻辑信息发送给客户端设备之后,由客户端设备对其进行整合,生成结构化查询语句(SQL语句),作为数据同步信息,此过程中无需利用触发器,因此不会有写放大的问题,处理开销较小。由于结构化查询语句能够适用于任意基于SQL的数据库(例如PostgreSQL、MySQL、SQL Server等),由此在进行数据同步时,可以适用于异构数据库之间的数据同步。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。