CN104978313A - 数据库系统的数据同步方法、装置及服务器 - Google Patents
数据库系统的数据同步方法、装置及服务器 Download PDFInfo
- Publication number
- CN104978313A CN104978313A CN201410129731.6A CN201410129731A CN104978313A CN 104978313 A CN104978313 A CN 104978313A CN 201410129731 A CN201410129731 A CN 201410129731A CN 104978313 A CN104978313 A CN 104978313A
- Authority
- CN
- China
- Prior art keywords
- lcr
- data
- thread
- tables
- affairs
- 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.)
- Withdrawn
Links
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
本发明公开了一种数据库系统的数据同步方法、装置及服务器,其中,所述数据库系统的数据同步方法包括:读取源数据库的逻辑变化记录(LCR)组成的事务段;将该事务段同一数据表对应的LCR分发到多个线程中的同一线程,其中多个线程用于执行上述LCR。通过本发明,多个线程用于执行事务段中的LCR,使得部分或全部不同数据表的数据同步任务可以并行处理,从而提高了数据库系统的数据同步效率。
Description
技术领域
本发明涉及通信领域,具体而言,涉及一种数据库系统的数据同步方法、装置及服务器。
背景技术
自从1970年E.F.Codd博士提出最初的理论模型以来,关系型数据库已经成为所有信息系统中必不可少的基础设施之一,其重要性仅次于操作系统,如今已经没有哪个大型的系统能够脱离数据库而存在。
在实际应用中,由于业务逻辑的复杂性和功能的模块化设计,往往一个信息系统中会部署有多套数据库,而且这多套库之间需要协同合作共享数据,这就要求各数据库之间能够实现数据同步。
为了实现这个目标,各主流数据库厂商都推出了自己的数据同步技术,如Oracle的Streams,Sybase的Replication Server等。其实现数据同步的基本原理都是抓取源数据库的redolog中的LCR,然后到目的数据库上按照逻辑变化记录(Logical Change Record,简称为LCR)发生的顺序逐条进行应用,从而实现目的数据库库的数据与源数据库的数据一致。
LCR数据库界对数据库变动记录的通称。一条LCR体现了源数据库中一条特定记录上的一次特定数操纵语言命令(Data Manipulation Language,简称为DML)操作,其中内容可以包含:操作类型,变动字段列表,字段变化前值,字段变化后值,主键字段名,主键字段值以及事务相关信息等。依据DML操作的上述信息,就可以将这个DML操作复现。
在进行数据同步时,必须按LCR发生的顺序在目的库上进行应用,因为若顺序不一致则会导致源数据库和目的数据库的数据不一致。假设存在两条LCR:LCR1为向数据表t插入一条a,LCR2为更新表t记录a为记录b,若在目的数据库上先执行LCR2则会失败导致数据不一致。
鉴于以上原因,当前的处理模式一般是对LCR进行串行化处理,如图1所示,采用一个线程读取LCR,一个线程执行LCR的模式。由于是串行处理,其必然导致数据同步的效率很低。
针对相关技术中数据库系统的数据同步效率低的问题,目前尚未提出有效的解决方案。
发明内容
针对相关技术中数据库系统的数据同步效率低的问题,本发明提供了一种数据库系统的数据同步方法、装置及服务器,以至少解决上述问题。
根据本发明的一个方面,提供了一种数据库系统的数据同步方法,包括:读取源数据库的LCR组成的事务段;将所述事务段中同一数据表对应的LCR分发到多个线程中的同一线程,其中所述多个线程用于执行所述LCR。
优选地,所述数据表包括有关键约束关系的相关数据表;所述方法还包括:将所述相关数据表对应的LCR分发至同一线程。
优选地,将所述事务段中同一数据表对应的LCR分发到多个线程中的同一线程,包括:按照数据表与线程的对应关系从所述多个线程中选择接收LCR的线程;将数据表对应的LCR分发至选择得到的线程。
优选地,按照以下方式确定所述对应关系:对于无外键约束关系的不同数据表,根据数据表的表名通过预定算法得到对应的不同线程,使一个数据表只对应一个线程,一个线程处理一个或多个数据表;和/或,对于有外键约束关系的不同数据表,通过配置对应到同一个线程。
优选地,上述方法还包括:根据所述事务段中LCR中修改前的数据记录当前事务的undo日志。
优选地,上述方法还包括:在所述事务中任一LCR同步失败时,根据所述undo日志进行回退事务。
根据本发明的另一个方面,提供了一种数据库系统的数据同步装置,包括:读取模块,用于读取源数据库的逻辑变化记录LCR组成的事务段;分发模块,用于将所述事务段中同一数据表对应的LCR分发到多个线程中的同一线程,其中所述多个线程用于执行所述LCR。
优选地,所述分发模块包括:选择单元,用于按照数据表与线程的对应关系从所述多个线程中选择接收LCR的线程;分发单元,将数据表对应的LCR分发至选择得到的线程。
优选地,上述装置还包括:记录模块,用于根据所述LCR中修改前的数据记录当前事务的undo日志。
优选地,上述装置还包括:回退模块,用于在任一所述LCR同步失败时,根据所述undo日志进行回退事务。
根据本发明的再一个方面,还提供了一种服务器,包括:处理器;读取模块,用于读取源数据库的逻辑变化记录LCR组成的事务段;分发模块,用于将所述事务段中同一数据表对应的LCR分发到多个线程中的同一线程,其中所述多个线程用于执行所述LCR。
通过本发明,读取源数据库产生的LCR组成的事务段,将同一数据表对应的LCR分发到多个线程中的同一线程,多个线程用于执行LCR,使得部分或全部不同数据表的数据同步事务可以并行处理,从而提高了数据库系统的数据同步效率。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据相关技术的数据同步方法的示意图;
图2是根据本发明实施例的数据库系统的数据同步方法的流程图;
图3是根据本发明实施例的数据库系统的数据同步装置的结构框图;
图4是根据本发明实施例优选的数据库系统的数据同步装置的结构框图一;
图5是根据本发明实施例优选的数据库系统的数据同步装置的结构框图二;
图6是根据本发明实施例的服务器的结构框图;
图7是根据本发明实施例的数据同步机制的示意图;以及
图8是根据本发明实施例优选的数据同步方法的流程图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
根据本发明实施例,提供了一种数据库系统的数据同步方法。
图2是根据本发明实施例的数据库系统的数据同步方法的流程图,如图2所示,该方法包括步骤S202至步骤S204。
步骤S202,读取源数据库产生的LCR组成的事务段。
步骤S204,将同一数据表对应的LCR分发到多个线程中的同一线程,其中上述多个线程用于执行上述LCR。
在本发明实施例中,用于执行LCR的线程也称为执行线程。对于同一个表执行线程按照该表LCR的先后顺序执行同步,从而保证源数据库和目的数据库数据的一致性。
通过本发明实施例,读取源数据库的LCR组成的事务段,将同一数据表对应的LCR分发到多个线程中的同一线程,多个线程用于执行LCR,使得部分或全部不同数据表的数据同步事务可以并行处理,从而提高了数据库系统的数据同步效率。
需要说明的是,对于不同数据表对应的LCR,也可以按照先后顺序部分分发到相同的进程,在线程数量有限的情况下,可以采用串行处理与并行处理结合的方式,只要存在并行处理则相对于相关技术中的纯串行处理对数据同步效率有所提高。
为提供可扩展性,执行LCR的线程的个数可以根据需要进行配置。
在本发明实施例的一个实施方式中,数据表还可以包括有关键约束关系的相关数据表,即不同的数据表之间存在关联关系。因此,还可以将相关数据表对应的LCR分发至同一线程,以保证源数据库和目的数据库数据的一致性。
在本发明实施例的一个实施方式中,可以按照预先设置的策略选择接收LCR的线程,以将同一数据表对应的LCR分发到多个线程中的同一线程。例如,可以按照数据表与线程的对应关系从多个线程中选择接收LCR的线程;将数据表对应的LCR分发至选择得到的线程。
在实际应用中,可以按照以下方式确定上述的对应关系:对于无外键约束关系的不同数据表,根据数据表的表名通过预定算法得到对应的不同线程,使一个数据表只对应一个线程,一个线程可以处理一个或多个数据表;对于有外键约束关系的不同数据表,通过配置对应到同一线程。
例如,对于无外键约束关系的数据表,根据数据表的表名确定一个哈希值,将该哈希值对多个执行线程的数量取模,每个取模得到的值对应一个线程(每个线程可以有一个标识符);和/或,对于有外键约束关系的数据表,为数据表的表名配置固定哈希值,每个固定的哈希值对应一个线程。
在本发明例的一个实施方式中,为了保证数据同步事务的原子性,还可以根据事务段中的LCR中修改前的数据记录当前事务的undo日志。
在实际应用中,可以将undo日志设置为一个环形队列,所述undo日志的头部记录当前日志的开始位置和写入位置偏移。
在本发明实施例的一个实施方式中,还可以在LCR同步失败时,根据记录的undo日志进行回退。
根据本发明实施例,还提供了一种数据库系统的数据同步装置,用以实现本发明上述实施例的方法,该装置可以是存储在存储介质中的供处理器执行的软件模块。在分布式系统中,该装置也可以分布在多个设备上进行分布式计算/处理。
图3是根据本发明实施例的数据库系统的数据同步装置的结构框图,如图3所示,该装置可以包括:读取模块302和分发模块304,其中,读取模块302,用于读取源数据库的LCR组成的事务段;分发模块304,与读取模块302相连接,用于将事务段中同一数据表对应的LCR分发到多个线程中的同一线程,其中上述多个线程用于执行上述LCR。
通过本发明实施例,读取模块302读取源数据库的LCR组成的事务段,分发模块304将同一数据表对应的LCR分发到多个线程中的同一线程,多个线程用于执行上述LCR,使得部分或全部不同数据表的数据同步事务可以并行处理,从而提高了数据库系统的数据同步效率。
在本发明实施例的一个实施方式中,分发模块304可以包括:选择单元,用于按照数据表与线程的对应关系从多个线程中选择接收LCR的线程;分发单元,将数据表对应的LCR分发至选择得到的线程。
在实际应用中,选择单元可以按照以下方式确定上述的对应关系:对于无外键约束关系的不同数据表,根据数据表的表名通过预定算法得到对应的不同线程,使一个数据表只对应一个线程,一个线程可以处理一个或多个数据表;对于有外键约束关系的不同数据表,通过配置对应到同一线程。
例如,对于无外键约束关系的数据表,根据数据表的表名确定一个哈希值,将该哈希值对多个执行线程的数量取模,每个取模得到的值对应一个线程(每个线程可以有一个标识符);和/或,对于有外键约束关系的数据表,为数据表的表名配置固定哈希值,每个固定的哈希值对应一个线程。
在本发明实施例的一个实施方式中,如图4所示,上述装置还可以包括:记录模块306,用于根据事务段中的LCR中修改前的数据记录当前事务的undo日志。在实际应用中,可以将undo日志设置为一个环形队列,所述undo日志的头部记录当前日志的开始位置和写入位置偏移。
在本发明实施例的一个实施方式中,如图5所示,上述装置还可以包括:回退模块308,用于在任一上述LCR同步失败时,根据undo日志进行回退事务。通过记录undo日志,并根据undo日志进行回退事务,可以有效的保证数据同步事务的原子性。
根据本发明实施例,还提供了一种服务器。
图6是根据本发明实施例的服务器的结构框图,如图6所示,该服务器可以包括:处理器602;读取模块604,用于读取源数据库的LCR组成的LCR;分发模块606,与读取模块604相连接,用于将事务段中同一数据表对应的LCR分发到多个线程中的同一线程,其中上述多个线程用于执行上述LCR。
为了便于理解本发明实施例,下面结合本发明实施例的一个实施实例进行描述。
图7是根据本发明实施例的数据同步机制的示意图,如图7所示,包括一个管理线程和多个执行线程,其中,管理线程可以实现读取LCR以及分发LCR的操作,执行线程用于执行数据同步事务。具体的:
一个管理线程用于读取源数据库产生的LCR组成的事务段、解析LCR、提取出当前事务中的所有语句以及对应的库名和表名。若当前事务中只涉及一个表(下称单表事务)则将事务中的所有语句提交给根据数据表快速选出的一个执行线程(单表事务也可以不记录undo日志,由执行线程判断若当前事务任一LCR执行失败直接执行rollback语句回退事务);若当前事务中涉及多个数据表(下称多表事务)则将事务中各个语句发送给根据数据表快速选出的不同线程,同时根据LCR中修改前数据记录当前事务的undo日志。在执行线程返回失败时,根据undo日志回退事务。
若干个执行线程,用于接收管理线程发送的执行语句并在目的库上执行,若当前语句为多表事务中的语句则需要将执行结果返回给管理线程。
由于数据是以数据表的形式存储,同步时对于目的数据库来说只要保证对于各个表的操作顺序与源数据库保持一致即可。本发明实施例中,按数据表来分发到不同的执行线程,相同数据表的执行语句必然分发到同一执行线程有效地保证了同步的时序性。对于多表事务记录undo日志以便某个执行线程返回失败时回退事务,有效地保证了事务的原子性。
在本发明实施例中,数据同步可以包括如下几个过程:
第一,管理线程同时连通源数据库和目的数据库,若干执行线程连通目的数据库。
第二,管理线程以某种方式从源数据库抓取由若干个LCR组成的事务段,并建立一套LCR分发机制。
上述机制可以实现为:根据数据表快速选择出执行线程,同一表的LCR必定选择出同一执行线程。具有外键约束关系的相关数据表的LCR要求选择出同一执行线程,以确保具有外键约束关系的数据表的执行顺序与源数据库一致。
分发机制的实现可以有多种方法,例如,对于无外键约束关系的数据表可以通过表名计算出一个hash值,再将hash值对执行线程的个数取模,得到对应的执行线程;对于存在外键约束关系的数据表,可以通过配置固定hash值使得确保得到同一执行线程。
第三,管理线程将单表事务(事务中只涉及对一个表的修改)中所有LCR分发给某一选出的执行线程,若为多表事务(事务中涉及对多个表的修改)则记录事务undo日志,并逐个将事务段中的各个LCR分发给选出的执行线程。建立一套无需用户干预的undo日志管理机制。
Undo日志的管理机制可以实现为:初始化为可配置的大小,配置的值可以按最大事务来评估。可以将undo日志设计为一个环形队列,undo日志文件的头部记录当前日志的开始位置和写入位置偏移。当前事务的所有LCR在目的库上执行成功,或管理线程回退成功,则将开始位置更新为写入位置即删除undo日志。
第四,执行线程在目的数据库上执行LCR,并判断若当前LCR为多表事务中的,则将执行结果返回给管理线程。
第五,管理线程根据执行线程返回的结果为失败则根据undo日志回退事务。
图8是根据本发明实施例优选的数据同步方法的流程图,如图8所示,该方法包括以下步骤(步骤S802至步骤S830):
步骤S802,抓取LCR组成的事务段。
步骤S804,解析LCR,判断是否为单表事务,如果是,进入步骤S806,否则,进入步骤S810。
步骤S806,按数据表将数据表ti操作分发到执行线程i。
步骤S808,将当前事务重做入库到目的数据库,结束。
步骤S810,记录undo日志。
步骤S812,将数据表ti操作分发到执行线程i。
步骤S814,将当前表ti重做入库到目的数据库。
步骤S816,返回执行结果。
步骤S818,将数据表tj操作分发到执行线程j。
步骤S820,将当前表tj重做入库到目的数据库。
步骤S822,返回执行结果。
步骤S824,判断执行线程i和j是否成功,如果是,进入步骤S826,否则,进入步骤S828。
步骤S826,清除undo日志,结束。
步骤S828,执行回滚任务。
步骤S830,清除undo日志,结束。
下面结合实例对本发明实施例的上述方法进行描述。
实例一
本实例说明了在一个典型的应用场景中,一个事务中有2条对同一数据表的操作LCR:
步骤A1:假定源数据库和目的数据库中都存在数据表TAB,定义如下:
CREATE TABLE TAB(
FLD_A INT PRIMARY KEY,
FLD_B CHAR(10),
FLD_C VARCHAR(10))。
该表三个字段代表了三种最常用的数据类型,其中FLD_A为主键。
步骤B1:在源数据库中对表TAB执行一个事务包括1次插入(INSERT)动作,一次更新(UPDATE)动作:
BEGIN
INSERT INTO TAB VALUES(1,’A’,’B’);
UPDATE TAB SET FLD_B=’B’,FLD_C=’A’WHERE FLD_A=1;
COMMIT
步骤C1:通过某种LCR抓捕机制,抓取到这2次动作,抓到的LCR内容为:
BEGIN:事务开始标记
LCR1内容:
表名:TAB操作类型:INSERT
字段原值列表:无(INSERT动作无原值列表)
字段新值列表:
字段1名字:FLD_A字段1类型:INT 字段1值:1
字段2名字:FLD_B字段2类型:CHAR 字段2值:A
字段3名字:FLD_C字段3类型:VARCHAR字段3值:B
LCR2内容:
表名:TAB操作类型:UPDATE
字段原值列表:
字段1名字:FLD_A字段1类型:INT 字段1值:1
字段2名字:FLD_B字段2类型:CHAR 字段2值:A
字段3名字:FLD_C字段3类型:VARCHAR 字段3值:B
字段新值列表:
字段1名字:FLD_A字段1类型:INT 字段1值:1
字段2名字:FLD_B字段2类型:CHAR 字段2值:B
字段3名字:FLD_C字段3类型:VARCHAR 字段3值:A
COMMIT:事务结束标记
步骤D1:管理线程从BEGIN开始读取LCR直到COMMIT,解析该事务仅涉及一个数据表的操作,通过数据表的表名TAB计算得到fun(TAB)=i,将事务提交给执行线程i。
步骤E1:执行线程i将事务在目的库上进行应用。
实例二
本实例说明了在一个典型的应用场景中,一个事务中有2条对不同数据表的操作LCR,数据同步成功:
步骤A2:表TAB结构沿用实例一中A1步骤的表。表TAB1仅表名与表TAB不一样,结构一样。
步骤B2:在源数据库中执行一个事务包括1次对数据表TAB的INSERT动作,一次对数据表TAB1的INSERT动作:
BEGIN
INSERT INTO TAB VALUES(1,’A’,’B’);
INSERT INTO TAB1VALUES(2,’A’,’B’);
COMMIT
步骤C2:通过某种LCR抓捕机制,抓取到事务的这2次动作,抓到的LCR内容为:
BEGIN:事务开始标记
LCR1内容:
表名:TAB操作类型:INSERT
字段原值列表:无(INSERT动作无原值列表)
字段新值列表:
字段1名字:FLD_A字段1类型:INT 字段1值:1
字段2名字:FLD_B字段2类型:CHAR 字段2值:A
字段3名字:FLD_C字段3类型:VARCHAR 字段3值:B
LCR2内容:
表名:TAB1操作类型:INSERT
字段原值列表:无(INSERT动作无原值列表)
字段新值列表:
字段1名字:FLD_A字段1类型:INT 字段1值:2
字段2名字:FLD_B字段2类型:CHAR 字段2值:A
字段3名字:FLD_C字段3类型:VARCHAR 字段3值:B
COMMIT:事务结束标记
步骤D2:管理线程从BEGIN开始读取LCR直到COMMIT,解析该事务涉及2个数据表的操作,管理线程根据LCR中修改前的值产生undo日志。管理线程通过表名TAB计算得到fun(TAB)=i,通过表名TAB1计算得到fun(TAB1)=j,分别将LCR1提交给执行线程i,将LCR2提交给执行线程j。
步骤E2:管理线程等待执行线程i和执行线程j的响应。
步骤F2:执行线程i将目的库上重做INSERT TAB动作,返回给管理线程成功结果。
步骤G2:执行线程j将目的库上重做INSERT TAB1动作,返回给管理线程成功结果。
步骤H2:管理接收执行线程i和执行线程j的成功响应后删除undo日志。
实例三
本实例说明了在一个典型的应用场景中,一个事务中有2条对不同表的操作LCR,数据同步失败,事务回退:
步骤A3:数据表结构沿用实例二中的表TAB和表TAB1。
步骤B3:在源数据库中执行一个事务包括1次对数据表TAB的INSERT动作,一次对数据表TAB1的INSERT动作:
BEGIN
INSERT INTO TAB VALUES(1,’A’,’B’);
INSERT INTO TAB1VALUES(2,’A’,’B’);
COMMIT
步骤C3:通过某种LCR抓捕机制,抓取到事务的这2次动作,抓到的LCR内容为:
BEGIN:事务开始标记
LCR1内容:
表名:TAB操作类型:INSERT
字段原值列表:无(INSERT动作无原值列表)
字段新值列表:
字段1名字:FLD_A字段1类型:INT 字段1值:1
字段2名字:FLD_B字段2类型:CHAR 字段2值:A
字段3名字:FLD_C字段3类型:VARCHAR 字段3值:B
LCR2内容:
表名:TAB1操作类型:INSERT
字段原值列表:无(INSERT动作无原值列表)
字段新值列表:
字段1名字:FLD_A字段1类型:INT 字段1值:2
字段2名字:FLD_B字段2类型:CHAR 字段2值:A
字段3名字:FLD_C字段3类型:VARCHAR 字段3值:B
COMMIT:事务结束标记
步骤D3:管理线程从BEGIN开始读取事务直到COMMIT,解析该事务涉及2个表的操作,管理线程根据LCR中修改前的值产生undo日志。管理线程通过表名TAB计算得到fun(TAB)=i,通过表名TAB1计算得到fun(TAB1)=j,将LCR1提交给执行线程i,将LCR2提交给执行线程j。
步骤E3:管理线程等待执行线程i和执行线程j的响应。
步骤F3:执行线程i将目的库上重做INSERT TAB动作,返回给管理线程失败结果。
步骤G3:执行线程j将目的库上重做INSERT TAB1动作,返回给管理线程成功结果。
步骤H3:管理接收执行线程i和执行线程j的响应后,判断事务中任一LCR执行失败则根据undo日志回退事务。
步骤I3:管理线程在目的库上执行回退操作后删除undo日志。
从以上的描述中,可以看出,本发明实现了如下技术效果:本发明实施例采用多线程同步方式,提高了同步效率。按数据表分发不同线程,减少了不同线程对表操作的锁竞争以及死锁的发生概率,进一步提升同步性能。根据表将LCR分发到不同的线程执行,保证了目的库中表操作执行顺序与源数据库一致。另外,将具有外键约束关系的不同数据表分发到同一执行线程,避免了由于源数据库和目的数据库执行顺序不同而造成的数据不一致。对于多个不同数据表操作的事务,记录undo日志,若事务中任一LCR同步失败,则根据undo日志回退,保证了事务的原子性。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (11)
1.一种数据库系统的数据同步方法,其特征在于,包括:
读取源数据库的逻辑变化记录LCR组成的事务段;
将所述事务段中同一数据表对应的LCR分发到多个线程中的同一线程,其中所述多个线程用于执行所述LCR。
2.根据权利要求1所述的方法,其特征在于,所述数据表包括有关键约束关系的相关数据表;所述方法还包括:将所述相关数据表对应的LCR分发至同一线程。
3.根据权利要求1所述的方法,其特征在于,将所述事务段中同一数据表对应的LCR分发到多个线程中的同一线程,包括:
按照数据表与线程的对应关系从所述多个线程中选择接收LCR的线程;
将数据表对应的LCR分发至选择得到的线程。
4.根据权利要求3所述的方法,其特征在于,按照以下方式确定所述对应关系:
对于无外键约束关系的不同数据表,根据数据表的表名通过预定算法得到对应的不同线程,使一个数据表只对应一个线程,一个线程处理一个或多个数据表;
对于有外键约束关系的不同数据表,通过配置对应到同一线程。
5.根据权利要求1至4中任一项所述的方法,其特征在于,还包括:
根据所述LCR中修改前的数据记录当前事务的undo日志。
6.根据权利要求5所述的方法,其特征在于,还包括:在所述事务中的任一LCR同步失败时,根据所述undo日志进行回退事务。
7.一种数据库系统的数据同步装置,其特征在于,包括:
读取模块,用于读取源数据库的逻辑变化记录LCR组成的事务段;
分发模块,用于将所述事务段中同一数据表对应的LCR分发到多个线程中的同一线程,其中所述多个线程用于执行所述LCR。
8.根据权利要求7所述的装置,其特征在于,所述分发模块包括:
选择单元,用于按照数据表与线程的对应关系从所述多个线程中选择接收LCR的线程;
分发单元,将数据表对应的LCR分发至选择得到的线程。
9.根据权利要求7或8所述的装置,其特征在于,还包括:
记录模块,用于根据所述LCR中修改前的数据记录当前事务的undo日志。
10.根据权利要求9所述的装置,其特征在于,还包括:
回退模块,用于在任一所述LCR同步失败时,根据所述undo日志进行回退事务。
11.一种服务器,其特征在于,包括:
处理器;
读取模块,用于读取源数据库的逻辑变化记录LCR组成的事务段;
分发模块,用于将所述事务段中同一数据表对应的LCR分发到多个线程中的同一线程,其中所述多个线程用于执行所述LCR。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410129731.6A CN104978313A (zh) | 2014-04-01 | 2014-04-01 | 数据库系统的数据同步方法、装置及服务器 |
PCT/CN2014/083833 WO2015149461A1 (zh) | 2014-04-01 | 2014-08-06 | 数据库系统的数据同步方法、装置及服务器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410129731.6A CN104978313A (zh) | 2014-04-01 | 2014-04-01 | 数据库系统的数据同步方法、装置及服务器 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104978313A true CN104978313A (zh) | 2015-10-14 |
Family
ID=54239354
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410129731.6A Withdrawn CN104978313A (zh) | 2014-04-01 | 2014-04-01 | 数据库系统的数据同步方法、装置及服务器 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN104978313A (zh) |
WO (1) | WO2015149461A1 (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105930397A (zh) * | 2016-04-15 | 2016-09-07 | 北京思特奇信息技术股份有限公司 | 一种消息处理方法和系统 |
CN106777270A (zh) * | 2016-12-28 | 2017-05-31 | 中国民航信息网络股份有限公司 | 一种基于提交点时间线同步的异构数据库复制并行执行系统及方法 |
CN106802897A (zh) * | 2015-11-26 | 2017-06-06 | 北京国双科技有限公司 | 查询表数据同步方法和装置 |
CN109299116A (zh) * | 2018-12-05 | 2019-02-01 | 浪潮电子信息产业股份有限公司 | 一种数据同步方法、装置、设备及可读存储介质 |
CN109710629A (zh) * | 2019-01-08 | 2019-05-03 | 上海达梦数据库有限公司 | 数据访问方法、装置、服务器和存储介质 |
CN111858744A (zh) * | 2019-04-29 | 2020-10-30 | 北京嘀嘀无限科技发展有限公司 | 数据库数据同步方法、服务器及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1564640A1 (en) * | 2002-10-21 | 2005-08-17 | Annex Systems Incorporated | Database accelerator |
US20060015546A1 (en) * | 2002-03-06 | 2006-01-19 | Colligo Networks, Inc. | Synchronous peer-to-peer multipoint database synchronization |
CN102222071A (zh) * | 2010-04-16 | 2011-10-19 | 华为技术有限公司 | 数据同步处理方法、设备及系统 |
CN103345502A (zh) * | 2013-07-01 | 2013-10-09 | 曙光信息产业(北京)有限公司 | 分布式数据库的事务处理方法和系统 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5729733A (en) * | 1995-05-05 | 1998-03-17 | Harris Corporation | Method of operating a distributed databse based on object ownership and transaction classification utilizing an aggressive reverse one phase commit protocol |
CN101876996A (zh) * | 2009-12-01 | 2010-11-03 | 广州从兴电子开发有限公司 | 一种内存数据库到文件数据库的数据同步方法及系统 |
CN101719149B (zh) * | 2009-12-03 | 2012-02-08 | 联动优势科技有限公司 | 数据同步方法及装置 |
CN103186624B (zh) * | 2011-12-31 | 2017-10-20 | 亿阳信通股份有限公司 | 一种数据同步方法和数据同步装置 |
-
2014
- 2014-04-01 CN CN201410129731.6A patent/CN104978313A/zh not_active Withdrawn
- 2014-08-06 WO PCT/CN2014/083833 patent/WO2015149461A1/zh active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060015546A1 (en) * | 2002-03-06 | 2006-01-19 | Colligo Networks, Inc. | Synchronous peer-to-peer multipoint database synchronization |
EP1564640A1 (en) * | 2002-10-21 | 2005-08-17 | Annex Systems Incorporated | Database accelerator |
CN102222071A (zh) * | 2010-04-16 | 2011-10-19 | 华为技术有限公司 | 数据同步处理方法、设备及系统 |
CN103345502A (zh) * | 2013-07-01 | 2013-10-09 | 曙光信息产业(北京)有限公司 | 分布式数据库的事务处理方法和系统 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106802897A (zh) * | 2015-11-26 | 2017-06-06 | 北京国双科技有限公司 | 查询表数据同步方法和装置 |
CN105930397A (zh) * | 2016-04-15 | 2016-09-07 | 北京思特奇信息技术股份有限公司 | 一种消息处理方法和系统 |
CN105930397B (zh) * | 2016-04-15 | 2019-05-17 | 北京思特奇信息技术股份有限公司 | 一种消息处理方法和系统 |
CN106777270A (zh) * | 2016-12-28 | 2017-05-31 | 中国民航信息网络股份有限公司 | 一种基于提交点时间线同步的异构数据库复制并行执行系统及方法 |
CN109299116A (zh) * | 2018-12-05 | 2019-02-01 | 浪潮电子信息产业股份有限公司 | 一种数据同步方法、装置、设备及可读存储介质 |
CN109710629A (zh) * | 2019-01-08 | 2019-05-03 | 上海达梦数据库有限公司 | 数据访问方法、装置、服务器和存储介质 |
CN109710629B (zh) * | 2019-01-08 | 2020-12-18 | 上海达梦数据库有限公司 | 数据访问方法、装置、服务器和存储介质 |
CN111858744A (zh) * | 2019-04-29 | 2020-10-30 | 北京嘀嘀无限科技发展有限公司 | 数据库数据同步方法、服务器及系统 |
Also Published As
Publication number | Publication date |
---|---|
WO2015149461A1 (zh) | 2015-10-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104978313A (zh) | 数据库系统的数据同步方法、装置及服务器 | |
Hellings et al. | Byshard: Sharding in a byzantine environment | |
CN108062672B (zh) | 一种基于区块链智能合约的流程调度方法 | |
US10289443B2 (en) | System and method for sharing global transaction identifier (GTRID) in a transactional middleware environment | |
US7426653B2 (en) | Fault tolerant distributed lock management | |
CN110309161B (zh) | 一种数据同步方法、装置及服务器 | |
US20090037553A1 (en) | Configuring or Reconfiguring a Multi-Master Information Sharing Environment | |
CN106033562B (zh) | 事务处理方法、事务参与节点及事务协调节点 | |
US9171252B2 (en) | Synchronization for context-aware complex event processing | |
WO2019047441A1 (zh) | 一种通信优化方法及系统 | |
US20200169557A1 (en) | Data processing method and device, blockchain client, and blockchain node | |
CN107870982B (zh) | 数据处理方法、系统和计算机可读存储介质 | |
Nawab et al. | Message Futures: Fast Commitment of Transactions in Multi-datacenter Environments. | |
CN110222119A (zh) | 一种异构数据库的数据转换同步方法、设备及存储介质 | |
CN109002462A (zh) | 一种实现分布式事物的方法及系统 | |
CN112925614B (zh) | 一种分布式事务处理方法、装置、介质和设备 | |
CN106055723A (zh) | 一种数据库数据同步装置、系统及方法 | |
US20090037442A1 (en) | Reconfiguring Propagation Streams in Distributed Information Sharing | |
CN111026813A (zh) | 一种基于MySQL的高可用准实时数据同步方法 | |
Zhao et al. | Deterministic scheduling for multithreaded replicas | |
US20100275217A1 (en) | Global attribute uniqueness (gau) using an ordered message service (oms) | |
CN110334146A (zh) | 一种数据源之间的数据传输方法 | |
Rawashdeh et al. | An optimistic approach in distributed database concurrency control | |
Rathbun | Parallel Processing with Promises: A simple method of writing a collaborative system | |
Ramesh et al. | Hash based incremental optimistic concurrency control algorithm in distributed databases |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WW01 | Invention patent application withdrawn after publication | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20151014 |