CN103631831A - 一种数据备份方法及装置 - Google Patents
一种数据备份方法及装置 Download PDFInfo
- Publication number
- CN103631831A CN103631831A CN201210312721.7A CN201210312721A CN103631831A CN 103631831 A CN103631831 A CN 103631831A CN 201210312721 A CN201210312721 A CN 201210312721A CN 103631831 A CN103631831 A CN 103631831A
- Authority
- CN
- China
- Prior art keywords
- affairs
- dependent
- row
- value
- processing list
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1458—Management of the backup or restore process
- G06F11/1461—Backup scheduling policy
-
- 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/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
Abstract
本申请公开了一种数据备份方法及装置,用以解决现有技术中浪费备库的系统资源的问题。该方法备库将relay日志中未处理的事务添加到处理表中,采用空闲的线程并行的对处理表中的各非依赖性事务进行处理,其中,针对处理表中的一个事务,如果处理表中不存在在relay日志中排在该事务之前、且与该事务冲突的其他事务,则该事务为非依赖性事务。通过上述方法,备库对于互不依赖的各事务,并不根据各事务的特征值来确定用于处理各事务的线程,而是直接采用空闲的线程处理互不依赖的各事务,因此不会使线程长时间处于闲置状态,节省了备库的系统资源。
Description
技术领域
本申请涉及通信技术领域,尤其涉及一种数据备份方法及装置。
背景技术
MySQL是一种小型关系型数据库管理系统。一般的,MySQL包括主库和备库,主库用于提供数据管理和数据查询等功能,备库用于备份主库中的数据,用以在主库发生故障时代替主库提供相应的功能。
图1为现有技术中MySQL中的主库将自身的数据备份到备库的过程,具体包括以下步骤:
S101:主库在对自身的数据进行操作时,生成对应的操作记录并记录在二进制日志(binlog)中。
其中,主库对自身的数据的操作包括:更新操作、插入操作、删除操作。
例如,主库将自身的数据A更新为数据B时,生成将该数据A更新为数据B的操作记录,并记录在binlog日志中。
S102:备库创建一个I/O线程,通过该I/O线程读取主库保存的binlog日志。
S103:备库将读取到的binlog日志转换成中继日志(relay)。
其中,主库保存的binlog日志中记录的操作记录,与备库转换的relay日志中记录的操作记录相同,只是binlog日志与relay日志的格式不同。
继续沿用上例,由于主库的binlog日志中记录有将数据A更新为数据B的操作记录,因此备库转换的relay日志中也包含将数据A更新为数据B的操作记录。
S104:备库创建一个SQL线程,通过创建的SQL线程依次读取relay日志中记录的每个操作记录。
继续沿用上例,备库读取到的操作记录即为将数据A更新为数据B的操作记录。
S105:备库根据读取到的操作记录,将该操作记录对应的数据读取到内存中,并根据该操作记录对内存中的该数据进行相应操作。
继续沿用上例,由于读取到的操作记录为将数据A更新为数据B的操作记录,因此该操作记录对应的数据即为备库中保存的数据A。备库则将该数据A读取到内存中,再将该操作记录(将数据A更新为数据B的操作记录)解析为相应的执行语句并执行,用以将内存中的该数据A更新为数据B,完成对主库数据的备份。
由上述图1所示的过程可以看出,备库在备份主库中的数据时,是通过创建的一个SQL线程依次读取relay日志中的操作记录进行操作的,也即备库是通过一个SQL线程串行的执行relay日志中各操作记录对应的执行语句,实现数据的备份的。而在实际应用中,主库通常是通过多个线程并行的对保存的各数据进行操作的,例如主库可以同时通过几十个线程并行的对相应数量的数据进行操作,而备库在备份这些数据时,只能通过一个线程串行的备份这些数据,这就会导致备库对主库数据的备份速度远远落后于主库对自身保存的数据进行操作的速度。
为了提高备库对主库数据进行备份的速度,现有技术中主要采用以下方法:
按照relay日志中记录各待处理事务的先后顺序,依次针对relay日志中的每个待处理事务,判断当前正在处理的事务中是否存在与该待处理事务冲突的事务,若是,则将该待处理事务加入到与该待处理事务冲突的事务所在的SQL线程的等待队列中等待处理,否则,确定该待处理事务的特征值,根据该特征值确定处理该待处理事务的SQL线程,将该待处理事务加入到确定的SQL线程的等待队列中等待处理。
其中,binlog日志和relay日志均是以事务的形式对操作记录进行记录的,一个事务中包含若干个操作记录,这若干个操作记录一般是用户在进行一个业务操作时,数据库根据这个业务操作对自身保存的数据所要做出的若干个操作所对应的若干个操作记录。并且,在binlog日志和relay日志中,每个事务均具有一个事务开始标记和事务结束标记。两个冲突的事务即为:包含的操作记录对应的数据相同的两个事务。
可见,现有技术中对于互不冲突的各事务,是根据各事务的特征值来确定用于并行处理各事务的SQL线程的,例如可以通过哈希(hash)算法确定各事务的特征值,并根据预设的特征值与SQL线程的对应关系,将互不冲突的各事务添加到相应SQL线程的等待队列中,以等待相应SQL线程的处理。
然而,由于备库需要备份的数据是海量的,也即备库需要处理大量的事务,因此很难找到一种可以使大量互不冲突的事务能够被均匀的分配到有限数量的SQL线程上进行处理hash算法,这就会导致备库虽然预先建立了多个用于并行处理互不冲突的事务的SQL线程,但是有些SQL线程的等待队列中长时间存在很多待处理事务,而有些SQL线程的等待队列中则长时间没有待处理事务而处于闲置状态,这显然浪费了备库的系统资源。
发明内容
本申请实施例提供一种数据备份方法及装置,用以解决现有技术中浪费备库的系统资源的问题。
本申请实施例提供的一种数据备份方法,包括:
备库按照relay日志中记录事务的先后顺序,依次将所述relay日志中未处理的事务添加到预设的处理表中;并
在所述处理表包含的事务中确定出非依赖性事务,其中,针对所述处理表中的一个事务,如果所述处理表中不存在在relay日志中排在该事务之前、且与该事务冲突的其他事务,则确定该事务为非依赖性事务;以及
采用空闲的线程并行的处理确定出的各非依赖性事务。
本申请实施例提供的一种数据备份装置,包括:
添加模块,用于按照relay日志中记录事务的先后顺序,依次将所述relay日志中未处理的事务添加到预设的处理表中;
确定模块,用于在所述处理表包含的事务中确定出非依赖性事务,其中,针对所述处理表中的一个事务,如果所述处理表中不存在在relay日志中排在该事务之前、且与该事务冲突的其他事务,则确定该事务为非依赖性事务;
处理模块,用于采用空闲的线程并行的处理确定出的各非依赖性事务。
本申请实施例提供一种数据备份方法及装置,该方法备库将relay日志中未处理的事务添加到处理表中,采用空闲的线程并行的对处理表中的各非依赖性事务进行处理,其中,针对处理表中的一个事务,如果处理表中不存在在relay日志中排在该事务之前、且与该事务冲突的其他事务,则该事务为非依赖性事务。通过上述方法,备库对于互不依赖的各事务,并不根据各事务的特征值来确定用于处理各事务的线程,而是直接采用空闲的线程处理互不依赖的各事务,因此不会使线程长时间处于闲置状态,节省了备库的系统资源。
附图说明
图1为现有技术中MySQL中的主库将自身的数据备份到备库的过程;
图2为本申请实施例提供的数据备份的过程;
图3为本申请实施例提供的数据备份的详细过程;
图4为本申请实施例提供的在预设的矩阵中选择满足指定条件的行和列,并建立与未处理的事务的对应关系的示意图;
图5为本申请实施例提供的数据备份装置结构示意图。
具体实施方式
由于现有技术中通过hash算法来确定用于处理互不冲突的各事务的线程,因此不可避免的会出现某些线程的等待队列中长时间存在很多待处理事务,也即这些线程长时间处于繁忙状态,而另一些线程的等待队列中长时间没有任何待处理事务,也即这些线程长时间处于闲置状态,这显然浪费了备库为这些处于闲置状态的线程所分配的系统资源。本申请实施例为了节省备库的系统资源,将relay日志中记录的多个事务添加到处理表中,并直接采用空闲的线程对处理表中互不依赖的各事务进行并行处理,通过该方法,则不会出现某些线程长时间处理无事务可处理的闲置状态,充分利用了备库预先建立的多个线程,节省了备库的系统资源。
下面结合说明书附图,对本申请实施例进行详细描述。
图2为本申请实施例提供的数据备份的过程,具体包括以下步骤:
S201:备库按照relay日志中记录事务的先后顺序,依次将relay日志中未处理的事务添加到预设的处理表中。
在本申请实施例中,备库预设一个处理表,该处理表中可以容纳有限数量的事务,例如可以容纳n个事务,n为正整数。备库在读取主库的binlog日志,并将其转换为relay日志之后,则按照relay日志中记录事务的先后顺序,依次将relay日志中未处理的事务添加到该处理表中。
例如,relay日志中按照先后顺序依次记录了未处理的事务1、事务2、事务3,则备库按照relay日志中记录事务的先后顺序,依次将事务1、事务2、事务3添加到处理表中。
S202:在处理表包含的事务中确定出非依赖性事务。
其中,针对处理表中的一个事务,如果处理表中不存在在relay日志中排在该事务之前、且与该事务冲突的其他事务,则确定该事务为非依赖性事务。
继续延用上例,当前添加到处理表中的事务为:事务1、事务2、事务3。假设事务1中包含的两个操作记录分别对应的数据为数据a和数据b,事务2中包含的两个操作记录分别对应的数据为数据a和数据c,事务3中包含的两个操作记录分别对应的数据为数据b和数据d,则:
针对事务1,由于事务1在relay日志中排在事务2和事务3之前,因此处理表中当前不存在在relay日志中排在事务1之前、且与事务1冲突的其他事务,因此事务1为非依赖性事务;
针对事务2,由于事务2在relay日志中排在事务1之后,因此,在当前的处理表中,存在在relay日志中排在事务2之前的事务1。又因为事务2中包含了一个操作记录对应的数据为数据a,事务1中也包含了一个操作记录对应的数据为数据a,因此,事务1与事务2冲突。从而,在当前的处理表中,存在在relay日志中排在事务2之前、且与事务2冲突的事务1,因此事务2为依赖性事务,也即事务2依赖于事务1,需要在事务1处理完成之后再处理事务2;
针对事务3,由于事务3在relay日志中排在事务1和事务2之后,因此,在当前的处理表中,存在在relay日志中排在事务3之前的事务1和事务2。又因为事务3中包含了一个操作记录对应的数据为数据b,事务1中也包含了一个操作记录对应的数据为数据b,因此,事务1与事务3冲突。从而,在当前的处理表中,存在在relay日志中排在事务3之前、且与事务3冲突的事务1,因此事务3为依赖性事务,也即事务3依赖于事务1,需要在事务1处理完成之后再处理事务3。
S203:采用空闲的线程并行的处理确定出的各非依赖性事务。
其中,备库预先建立了多个SQL线程,当在处理表中确定出非依赖性事务时,则针对确定出的每个非依赖性事务,在预先建立的多个SQL线程中选择一个空闲的SQL线程处理该非依赖性事务,也即通过选择的该SQL线程对该非依赖性事务中包含的所有事务进行处理,完成数据的备份。当然,如果当前不存在空闲的线程,则可以等待至出现空闲的线程时,再采用空闲的线程对非依赖性事务进行处理。或者,当确定出的非依赖性事务的数量x大于空闲的线程的数量y时,可以先随机的从x个非依赖性事务中选择出y个非依赖性事务,并采用y个空闲的线程对选择出的非依赖性事务进行并行处理,对于剩余的x-y个非依赖性事务,则每次等待至出现空闲的线程时,随机从x-y个非依赖性事务中选择出一个,并采用空闲的线程进行处理。
继续沿用上例,由于确定出的非依赖性事务为事务1,因此备库采用一个空闲的SQL线程处理事务1。
由于上述方法备库在确定出处理表中的各非依赖性事务之后,并非是根据各非依赖性事务的特征值来确定用于处理各事务的线程,而是直接采用空闲的线程对确定出的各非依赖性事务进行处理,因此不会使备库预先建立的某些线程长时间处于闲置状态,可以充分利用备库预先建立的每个线程进行事务的处理,节省了备库的系统资源。
进一步的,由于现有技术中仅仅是将未处理的事务与当前正在处理的事务进行对比,根据未处理的事务与当前正在处理的事务是否冲突,来决定是否对二者进行串行处理,因此在两个未处理的事务均与当前正在处理的事务冲突,但这两个未处理的事务并不冲突的情况下,现有技术中仍然会采用一个线程对这三个事务进行串行处理,从而降低了备库备份数据的速度。
例如,备库当前正在通过线程1处理事务1,事务1中包含的两个操作记录分别对应的数据为:数据a和数据b。
假设事务2中包含的两个操作记录分别对应的数据为:数据a和数据c,则事务2与事务1冲突(事务2与事务1均包含对应的数据为数据a的操作记录),因此,备库将事务2加入到线程1的等待队列中等待处理。
假设事务3中包含的两个操作记录分别对应的数据为:数据b和数据d,则事务3与事务1也冲突(事务3与事务1均包含对应的数据为数据b的操作记录),因此,备库将事务3加入到线程1的等待队列中等待处理。
此时,线程1的等待队列中就存在两个等待处理的事务,即为事务2和事务3,也即,事务1、事务2、事务3是通过线程1串行处理的。
然而,在上例中,由于事务2中包含的两个操作记录分别对应数据a和数据c,事务3中包含的两个操作记录分别对应数据b和数据d,因此,虽然事务2和事务3均与事务1冲突,但是事务2与事务3并不冲突,而现有技术中通过一个SQL线程串行处理这两个不冲突的事务,显然也会降低备库备份数据的速度。
本申请实施例为了提高备库对主库数据进行备份的速度,将relay日志中记录的多个事务添加到处理表中后,实时分析处理表中添加的所有事务之间的依赖关系,也即不仅要分析未处理的事务与当前正在处理的事务之间的依赖关系,还要分析处理表中各个未处理的事务之间的依赖关系,并对非依赖性事务进行并行处理,因此,在两个未处理的事务均与当前正在处理的事务冲突,但这两个未处理的事务并不冲突的情况下,如果该当前正在处理的事务处理完毕,则两个不冲突的未处理事务之间没有依赖关系,备库则可以采用两个线程并行的处理这两个事务,因此提高了备库备份数据的速度。
图3为本申请实施例提供的数据备份的详细过程,具体包括以下步骤:
S301:备库按照relay日志中记录事务的先后顺序,依次将relay日志中未处理的事务添加到预设的处理表中。
例如,relay日志中按照先后顺序依次记录了未处理的事务1、事务2、事务3,则备库按照relay日志中记录事务的先后顺序,依次将事务1、事务2、事务3添加到处理表中。
S302:判断处理表是否被添满,若是,则执行步骤S304,否则执行步骤S303。
S303:判断relay日志中所有未处理的事务是否都已添加到处理表中,若是,则执行步骤S304,否则返回步骤S301。
由于预设的该处理表中可以容纳的事务的数量是有限的,因此备库每次向该处理表中添加一个事务,就判断该处理表是否已经添满,如果被添满,则执行后续步骤S304,如果尚未被添满,则继续判断relay日志中是否还有未添加到处理表中的未处理的事务,若存在,则继续将relay日志中未处理的事务添加到处理表中,也即返回步骤S301,若不存在,则执行后续步骤S304。
S304:在处理表包含的事务中确定出非依赖性事务。
其中,针对处理表中的一个事务,如果处理表中不存在在relay日志中排在该事务之前、且与该事务冲突的其他事务,则确定该事务为非依赖性事务。
继续延用上例,当前添加到处理表中的事务为:事务1、事务2、事务3。假设事务1中包含的两个操作记录分别对应的数据为数据a和数据b,事务2中包含的两个操作记录分别对应的数据为数据a和数据c,事务3中包含的两个操作记录分别对应的数据为数据b和数据d,则:
针对事务1,由于事务1在relay日志中排在事务2和事务3之前,因此处理表中当前不存在在relay日志中排在事务1之前、且与事务1冲突的其他事务,因此事务1为非依赖性事务;
针对事务2,由于事务2在relay日志中排在事务1之后,因此,在当前的处理表中,存在在relay日志中排在事务2之前的事务1。又因为事务2中包含了一个操作记录对应的数据为数据a,事务1中也包含了一个操作记录对应的数据为数据a,因此,事务1与事务2冲突。从而,在当前的处理表中,存在在relay日志中排在事务2之前、且与事务2冲突的事务1,因此事务2为依赖性事务,也即事务2依赖于事务1,需要在事务1处理完成之后再处理事务2;
针对事务3,由于事务3在relay日志中排在事务1和事务2之后,因此,在当前的处理表中,存在在relay日志中排在事务3之前的事务1和事务2。又因为事务3中包含了一个操作记录对应的数据为数据b,事务1中也包含了一个操作记录对应的数据为数据b,因此,事务1与事务3冲突。从而,在当前的处理表中,存在在relay日志中排在事务3之前、且与事务3冲突的事务1,因此事务3为依赖性事务,也即事务3依赖于事务1,需要在事务1处理完成之后再处理事务3。
S305:采用空闲的线程并行的处理确定出的各非依赖性事务。
继续沿用上例,由于确定出的非依赖性事务为事务1,因此备库采用一个空闲的SQL线程处理事务1。
S306:在非依赖性事务处理完成后,在处理表中删除处理完成的非依赖性事务,并返回步骤S301。
也即,在处理完非依赖性事务之后,在处理表中删除处理完的该非依赖性事务,并继续按照relay日志中记录事务的先后顺序,依次将relay日志中未处理的事务添加到处理表中,并基于更新后的处理表继续执行后续步骤,直至将relay日志中所有未处理的事务都处理完成为止。
继续延用上例,当事务1处理完成之后,在处理表中删除事务1,并返回步骤S301。假设此时relay日志中已经不存在未添加到处理表中的未处理的事务,则此时更新后的处理表中就只包括事务2和事务3。而由于事务2中包含的两个操作记录分别对应数据a和数据c,事务3中包含的两个操作记录分别对应数据b和数据d,因此这两个事务并不冲突,通过步骤S304则可以确定事务2和事务3均为非依赖性事务,从而,在步骤S305中,备库则可以通过两个SQL线程并行的处理事务2和事务3。
由上例可见,由于本申请实施例中删除处理表中已经处理完成的事务,并实时的分析处理表中各事务之间的依赖关系,对非依赖性事务进行处理,因此上例中备库处理事务1、事务2、事务3的过程为:先处理事务1,再同时并行处理事务2和事务3,相比与现有技术中串行的处理事务1、事务2、事务3的方法,本申请实施例提供的上述数据备份方法提高了备库备份数据的速度。
在本申请实施例中,备库预设一个矩阵作为预设的处理表,具体的,备库预设n行n列的矩阵作为预设的处理表,n为正整数。
当备库以矩阵的形式预设处理表时,则图3所示的步骤S301中备库将relay日志中未处理的事务添加到处理表中的具体方法为,在预设的该矩阵中选择满足指定条件的行和列,建立选择的行与该未处理的事务的对应关系,建立选择的列与该未处理的事务的对应关系,其中,满足指定条件的行和列为:行号与列号相等、且未与其他事务建立对应关系的行和列;针对该矩阵中第i行第j列的元素Ei,j,确定该元素Ei,j所在的第j列对应的事务,确定该元素Ei,j所在的第i行对应的事务,如果第j列对应的事务在relay日志中排在第i行对应的事务之前,且第j列对应的事务与第i行对应的事务冲突,则将该元素Ei,j的值设置为第一数值,否则,将该元素Ei,j的值设置为第二数值。其中,预设的该矩阵的行和列的数量n不小于备库预先建立的SQL线程的数量。
继续以上例中的事务1、事务2、事务3为例进行说明。假设预设的矩阵为3行3列的矩阵 当前该矩阵M3×3中没有任何一行和任何一列与其他事务建立对应关系,则该矩阵M3×3中满足指定条件的行和列为:第1行和第1列、第2行和第2列、第3行和第3列。
针对事务1,选择满足指定条件的第1行和第1列,建立第1行与事务1的对应关系,建立第1列与事务1的对应关系。
针对事务2,选择满足指定条件的第2行和第2列,建立第2行与事务2的对应关系,建立第2列与事务2的对应关系。
针对事务3,选择满足指定条件的第3行和第3列,建立第3行与事务3的对应关系,建立第3列与事务3的对应关系。
建立了对应关系后的矩阵如图4所示。图4为本申请实施例提供的在预设的矩阵中选择满足指定条件的行和列,并建立与未处理的事务的对应关系的示意图。
在图4中,第1行和第1列均与事务1对应,第2行和第2列均与事务2对应,第3行和第3列均与事务3对应,因此,该预设的矩阵中可以容纳的未处理的事务的数量就是该矩阵的行或列的数量。
假设第一数值设定为1,第二数值设定为0,则在建立了如图4所示的对应关系后,针对矩阵M3×3中第1行第1列的元素E1,1,该元素E1,1所在的第1列对应事务1,该元素E1,1所在的第1行也对应事务1,第1列对应的事务(事务1)在relay日志中的排序与第1行对应的事务(事务1)相同,因此将该元素E1,1的值设置为0(第二数值)。
针对矩阵M3×3中第1行第2列的元素E1,2,该元素E1,2所在的第2列对应事务2,该元素E1,2所在的第1行对应事务1,第2列对应的事务2在relay日志中排在第1行对应的事务1之后,因此将该元素E1,2的值也设置为0(第二数值)。
针对矩阵M3×3中第2行第1列的元素E2,1,该元素E2,1所在的第1列对应事务1,该元素E2,1所在的第2行对应事务2,第1列对应的事务1在relay日志中排在第2行对应的事务2之前,且第1列对应的事务1与第2行对应的事务2冲突,因此将该元素E2,1的值设置为1(第一数值)。
类似的,矩阵M3×3中的其他元素也按照上述方法进行赋值,赋值后的矩阵即为
也即,在本申请实施例中,预设的矩阵中的第i行第j列的元素Ei,j的值如果为第一数值,则表示第i行对应的事务在relay日志中排在第j行对应的事务之后、且二者冲突,说明第i行对应的事务依赖于第j行对应的事务,进一步说明第i行对应的事务需要在第j行对应的事务处理完成之后再进行处理;相反的,元素Ei,j的值如果为第二数值,则表示第i行对应的事务在relay日志中未排在第j行对应的事务之后,或者二者并不冲突,说明第i行对应的事务并不依赖于第j行对应的事务,进一步说明第i行对应的事务不需要在第j行对应的事务处理完成之后再进行处理。
采用上述方法将未处理的事务添加到处理表中时,图3所示的步骤S304中备库在处理表包含的事务中确定出非依赖性事务的方法可以为:在矩阵中确定包含的所有元素的值均为第二数值的行所对应的事务,作为确定出的非依赖性事务。这是由于对于矩阵中的任一元素Ei,j,如果Ei,j的值为第二数值,则说明第i行对应的事务并不依赖于第j行对应的事务,进而,如果第i行包含的所有元素Ei,1、Ei,2、……Ei,n均为第二数值,则说明第i行对应的事务不依赖于当前矩阵(处理表)中添加的任何其他事务,因此第i行对应的事务即为非依赖性事务。
另外,在本申请实施例中,针对位于矩阵的对角线上的元素Ei,i,如果该元素Ei,i所在的第i行和第i列已经建立了与未处理的事务的对应关系,则将该Ei,i的值设置为所述第二数值,否则,将该元素Ei,i的值设置为所述第一数值。
采用上述方法设置矩阵中位于对角线上的元素的值时,则备库在该矩阵中选择满足指定条件的行和列的方法具体可以为:在位于该矩阵的对角线上的元素中,选择值为第一数值的元素所在的行和列,作为选择的满足指定条件的行和列。也即,由于该矩阵对角线上的元素所在的行的行号等于该元素所在的列的列号,并且如果该对角线上的元素的值为第一数值,则说明该元素所在的行和列均为与其他事务建立对应关系,因此可以选择该对角线上的元素所在的行和列,并建立与relay日志中未处理的事务的对应关系。当然,建立对应关系后,也要将该对角线上的元素的值重新设置为第二数值。
进一步的,当以上述矩阵的形式设置处理表时,备库在对确定出的非依赖性事务处理完成之后,在处理表中删除处理完成的非依赖性事务的方法具体为:在矩阵中确定处理完成的非依赖性事务对应的行和列,将确定的处理完成的非依赖性事务对应的列中包含的所有元素的值都重新设置为第二数值,删除该处理完成的非依赖性事务与确定的行和列的对应关系,并将该矩阵中位于确定的行和列交叉位置出的元素的值设置为第一数值。
继续沿用上例,由矩阵 可见,第1行包含的所有元素的值均为第二数值0,因此该矩阵M3×3的第1行对应的事务1为非依赖性事务,则备库采用一个空闲的SQL线程处理该事务1,事务2和事务3等待后续处理。
当备库对该事务1处理完成后,则备库首先确定该事务1对应的该矩阵中的第1行和第1列,将确定的第1列中包含的所有元素的值都重新设置为0(第二数值)。这是由于此时事务1已经处理完成,之前(事务1尚未处理完成之前)依赖于该事务1的其他事务(事务2和事务3)此时已经不再依赖于事务1,也即,之前需要等待事务1处理完成之后再进行处理的其他事务此时已经可以处理了,因此解除其他事务对事务1的依赖关系,将事务1对应的第1列中包含的所有元素的值重置为第二数值。将第1列中包含的所有元素的值重置为第二数值的矩阵 可见,此时第2行第1列以及第3行第1列的元素的值均为0,说明此时事务2和事务3已经可以处理,不再依赖于事务1。
然后,备库删除该事务1与矩阵M3×3的第1行和第1列的对应关系,并位于将第1行和第1列交叉位置处的元素设置为1(第一数值),也即,将矩阵M3×3中第1行第1列的元素的值设置为第一数值,亦即,将第1行(或第1列)中位于对角线上的元素的值设置为第一数值,表示此时矩阵M3×3中的第1行和第1列均未与任何事务建立对应关系,此时的矩阵
如果relay日志中还存在未处理的事务4,则备库继续建立事务4与矩阵M3×3中的第1行和第1列的对应关系,将M3×3中的第1行第1列的元素的值设置为第二数值(表示第1行和第1列均已经与事务建立了对应关系),并根据事务4与事务2和事务3在relay日志中的排序以及冲突关系,对矩阵M3×3中的每个元素的值进行设置。实质上,建立矩阵M3×3中第1行和第1列与事务4的对应关系之后,由于事务4在relay日志中排在事务2和事务3之后,因此事务2和事务3均不依赖于事务4,从而矩阵M3×3中第2行第1列以及第3行第1列元素的值仍然为第二数值,因此只需要根据事务4与事务2和事务3的冲突关系,重新调整该事务4所在的第1行的元素的值即可。
由上例可以看出,无论是否在矩阵中添加事务4,矩阵中事务2对应的第2行包含的所有元素的值均为0(第二数值),事务3对应的第3行包含的所有元素的值也均为0(第二数值),因此,此时备库则可以在预先建立的SQL线程中,选择两个空闲的SQL线程,通过这两个空闲的SQL线程并行的对事务2和事务3进行处理,相比于现有技术对事务1、事务2、事务3进行串行处理的方法,本申请实施例提供的上述方法有效的提高了备库备份数据的速度。
在本申请实施例中,备库可以建立一个矩阵管理线程,通过该矩阵管理线程建立预设的矩阵中的行和列与relay日志中未处理的事务的对应关系,并通过该矩阵管理线程实时的更新矩阵中的各个元素的值,也可以通过该矩阵管理线程删除处理完成的非依赖性事务与矩阵中相应的行和列的对应关系。此时,为了避免矩阵管理线程与SQL线程对于矩阵中的元素的调整发生冲突,备库在通过矩阵管理线程删除处理完成的非依赖性事务与相应的行和列的对应关系时,可以对该列中包含的所有元素进行加锁处理,并在删除该处理完成的非依赖性事务与相应的行和列的对应关系之后,再对该列中包含的所有元素进行解锁处理。其中,当矩阵管理线程对矩阵中的某一列中所有元素进行加锁处理时,则只有该矩阵管理线程可以对该列中的元素进行调整,其他线程均不可以对该列中的元素进行调整。
另外,在本申请实施例中,备库在以矩阵的形式预设处理表时,具体可以通过预设n行n列的位(bit)矩阵作为预设的处理表。
在本申请实施例中,冲突的两个事务除了可以是分别包含的操作记录对应的数据相同的两个事务之外,还可以是分别包含的操作记录对应的数据的主键相同、或者数据所属的表相同、或者数据所属的子库相同的两个事务,这里就不再一一赘述。
图5为本申请实施例提供的数据备份装置结构示意图,具体包括:
添加模块501,用于按照relay日志中记录事务的先后顺序,依次将所述relay日志中未处理的事务添加到预设的处理表中;
确定模块502,用于在所述处理表包含的事务中确定出非依赖性事务,其中,针对所述处理表中的一个事务,如果所述处理表中不存在在relay日志中排在该事务之前、且与该事务冲突的其他事务,则确定该事务为非依赖性事务;
处理模块503,用于采用空闲的线程并行的处理确定出的各非依赖性事务。
所述添加模块501具体用于,依次将所述relay日志中未处理的事务添加到预设的处理表中,直至添满所述处理表,或者将所述relay日志中所有未处理的事务都添加到所述处理表中为止;
所述添加模块501还用于,在非依赖性事务处理完成后,在所述处理表中删除处理完成的非依赖性事务,并继续按照所述relay日志中记录事务的先后顺序,依次将所述relay日志中未处理的事务添加到所述处理表中,使所述确定模块502和所述处理模块503基于更新后的处理表继续执行后续步骤。
所述添加模块501包括:
预设单元5011,用于预设n行n列的矩阵作,其中,n为正整数;
添加单元5012,用于在预设的所述矩阵中选择满足指定条件的行和列,建立选择的行与所述未处理事务的对应关系,建立选择的列与所述未处理事务的对应关系,其中,满足指定条件的行和列为:行号与列号相等、且未与其他事务建立对应关系的行和列;针对所述矩阵中第i行第j列的元素Ei,j,确定该元素Ei,j所在的第j列对应的事务,确定该元素Ei,j所在的第i行对应的事务,如果第j列对应的事务在所述relay日志中排在第i行对应的事务之前,且第j列对应的事务与第i行对应的事务冲突,则将该元素Ei,j的值设置为第一数值,否则,将该元素Ei,j的值设置为第二数值。
所述确定模块502具体用于,在所述矩阵中确定包含的所有元素的值均为第二数值的行所对应的事务,作为确定出的非依赖性事务。
所述添加单元5012还用于,针对位于所述矩阵的对角线上的元素Ei,i,如果该元素Ei,i所在的第i行和第i列已经建立了与未处理的事务的对应关系,则将该Ei,i的值设置为所述第二数值,否则,将该元素Ei,i的值设置为所述第一数值;在选择满足指定条件的行和列时,在位于所述矩阵的对角线上的元素中,选择值为所述第一数值的元素所在的行和列,作为选择的满足指定条件的行和列。
所述添加模块501还包括:
删除单元5013,用于在所述矩阵中确定处理完成的非依赖性事务对应的行和列,将确定的处理完成的非依赖性事务对应的列中包含的所有元素的值都重新设置为第二数值,删除所述处理完成的非依赖性事务与确定的行和列的对应关系,并将所述矩阵中位于确定的行和列交叉位置处的元素的值设置为所述第一数值。
所述添加模块501还包括:
加解锁单元5014,用于在删除所述处理完成的非依赖性事务与确定的行和列的对应关系时,对确定的列中包含的所有元素进行加锁处理,并在删除所述处理完成的非依赖性事务与确定的行和列的对应关系之后,对确定的列中包含的所有元素进行解锁处理。
具体的上述数据备份装置可以位于备库中。
本申请实施例提供一种数据备份方法及装置,该方法备库将relay日志中未处理的事务添加到处理表中,采用空闲的线程并行的对处理表中的各非依赖性事务进行处理,其中,针对处理表中的一个事务,如果处理表中不存在在relay日志中排在该事务之前、且与该事务冲突的其他事务,则该事务为非依赖性事务。通过上述方法,备库对于互不依赖的各事务,并不根据各事务的特征值来确定用于处理各事务的线程,而是直接采用空闲的线程处理互不依赖的各事务,因此不会使线程长时间处于闲置状态,节省了备库的系统资源。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (14)
1.一种数据备份方法,其特征在于,包括:
备库按照relay日志中记录事务的先后顺序,依次将所述relay日志中未处理的事务添加到预设的处理表中;并
在所述处理表包含的事务中确定出非依赖性事务,其中,针对所述处理表中的一个事务,如果所述处理表中不存在在relay日志中排在该事务之前、且与该事务冲突的其他事务,则确定该事务为非依赖性事务;以及
采用空闲的线程并行的处理确定出的各非依赖性事务。
2.如权利要求1所述的方法,其特征在于,依次将所述relay日志中未处理的事务添加到预设的处理表中,具体包括:
依次将所述relay日志中未处理的事务添加到预设的处理表中,直至添满所述处理表,或者将所述relay日志中所有未处理的事务都添加到所述处理表中为止;
采用空闲的线程并行的处理确定出的各非依赖性事务之后,所述方法还包括:
所述备库在非依赖性事务处理完成后,在所述处理表中删除处理完成的非依赖性事务,并继续按照所述relay日志中记录事务的先后顺序,依次将所述relay日志中未处理的事务添加到所述处理表中,基于更新后的处理表继续执行后续步骤。
3.如权利要求1或2所述的方法,其特征在于,预设处理表具体包括:
预设n行n列的矩阵,n为正整数;
将所述relay日志中未处理的事务添加到预设的处理表中,具体包括:
在预设的所述矩阵中选择满足指定条件的行和列,建立选择的行与所述未处理的事务的对应关系,建立选择的列与所述未处理的事务的对应关系,其中,满足指定条件的行和列为:行号与列号相等、且未与其他事务建立对应关系的行和列;并
针对所述矩阵中第i行第j列的元素Ei,j,确定该元素Ei,j所在的第j列对应的事务,确定该元素Ei,j所在的第i行对应的事务,如果第j列对应的事务在所述relay日志中排在第i行对应的事务之前,且第j列对应的事务与第i行对应的事务冲突,则将该元素Ei,j的值设置为第一数值,否则,将该元素Ei,j的值设置为第二数值。
4.如权利要求3所述的方法,其特征在于,在所述处理表包含的事务中确定出非依赖性事务,具体包括:
在所述矩阵中确定包含的所有元素的值均为第二数值的行所对应的事务,作为确定出的非依赖性事务。
5.如权利要求3所述的方法,其特征在于,所述方法还包括:
针对位于所述矩阵的对角线上的元素Ei,i,如果该元素Ei,i所在的第i行和第i列已经建立了与未处理的事务的对应关系,则将该Ei,i的值设置为所述第二数值,否则,将该元素Ei,i的值设置为所述第一数值;
在预设的所述矩阵中选择满足指定条件的行和列,具体包括:
在位于所述矩阵的对角线上的元素中,选择值为所述第一数值的元素所在的行和列,作为选择的满足指定条件的行和列。
6.如权利要求5所述的方法,其特征在于,在非依赖性事务处理完成后,在所述处理表中删除处理完成的非依赖性事务,具体包括:
在所述矩阵中确定处理完成的非依赖性事务对应的行和列,将确定的处理完成的非依赖性事务对应的列中包含的所有元素的值都重新设置为第二数值,删除所述处理完成的非依赖性事务与确定的行和列的对应关系,并将所述矩阵中位于确定的行和列交叉位置处的元素的值设置为所述第一数值。
7.如权利要求6所述的方法,其特征在于,所述方法还包括:
在删除所述处理完成的非依赖性事务与确定的行和列的对应关系时,对确定的列中包含的所有元素进行加锁处理,并在删除所述处理完成的非依赖性事务与确定的行和列的对应关系之后,对确定的列中包含的所有元素进行解锁处理。
8.一种数据备份装置,其特征在于,包括:
添加模块,用于按照relay日志中记录事务的先后顺序,依次将所述relay日志中未处理的事务添加到预设的处理表中;
确定模块,用于在所述处理表包含的事务中确定出非依赖性事务,其中,针对所述处理表中的一个事务,如果所述处理表中不存在在relay日志中排在该事务之前、且与该事务冲突的其他事务,则确定该事务为非依赖性事务;
处理模块,用于采用空闲的线程并行的处理确定出的各非依赖性事务。
9.如权利要求8所述的装置,其特征在于,所述添加模块具体用于,依次将所述relay日志中未处理的事务添加到预设的处理表中,直至添满所述处理表,或者将所述relay日志中所有未处理的事务都添加到所述处理表中为止;
所述添加模块还用于,在非依赖性事务处理完成后,在所述处理表中删除处理完成的非依赖性事务,并继续按照所述relay日志中记录事务的先后顺序,依次将所述relay日志中未处理的事务添加到所述处理表中,使所述确定模块和所述处理模块基于更新后的处理表继续执行后续步骤。
10.如权利要求8或9所述的装置,其特征在于,所述添加模块包括:
预设单元,用于预设n行n列的矩阵作,其中,n为正整数;
添加单元,用于在预设的所述矩阵中选择满足指定条件的行和列,建立选择的行与所述未处理事务的对应关系,建立选择的列与所述未处理事务的对应关系,其中,满足指定条件的行和列为:行号与列号相等、且未与其他事务建立对应关系的行和列;针对所述矩阵中第i行第j列的元素Ei,j,确定该元素Ei,j所在的第j列对应的事务,确定该元素Ei,j所在的第i行对应的事务,如果第j列对应的事务在所述relay日志中排在第i行对应的事务之前,且第j列对应的事务与第i行对应的事务冲突,则将该元素Ei,j的值设置为第一数值,否则,将该元素Ei,j的值设置为第二数值。
11.如权利要求10所述的装置,其特征在于,所述确定模块具体用于,在所述矩阵中确定包含的所有元素的值均为第二数值的行所对应的事务,作为确定出的非依赖性事务。
12.如权利要求10所述的装置,其特征在于,所述添加单元还用于,针对位于所述矩阵的对角线上的元素Ei,i,如果该元素Ei,i所在的第i行和第i列已经建立了与未处理的事务的对应关系,则将该Ei,i的值设置为所述第二数值,否则,将该元素Ei,i的值设置为所述第一数值;在选择满足指定条件的行和列时,在位于所述矩阵的对角线上的元素中,选择值为所述第一数值的元素所在的行和列,作为选择的满足指定条件的行和列。
13.如权利要求12所述的装置,其特征在于,所述添加模块还包括:
删除单元,用于在所述矩阵中确定处理完成的非依赖性事务对应的行和列,将确定的处理完成的非依赖性事务对应的列中包含的所有元素的值都重新设置为第二数值,删除所述处理完成的非依赖性事务与确定的行和列的对应关系,并将所述矩阵中位于确定的行和列交叉位置处的元素的值设置为所述第一数值。
14.如权利要求13所述的装置,其特征在于,所述添加模块还包括:
加解锁单元,用于在删除所述处理完成的非依赖性事务与确定的行和列的对应关系时,对确定的列中包含的所有元素进行加锁处理,并在删除所述处理完成的非依赖性事务与确定的行和列的对应关系之后,对确定的列中包含的所有元素进行解锁处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210312721.7A CN103631831B (zh) | 2012-08-29 | 2012-08-29 | 一种数据备份方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210312721.7A CN103631831B (zh) | 2012-08-29 | 2012-08-29 | 一种数据备份方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103631831A true CN103631831A (zh) | 2014-03-12 |
CN103631831B CN103631831B (zh) | 2016-12-21 |
Family
ID=50212893
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210312721.7A Active CN103631831B (zh) | 2012-08-29 | 2012-08-29 | 一种数据备份方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103631831B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104657237A (zh) * | 2015-03-12 | 2015-05-27 | 浪潮集团有限公司 | 一种检测磁盘阵列的方法 |
CN106844363A (zh) * | 2015-12-03 | 2017-06-13 | 阿里巴巴集团控股有限公司 | 用于数据库进行物理热备及数据恢复的方法和设备 |
CN110287006A (zh) * | 2019-06-10 | 2019-09-27 | 广州思创科技发展有限公司 | 一种数据调度方法及系统 |
CN110806923A (zh) * | 2019-10-29 | 2020-02-18 | 百度在线网络技术(北京)有限公司 | 一种区块链任务的并行处理方法、装置、电子设备和介质 |
CN111767340A (zh) * | 2020-05-29 | 2020-10-13 | 中国工商银行股份有限公司 | 数据处理方法、装置、电子设备和介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5530855A (en) * | 1992-10-13 | 1996-06-25 | International Business Machines Corporation | Replicating a database by the sequential application of hierarchically sorted log records |
US6360306B1 (en) * | 1997-03-31 | 2002-03-19 | Lsi Logic Corporatio | Relocation of suspended data to a remote site in a distributed storage system |
US20040249865A1 (en) * | 2003-06-06 | 2004-12-09 | Chung-I Lee | System and method for scheduling and naming for database backup |
CN101510162A (zh) * | 2009-03-26 | 2009-08-19 | 浙江大学 | 一种基于延时策略的软件事务内存的实现方法 |
CN102262662A (zh) * | 2011-07-22 | 2011-11-30 | 浪潮(北京)电子信息产业有限公司 | 实现异构平台下数据库数据迁移的系统、装置及方法 |
CN102354289A (zh) * | 2011-09-21 | 2012-02-15 | 苏州大学 | 一种并发事务的调度方法和相关装置 |
CN102402585A (zh) * | 2011-10-21 | 2012-04-04 | 苏州阔地网络科技有限公司 | 一种信息传输方法、系统及移动终端 |
CN102411612A (zh) * | 2011-10-27 | 2012-04-11 | 苏州阔地网络科技有限公司 | 一种信息同步方法及系统 |
-
2012
- 2012-08-29 CN CN201210312721.7A patent/CN103631831B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5530855A (en) * | 1992-10-13 | 1996-06-25 | International Business Machines Corporation | Replicating a database by the sequential application of hierarchically sorted log records |
US6360306B1 (en) * | 1997-03-31 | 2002-03-19 | Lsi Logic Corporatio | Relocation of suspended data to a remote site in a distributed storage system |
US20040249865A1 (en) * | 2003-06-06 | 2004-12-09 | Chung-I Lee | System and method for scheduling and naming for database backup |
CN101510162A (zh) * | 2009-03-26 | 2009-08-19 | 浙江大学 | 一种基于延时策略的软件事务内存的实现方法 |
CN102262662A (zh) * | 2011-07-22 | 2011-11-30 | 浪潮(北京)电子信息产业有限公司 | 实现异构平台下数据库数据迁移的系统、装置及方法 |
CN102354289A (zh) * | 2011-09-21 | 2012-02-15 | 苏州大学 | 一种并发事务的调度方法和相关装置 |
CN102402585A (zh) * | 2011-10-21 | 2012-04-04 | 苏州阔地网络科技有限公司 | 一种信息传输方法、系统及移动终端 |
CN102411612A (zh) * | 2011-10-27 | 2012-04-11 | 苏州阔地网络科技有限公司 | 一种信息同步方法及系统 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104657237A (zh) * | 2015-03-12 | 2015-05-27 | 浪潮集团有限公司 | 一种检测磁盘阵列的方法 |
CN106844363A (zh) * | 2015-12-03 | 2017-06-13 | 阿里巴巴集团控股有限公司 | 用于数据库进行物理热备及数据恢复的方法和设备 |
CN106844363B (zh) * | 2015-12-03 | 2021-01-29 | 阿里巴巴集团控股有限公司 | 用于数据库进行物理热备及数据恢复的方法和设备 |
CN110287006A (zh) * | 2019-06-10 | 2019-09-27 | 广州思创科技发展有限公司 | 一种数据调度方法及系统 |
CN110806923A (zh) * | 2019-10-29 | 2020-02-18 | 百度在线网络技术(北京)有限公司 | 一种区块链任务的并行处理方法、装置、电子设备和介质 |
CN110806923B (zh) * | 2019-10-29 | 2023-02-24 | 百度在线网络技术(北京)有限公司 | 一种区块链任务的并行处理方法、装置、电子设备和介质 |
CN111767340A (zh) * | 2020-05-29 | 2020-10-13 | 中国工商银行股份有限公司 | 数据处理方法、装置、电子设备和介质 |
CN111767340B (zh) * | 2020-05-29 | 2024-01-05 | 中国工商银行股份有限公司 | 数据处理方法、装置、电子设备和介质 |
Also Published As
Publication number | Publication date |
---|---|
CN103631831B (zh) | 2016-12-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101005486B (zh) | 一种资源访问控制方法及系统 | |
CN103593257B (zh) | 一种数据备份方法及装置 | |
CN100498796C (zh) | 逻辑日志生成方法、数据库备份/恢复方法与系统 | |
CN103577454B (zh) | 一种文件合并方法和装置 | |
CN108509462B (zh) | 一种同步活动事务表的方法及装置 | |
CN103425592B (zh) | 一种多进程系统中的内存管理方法及装置 | |
US8898677B2 (en) | Data arrangement calculating system, data arrangement calculating method, master unit and data arranging method | |
CN103631831A (zh) | 一种数据备份方法及装置 | |
CN103744936A (zh) | 一种数据库中的多版本并发控制方法及数据库系统 | |
CN107111628A (zh) | 在存储器优化表上的列储存库索引的有效维持 | |
CN105069134A (zh) | 一种Oracle统计信息自动收集方法 | |
EP2763055B1 (en) | A telecommunication method and mobile telecommunication device for providing data to a mobile application | |
JP2010134522A (ja) | データベース管理方法、データベース管理プログラム、および、データベース管理装置 | |
CN106383666B (zh) | 一种数据存储方法及装置 | |
CN107665219B (zh) | 一种日志管理方法及装置 | |
CN103678519A (zh) | 一种支持Hive DML增强的混合存储系统及其方法 | |
CN105608126A (zh) | 一种建立海量数据库二级索引的方法和装置 | |
CN103605657A (zh) | 一种在线重建索引的方法和装置 | |
US11366788B2 (en) | Parallel pipelined processing for snapshot data deletion | |
CN104765659A (zh) | 应用于数据库的数据恢复方法及装置 | |
CN103593449A (zh) | 一种数据库资源回收方法及系统 | |
CN102982186A (zh) | 基于oracle数据库系统的range分区表的维护方法和系统 | |
CN104182295A (zh) | 一种数据备份方法及装置 | |
CN101853279A (zh) | 一种改进的内存数据库封锁方法 | |
CN102096676B (zh) | 数据更新及查询控制方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |