数据库系统的数据同步方法、装置及服务器的制造方法

文档序号:9261347阅读:585来源:国知局
数据库系统的数据同步方法、装置及服务器的制造方法
【技术领域】
[0001]本发明涉及通信领域,具体而言,涉及一种数据库系统的数据同步方法、装置及服务器。
【背景技术】
[0002]自从1970年E.F.Codd博士提出最初的理论模型以来,关系型数据库已经成为所有信息系统中必不可少的基础设施之一,其重要性仅次于操作系统,如今已经没有哪个大型的系统能够脱离数据库而存在。
[0003]在实际应用中,由于业务逻辑的复杂性和功能的模块化设计,往往一个信息系统中会部署有多套数据库,而且这多套库之间需要协同合作共享数据,这就要求各数据库之间能够实现数据同步。
[0004]为了实现这个目标,各主流数据库厂商都推出了自己的数据同步技术,如Oracle的Streams, Sybase的Replicat1n Server等。其实现数据同步的基本原理都是抓取源数据库的redolog中的LCR,然后到目的数据库上按照逻辑变化记录(Logical ChangeRecord,简称为LCR)发生的顺序逐条进行应用,从而实现目的数据库库的数据与源数据库的数据一致。
[0005]LCR数据库界对数据库变动记录的通称。一条LCR体现了源数据库中一条特定记录上的一次特定数操纵语言命令(Data Manipulat1n Language,简称为DML)操作,其中内容可以包含:操作类型,变动字段列表,字段变化前值,字段变化后值,主键字段名,主键字段值以及事务相关信息等。依据DML操作的上述信息,就可以将这个DML操作复现。
[0006]在进行数据同步时,必须按LCR发生的顺序在目的库上进行应用,因为若顺序不一致则会导致源数据库和目的数据库的数据不一致。假设存在两条LCR:LCR1为向数据表t插入一条a,LCR2为更新表t记录a为记录b,若在目的数据库上先执行LCR2则会失败导致数据不一致。
[0007]鉴于以上原因,当前的处理模式一般是对LCR进行串行化处理,如图1所示,采用一个线程读取LCR,一个线程执行LCR的模式。由于是串行处理,其必然导致数据同步的效率很低。
[0008]针对相关技术中数据库系统的数据同步效率低的问题,目前尚未提出有效的解决方案。

【发明内容】

[0009]针对相关技术中数据库系统的数据同步效率低的问题,本发明提供了一种数据库系统的数据同步方法、装置及服务器,以至少解决上述问题。
[0010]根据本发明的一个方面,提供了一种数据库系统的数据同步方法,包括:读取源数据库的LCR组成的事务段;将所述事务段中同一数据表对应的LCR分发到多个线程中的同一线程,其中所述多个线程用于执行所述LCR。
[0011]优选地,所述数据表包括有关键约束关系的相关数据表;所述方法还包括:将所述相关数据表对应的LCR分发至同一线程。
[0012]优选地,将所述事务段中同一数据表对应的LCR分发到多个线程中的同一线程,包括:按照数据表与线程的对应关系从所述多个线程中选择接收LCR的线程;将数据表对应的LCR分发至选择得到的线程。
[0013]优选地,按照以下方式确定所述对应关系:对于无外键约束关系的不同数据表,根据数据表的表名通过预定算法得到对应的不同线程,使一个数据表只对应一个线程,一个线程处理一个或多个数据表;和/或,对于有外键约束关系的不同数据表,通过配置对应到同一个线程。
[0014]优选地,上述方法还包括:根据所述事务段中LCR中修改前的数据记录当前事务的undo日志ο
[0015]优选地,上述方法还包括:在所述事务中任一LCR同步失败时,根据所述undo日志进行回退事务。
[0016]根据本发明的另一个方面,提供了一种数据库系统的数据同步装置,包括:读取模块,用于读取源数据库的逻辑变化记录LCR组成的事务段;分发模块,用于将所述事务段中同一数据表对应的LCR分发到多个线程中的同一线程,其中所述多个线程用于执行所述LCR。
[0017]优选地,所述分发模块包括:选择单元,用于按照数据表与线程的对应关系从所述多个线程中选择接收LCR的线程;分发单元,将数据表对应的LCR分发至选择得到的线程。
[0018]优选地,上述装置还包括:记录模块,用于根据所述LCR中修改前的数据记录当前事务的undo日志。
[0019]优选地,上述装置还包括:回退模块,用于在任一所述LCR同步失败时,根据所述undo日志进行回退事务。
[0020]根据本发明的再一个方面,还提供了一种服务器,包括:处理器;读取模块,用于读取源数据库的逻辑变化记录LCR组成的事务段;分发模块,用于将所述事务段中同一数据表对应的LCR分发到多个线程中的同一线程,其中所述多个线程用于执行所述LCR。
[0021]通过本发明,读取源数据库产生的LCR组成的事务段,将同一数据表对应的LCR分发到多个线程中的同一线程,多个线程用于执行LCR,使得部分或全部不同数据表的数据同步事务可以并行处理,从而提高了数据库系统的数据同步效率。
【附图说明】
[0022]此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
[0023]图1是根据相关技术的数据同步方法的示意图;
[0024]图2是根据本发明实施例的数据库系统的数据同步方法的流程图;
[0025]图3是根据本发明实施例的数据库系统的数据同步装置的结构框图;
[0026]图4是根据本发明实施例优选的数据库系统的数据同步装置的结构框图一;
[0027]图5是根据本发明实施例优选的数据库系统的数据同步装置的结构框图二 ;
[0028]图6是根据本发明实施例的服务器的结构框图;
[0029]图7是根据本发明实施例的数据同步机制的示意图;以及
[0030]图8是根据本发明实施例优选的数据同步方法的流程图。
【具体实施方式】
[0031]下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
[0032]根据本发明实施例,提供了一种数据库系统的数据同步方法。
[0033]图2是根据本发明实施例的数据库系统的数据同步方法的流程图,如图2所示,该方法包括步骤S202至步骤S204。
[0034]步骤S202,读取源数据库产生的LCR组成的事务段。
[0035]步骤S204,将同一数据表对应的LCR分发到多个线程中的同一线程,其中上述多个线程用于执行上述LCR。
[0036]在本发明实施例中,用于执行LCR的线程也称为执行线程。对于同一个表执行线程按照该表LCR的先后顺序执行同步,从而保证源数据库和目的数据库数据的一致性。
[0037]通过本发明实施例,读取源数据库的LCR组成的事务段,将同一数据表对应的LCR分发到多个线程中的同一线程,多个线程用于执行LCR,使得部分或全部不同数据表的数据同步事务可以并行处理,从而提高了数据库系统的数据同步效率。
[0038]需要说明的是,对于不同数据表对应的LCR,也可以按照先后顺序部分分发到相同的进程,在线程数量有限的情况下,可以采用串行处理与并行处理结合的方式,只要存在并行处理则相对于相关技术中的纯串行处理对数据同步效率有所提高。
[0039]为提供可扩展性,执行LCR的线程的个数可以根据需要进行配置。
[0040]在本发明实施例的一个实施方式中,数据表还可以包括有关键约束关系的相关数据表,即不同的数据表之间存在关联关系。因此,还可以将相关数据表对应的LCR分发至同一线程,以保证源数据库和目的数据库数据的一致性。
[0041]在本发明实施例的一个实施方式中,可以按照预先设置的策略选择接收LCR的线程,以将同一数据表对应的LCR分发到多个线程中的同一线程。例如,可以按照数据表与线程的对应关系从多个线程中选择接收LCR的线程;将数据表对应的LCR分发至选择得到的线程。
[0042]在实际应用中,可以按照以下方式确定上述的对应关系:对于无外键约束关系的不同数据表,根据数据表的表名通过预定算法得到对应的不同线程,使一个数据表只对应一个线程,一个线程可以处理一个或多个数据表;对于有外键约束关系的不同数据表,通过配置对应到同一线程。
[0043]例如,对于无外键约束关系的数据表,根据数据表的表名确定一个哈希值,将该哈希值对多个执行线程的数量取模,每个取模得到的值对应一个线程(每个线程可以有一个标识符);和/或,对于有外键约束关系的数据表,为数据表的表名配置固定哈希值,每个固定的哈希值对应一个线程。
[0044]在本发明例的一个实施方式中,为了保证数据同步事务的原子性,还可以根据事务段中的LCR中修改前的数据记录当前事务的undo日志。
[0045]在实际应用中,可以将undo日志设置为一个环形队列,所述undo日志的头部记录当前日志的开始位置和写入位置偏移。
[0046]在本发明实施例的一个实施方式中,还可以在LCR同步失败时,根据记录的undo日志进行回退。
[0047]根据本发明实施例,还提供了一种数据库系统的数据同步装置,用以实现本发明上述实施例的方法,该装置可以是存储在存储介质中的供处理器执行的软件模块。在分布式系统中,该装置也可以分布在多个设备上进行分布式计算/处理。
[0048]图3是根据本发明实施例的数据库系统的数据同步装置的结构框图,如图3所示,该装置可以包括:读取模块302和分发模块304,其中,读取模块302,用于读取源数据库的LCR组成的事务段;分发模块304,与读取模块302相连接,用于将事务段中同一数据表对应的LCR分发到多个线程中的同一线程,其中上述多个线程用于执行上述LCR。
[0049]通过本发明实施例,读取模块302读取源数据库的LCR组成的事务段,分发模块304将同一数据表对应的LCR分发到多个线程中的同一线程,多个线程用于执行上述LCR,使得部分或全部不同数据表的数据同步事务可以并行处理,从而提高了数据库系统
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1