发明内容
为了解决上述问题,本发明提供一种日志记录处理方法和装置,可以实现在主备数据同步过程中出现断点问题时自动进行容错,从而不影响从数据库服务器的同步服务。
本发明提供一种日志记录处理方法,包括:
当备用数据库从主用数据库中接收日志记录时检测到日志断点;
确定所述日志断点之前存在K条连续缺少的日志记录;
若K小于预设的容错条数阈值N,则在确定当前接收的所述日志记录与所述备用数据库已接收且因为日志断点暂时不能回放的日志记录以及所述连续缺少的K条日志记录没有冲突时,回放当前接收的所述日志记录。
可选地,所述当备用数据库从主用数据库中接收日志记录时检测到日志断点,包括:
当所述备用数据库从所述主用数据库中接收到日志记录时,若查询到不存在所述日志记录的前一条日志记录,则确定存在日志断点。
可选地,所述备用数据库当前接收的所述日志记录中携带有所述日志记录之前的连续N条日志记录的元信息,所述元信息包含事务标识、被修改的数据记录的标识集合;
所述确定当前接收的所述日志记录与所述连续缺少的K条日志记录没有冲突,包括:
从当前接收的所述日志记录中获取所述连续缺少的K条日志记录的元信息;
根据所述连续缺少的K条日志记录的元信息,确定当前接收的所述日志记录与所述连续缺少的K条日志记录没有冲突。
可选地,所述的方法还包括:
遍历所述K条日志记录的元信息,将每条元信息中包含的所有被修改的数据记录的标识都添加到第一集合中,将每条元信息中包含的事务标识添加到第二集合中;
所述第一集合为所述备用数据库在本地内存维护的集合,用于记录因为日志断点造成的暂时不能在所述备用数据库中回放的日志记录中包含的所有被修改的数据记录的标识;
所述第二集合为所述备用数据库在本地内存维护的集合,用于记录因为日志断点造成的暂时不能在所述备用数据库中回放的事务标识。
可选地,所述确定当前接收的所述日志记录与所述备用数据库已接收且因为日志断点暂时不能回放的日志记录没有冲突,包括:
检测所述第一集合与当前接收的所述日志记录中所有被修改的数据记录的标识集合是否存在交集;
若不存在交集,则确定当前接收的所述日志记录与所述备用数据库已接收且因为日志断点暂时不能回放的日志记录没有冲突。
可选地,所述的方法还包括:
若存在交集,则暂停回放当前接收的所述日志记录,将当前接收的所述日志记录中所包含的事务标识添加到所述备用数据库本地内存维护的第二集合中,且将所述事务标识对应的事务中包含的所有被修改的数据记录的记录标识都添加到所述第一集合中,并将当前接收的所述日志记录添加到所述日志记录暂停列表中;
所述日志记录暂停列表为所述备用数据库在本地内存维护的列表,用来记录因为日志断点造成的所述备用数据库已接收且不能回放的日志记录。
可选地,所述的方法还包括:
根据所述K条日志记录的元信息从所述主用数据库中获取与所述连续缺失的K条日志记录的元信息对应的K条日志记录;
将所述K条日志记录和所述日志记录暂停列表中的日志记录合并到日志记录恢复列表中;
清空所述备用数据库本地内存维护的第一集合、第二集合和日志记录暂停列表;
按日志写入顺序回放所述日志记录恢复列表中的日志记录。
可选地,所述的方法还包括:
当所述备用数据库从所述主用数据库中接收到日志记录时不存在日志断点;
检测所述备用数据库本地内存维护的第一集合与当前接收的所述日志记录中所有被修改的数据记录的标识集合是否存在交集;
若不存在交集,则回放当前接收的所述日志记录;
若存在交集,则暂停回放当前接收的所述日志记录,将当前接收的所述日志记录中所包含的事务标识添加到所述第二集合中,将所述事务标识对应的事务中包含的所有被修改的数据记录的记录标识都添加到所述第一集合中,并将当前接收的所述日志记录添加到所述日志记录暂停列表中。
可选地,所述的方法还包括:
若K大于等于预设的容错条数阈值N,则所述备用数据库暂停回放当前接收的所述日志记录;
从所述主用数据库获取日志断点位置所有缺失的日志记录;
回放所有缺失的日志记录之后,再对当前接收的所述日志记录进行回放。
可选地,回放所有缺失的日志记录,包括:
将所有缺失的日志记录与所述备用数据库本地内存维护的日志记录暂停列表进行拼接,并对拼接的日志记录按日志写入顺序进行排序,得到日志记录恢复列表;
清空所述备用数据库本地内存维护的第一集合、第二集合和日志记录暂停列表;
按日志写入顺序回放所述日志记录恢复列表中的日志记录。
本申请提供一种日志记录处理装置,包括:
检测模块,用于当备用数据库从主用数据库中接收日志记录时检测到日志断点;且检测到所述日志断点之前存在K条连续缺少的日志记录;
回放模块,用于在确定K小于预设的容错条数阈值N,且在确定当前接收的所述日志记录与所述备用数据库已接收且因为日志断点暂时不能回放的日志记录以及所述连续缺少的K条日志记录没有冲突时,回放当前接收的所述日志记录。
可选地,所述备用数据库当前接收的所述日志记录中携带有所述日志记录之前的连续N条日志记录的元信息,所述元信息包含事务标识、被修改的数据记录的标识集合。
所述装置还包括:
获取模块,用于从当前接收的所述日志记录中获取所述连续缺少的K条日志记录的元信息;
确定模块,用于根据所述连续缺少的K条日志记录的元信息,确定当前接收的所述日志记录与所述连续缺少的K条日志记录没有冲突。
可选地,所述的装置还包括:
添加模块,用于遍历所述K条日志记录的元信息,将每条元信息中包含的所有被修改的数据记录的标识都添加到第一集合中,将每条元信息中包含的事务标识添加到第二集合中;
所述第一集合为所述备用数据库在本地内存维护的集合,用于记录因为日志断点造成的暂时不能在所述备用数据库中回放的日志记录中包含的所有被修改的数据记录的标识;
所述第二集合为所述备用数据库在本地内存维护的集合,用于记录因为日志断点造成的暂时不能在所述备用数据库中回放的事务标识。
可选地,所述检测模块,还用于检测所述第一集合与当前接收的所述日志记录中所有被修改的数据记录的标识集合是否存在交集;
所述确定模块,还用于在不存在交集时,确定当前接收的所述日志记录与所述备用数据库已接收且因为日志断点暂时不能回放的日志记录没有冲突。
可选地,所述添加模块,还用于在检测到存在交集,则暂停回放当前接收的所述日志记录,将当前接收的所述日志记录中所包含的事务标识添加到所述备用数据库本地内存维护的第二集合中,且将所述事务标识对应的事务中包含的所有被修改的数据记录的记录标识都添加到所述第一集合中,并将当前接收的所述日志记录添加到所述日志记录暂停列表中;
所述日志记录暂停列表为所述备用数据库在本地内存维护的列表,用来记录因为日志断点造成的所述备用数据库已接收且不能回放的日志记录。
可选地,所述获取模块,还用于根据所述K条日志记录的元信息从所述主用数据库中获取与所述连续缺失的K条日志记录的元信息对应的K条日志记录;
所述回放模块,还用于将所述K条日志记录和所述日志记录暂停列表中的日志记录合并到日志记录恢复列表中;清空所述备用数据库本地内存维护的第一集合、第二集合和日志记录暂停列表;按日志写入顺序回放所述日志记录恢复列表中的日志记录。
可选地,所述检测模块,还用于从所述主用数据库中接收到日志记录时不存在日志断点;进一步检测所述备用数据库本地内存维护的第一集合与当前接收的所述日志记录中所有被修改的数据记录的标识集合是否存在交集;
所述回放模块,还用于在检测到不存在交集时,回放当前接收的所述日志记录;
所述添加模块,还用于在检测到存在交集,则暂停回放当前接收的所述日志记录,将当前接收的所述日志记录中所包含的事务标识添加到所述第二集合中,将所述事务标识对应的事务中包含的所有被修改的数据记录的记录标识都添加到所述第一集合中,并将当前接收的所述日志记录添加到所述日志记录暂停列表中。
可选地,所述获取模块,还用于在确定K大于等于预设的容错条数阈值N时,暂停回放当前接收的所述日志记录,从所述主用数据库获取日志断点位置所有缺失的日志记录;
所述回放模块,还用于回放所有缺失的日志记录之后,再对当前接收的所述日志记录进行回放。
可选地,所述回放模块,具体用于将所有缺失的日志记录与所述备用数据库本地内存维护的日志记录暂停列表进行拼接,并对拼接的日志记录按日志写入顺序进行排序,得到日志记录恢复列表;清空所述备用数据库本地内存维护的第一集合、第二集合和日志记录暂停列表;按日志写入顺序回放所述日志记录恢复列表中的日志记录。
本申请实施例还提供一种数据库服务器,用于管理备用数据库,所述数据库服务器包括:存储器、处理器以及通信组件;
所述通信组件,用于从主用数据库中接收日志记录;
所述存储器,用于存储计算机程序;
所述处理器,耦合至所述存储器,用于执行所述计算机程序,以用于:
在所述通信组件从主用数据库中接收日志记录时检测到日志断点;
确定所述日志断点之前存在K条连续缺少的日志记录;
若K小于预设的容错条数阈值N,在确定当前接收的所述日志记录与所述备用数据库已接收且因为日志断点暂时不能回放的日志记录以及所述连续缺少的K条日志记录没有冲突时,回放当前接收的所述日志记录。
本申请实施例还提供一种数据库系统,包括:主用数据库、主用数据库服务器、备用数据库以及备用数据库服务器;
所述主用数据库服务器,用于从所述主用数据库中读取日志记录并发送给所述备用数据库服务器;
所述备用数据库服务器,用于在从所述主用数据库服务器接收日志记录时检测到日志断点;确定所述日志断点之前存在K条连续缺少的日志记录;以及在K小于预设的容错条数阈值N时,确定当前接收的所述日志记录与所述备用数据库已接收且因为日志断点暂时不能回放的日志记录以及所述连续缺少的K条日志记录没有冲突,并回放当前接收的所述日志记录。
本发明实施例中,当出现日志断点时且断点缺失的日志记录条数在容错范围之内时,本申请通过判断当前接收到的日志记录是否与之前已接收到的因为日志断点暂时不能回放的日志记录以及当前日志记录之前连续缺少的日志记录存在冲突,在确定不存在冲突时可以跳过日志断点,继续回放与缺失的日志记录不冲突的日志记录,降低备用数据库因为日志断点而中断服务的概率。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义,“多种”一般包含至少两种,但是不排除包含至少一种的情况。
应当理解,本文中使用的术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的商品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种商品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的商品或者系统中还存在另外的相同要素。
本申请可以应用于主用数据库和备用数据库同步的应用场景中,本申请的技术方案中,当主用数据库在生成一条日志记录时,在当前生成的日志记录中携带有当前生成的日志记录之前的N条日志记录的元信息,该N条日志记录的元信息用于在主备数据库同步过程中存在的日志断点时,备用数据库利用该N条日志记录的元信息知道日志断点中缺失的日志记录中包含哪些事务,修改了哪些数据库记录,从而可以跳过日志断点,继续回放与缺失的日志记录不冲突的日志记录,而与缺失的日志记录存在冲突的日志记录添加到日志记录暂停列表中,并在找回所有缺失的日志记录后一并执行回放,从而可以在主备数据同步过程中存在的日志断点时,跳过日志断点,继续回放日志断点后的日志记录,降低从数据库服务器同步服务的中断概率。
本申请中使用的技术术语包括:日志是在数据库/存储系统中保证原子性和持久性的一种技术。在使用日志的系统中,任何更新操作会先写入一个日志中,再对数据进行修改,日志由很多条日志记录组成,每条日志记录中会包含事务标识、被修改的数据库的记录标识和数据库记录更新后的值。
下面对本申请的技术方案通过具体实施例进行详细说明。为了描述简单,本申请假设事务和日志记录是一一对应的,即一个事务不会跨多条日志记录,一条日志记录里也仅包含一个事务。但是需要说明的是,即使一条事务会跨多条日志记录,或者一条日志记录里包含多个事务,也可以应用本方法描述的技术。
图2a为本申请一实施例提供提供的数据库系统的结构示意图。如图2a所示,该系统包括:主用数据库、主用数据库服务器、备用数据库以及备用数据库服务器。
其中,主用数据库和备用数据库主要用于存储与业务相关的数据。一般情况下,主用数据库面向用户提供数据库业务。主用数据库服务器主要负责管理主用数据库,实现主用数据库的业务逻辑,例如向用户提供增删改查数据库的功能以及日志备份逻辑。同理,备用数据库服务器主要负责管理备用数据库,实现主用数据库的业务逻辑,例如向用户提供增删改查数据库的功能。
主用数据库服务器,用于将主用数据库中的日志记录发送给备用数据库服务器。可选地,如图2a所示,主用数据库服务器可以记录主用数据库中的事务日志,并且可以通过网络将日志记录发送给备用数据库服务器。
备用数据库服务器,用于从主用数据库服务器接收日志记录,并在从主用数据库服务器接收日志记录时检测是否存在日志断点;当从主用数据库服务器接收日志记录时检测到日志断点时,确定日志断点之前存在的K条连续缺少的日志记录;以及在K小于预设的容错条数阈值N时,确定当前接收的所述日志记录与所述备用数据库已接收且因为日志断点暂时不能回放的日志记录以及所述连续缺少的K条日志记录没有冲突,并回放当前接收的所述日志记录。可选地,如图2a所示,备用数据库服务器可以记录从主用数据库服务器接收的日志记录,以及可以将日志记录的回放结果存储至备用数据库中。
无论是主用数据库还是备用数据库,主要是按照一定的数据结构来组织、存储和管理各种数据。主用数据库或备用数据库可以是各种类型的数据库,本实施例对此不做限定。例如,从数据库开发者角度来看,主用数据库或备用数据库可以是Oracle、DB2、Sybase、MS SQL Server、Informax、MySQL等。从数据组织结构角度来看,主用数据库或备用数据库可以是网状数据库(Network Database)、关系数据库(Relational Database)、树状数据库(Hierarchical Database)、面向对象数据库(Object-oriented Database)等。
在本实施例中,在备用数据库服务器接收主用数据库服务器发送的日志记录的过程中,当出现日志断点时且断点缺失的日志记录条数在容错范围之内时,备用数据库服务器可以判断出当前接收到的日志记录是否与这些缺失日志记录存在冲突,进而在判断不存在冲突时,回放当前接收的所述日志记录,无需找回所有缺失日志记录之后再回放,有利于降低备用数据库的服务被中断的概率。
其中,备用数据库服务器与主用数据库服务器相互配合,在缺失日志记录的情况下进行日志回放处理的详细过程可参见下述方法实施例的描述。值得说明的是,在下述方法实施例中为简化描述,直接用主用数据库和备用数据库进行描述。
图2b为本申请一实施例提供的日志记录处理方法的流程示意图,如图2b所示,包括:
101、当备用数据库从主用数据库中接收日志记录时检测到日志断点;
具体地,当备用数据库从主用数据库中接收到一条日志记录时,会查询该日志记录的前一条日志记录是否接收到,如果没有接收到前一条日志记录,则确定存在日志断点,即意味着当前接收的这条日志记录紧连着一个日志断点;假设接收到前一条日志记录,则确定不存在日志断点。
102、确定所述日志断点之前存在K条连续缺少的日志记录;
具体地,备用数据库根据当前接收的日志记录获取日志断点之前连续缺少的日志记录的条数,这里假设连续缺少的日志记录的条数为K条。
103、在K小于预设的容错条数阈值N,且在确定当前接收的所述日志记录与所述备用数据库已接收且因为日志断点暂时不能回放的日志记录以及所述连续缺少的K条日志记录没有冲突时,回放当前接收的所述日志记录。
这里需要说明的是,本发明中为了可以在主备数据同步过程中出现日志断点后,容忍日志断点上连续N条日志记录的缺失,允许备用数据库跳过日志断点,继续回放断点后的日志记录从而避免备用数据库的服务中断,这里的N是一个可配置的参数,具体设置时包括:主用数据库在生成一条日志记录时,在生成的日志记录中会携带之前N条日志记录的元信息,其中,元信息中包含事务标识、被修改的数据记录的标识集合。
这里需要说明的是,备用数据库在本地内存中维护有第一集合(PendingRecordSet<RecordId>)、第二集合(PendingTransactionSet<TransId>)和日志记录暂停列表(PendingLogList<LogEntry>);
其中,所述第一集合用来记录因为日志断点造成的暂时不能在所述备用数据库中回放的日志记录中包含的所有被修改的数据记录的标识;即第一集合的元素是记录的标识,被初始化为空集合。
所述第二集合用来记录因为日志断点造成的暂时不能在所述备用数据库中回放的事务标识;即第二集合的元素是事务的标识,被初始化为空集合。
所述日志记录暂停列表用来记录因为日志断点造成的所述备用数据库已接收且不能回放的日志记录,即日志记录暂停列表的元素是日志记录,被初始化为空列表。
具体地,步骤103在具体实现时可以包括:
遍历K条日志记录的元信息,将每条元信息中包含的事务标识添加到上述备用数据库本地内存维护的第二集合中,将每条元信息中包含的所有被修改的数据记录的标识都添加到上述备用数据库本地内存维护的第一集合中;
检测第一集合与当前接收的所述日志记录中所有被修改的数据记录的标识集合是否存在交集;
若不存在交集,说明当前接收的所述日志记录与所述备用数据库本地内存维护的日志记录没有冲突,则回放当前接收的所述日志记录;即可以跳过日志断点,继续回放和缺失的日志记录不冲突的事务(继续回放日志断点后的日志记录),从而避免备用数据库服务器同步服务的中断。这里需要说明的是,备用数据库根据所述K条日志记录的元信息可以从主用数据库中获取与所述K条日志记录的元信息对应的K条日志记录;将所述K条日志记录与所述备用数据库本地内存维护的日志记录暂停列表进行拼接,并对拼接的日志记录按日志写入顺序进行排序,得到日志记录恢复列表;清空所述备用数据库本地内存维护的第一集合、第二集合和日志记录暂停列表;按日志写入顺序回放所述日志记录恢复列表中的日志记录。
若存在交集,说明当前接收的所述日志记录与所述备用数据库本地内存维护的日志记录存在冲突,则暂停回放当前接收的所述日志记录,将当前接收的所述日志记录中所包含的事务标识添加到所述备用数据库本地内存维护的第二集合中,且将所述事务标识对应的事务中包含的所有被修改的数据记录的记录标识都添加到所述第一集合中,并将当前接收的所述日志记录添加到所述日志记录暂停列表中。也就是说,当前接收的日志记录与备用数据库本地内存维护的日志记录存在冲突时,将存在冲突的日志记录添加到日志记录暂停列表中,在找回所有缺失的日志记录后一并执行日志记录的回放。需要说明的是,备用数据库需要从所述主用数据库获取日志断点位置所有缺失的日志记录;之后,将所有缺失的日志记录与备用数据库本地内存维护的日志记录暂停列表进行拼接,并对拼接的日志记录按日志写入顺序进行排序,得到日志记录恢复列表进行;为了避免后续发生日志断点时产生日志记录的冲突,在本次对断点日志记录进行回放时,需要清空所述备用数据库本地内存维护的第一集合、第二集合和日志记录暂停列表;按日志写入顺序回放所述日志记录恢复列表中的日志记录;之后继续回放从所述主用数据库同步过来的日志记录。
在现有技术中,当主用数据库和备用数据库同步时出现了日志断点,例如因为网络问题丢失了一条或一段日志记录,如果不应用本申请的缺失容错机制,备用数据库不知道执行后续的日志记录回放是否与缺失的日志记录会不会出现冲突,因此必须要等到从主用数据库获取到日志断点所有缺失的日志记录之后才能继续执行,这样就会中断备用数据库服务器的同步服务。
因此,应用本发明实施例的技术方案,当出现日志断点时且断点缺失的日志记录条数在容错范围之内时,本申请通过在当前接收的日志记录中携带的之前日志记录的元信息中可以获取的连续缺少的日志记录的元信息,能够实现在主备数据库同步过程中存在的日志断点时,备用数据库利用当前接收的日志记录中携带的之前日志记录的元信息知道日志断点中缺失的日志记录中包含哪些事务,修改了哪些数据库记录,从而可以跳过日志断点,继续回放与缺失的日志记录不冲突的日志记录,而与缺失的日志记录存在冲突的日志记录添加到日志记录暂停列表中,并在找回所有缺失的日志记录后一并执行回放的目的。
图3为本申请另一实施例提供的日志记录处理方法的流程示意图,如图3所示,包括:
201、当备用数据库从主用数据库中接收日志记录时不存在日志断点;
具体地,当备用数据库从主用数据库中接收到一条日志记录时,会查询该日志记录的前一条日志记录是否接收到,如果接收到前一条日志记录,则确定不存在日志断点。
202、检测所述备用数据库本地内存维护的第一集合与当前接收的所述日志记录中所有被修改的数据记录的标识集合是否存在交集;
203、若不存在交集,则回放当前接收的所述日志记录;
也就是说,当前接收的日志记录与备用数据库本地内存维护的日志记录不存在冲突,可以回放当前接收的日志记录,主备数据同步正常进行。
204、若存在交集,则暂停回放当前接收的所述日志记录,将当前接收的所述日志记录中所包含的事务标识添加到所述第二集合中,将所述事务标识对应的事务中包含的所有被修改的数据记录的记录标识都添加到所述第一集合中,并将当前接收的所述日志记录添加到所述日志记录暂停列表中。
也就是说,虽然当前接收的日志记录没有发生日志断点,但是主备数据库同步过程中曾经出现过日志断点,所以又可能造成,当前接收的日志记录与备用数据库本地内存维护的日志记录存在冲突的情况,此时,可以暂时停止(推迟)回放当前接收的日志记录,将当前接收的所述日志记录中所包含的事务标识添加到所述第二集合中,将所述事务标识对应的事务中包含的所有被修改的数据记录的记录标识都添加到所述第一集合中,并将所述日志记录追加到所述日志记录暂停列表中。以便以后发生日志断点的时候,可以在找回所有缺失的日志记录后一并执行回放的目的。
因此,本发明实施例中,在主用数据库生成日志记录时,额外捎带了之前N条日志记录的元信息,使得备用数据库可以利用日志记录的元信息在本地内存中维护日志记录的事物标识和被修改数据的记录标识以及日志记录暂停列表,进而可以在后续发生日志断点的时候,可以利用日志记录暂停列表找回所有缺失的日志记录后一并执行回放的目的。
图4为本申请又一实施例提供的日志记录处理方法的流程示意图,如图4所示,包括:
301、当备用数据库从主用数据库中接收日志记录时检测到日志断点;
具体地,当备用数据库从主用数据库中接收到一条日志记录时,会查询该日志记录的前一条日志记录是否接收到,如果没有接收到前一条日志记录,则确定存在日志断点,即意味着当前接收的这条日志记录紧连着一个日志断点;假设接收到前一条日志记录,则确定不存在日志断点。
302、确定所述日志断点之前存在K条连续缺少的日志记录;
具体地,备用数据库根据当前接收的日志记录获取日志断点之前连续缺少的日志记录的条数,这里假设连续缺少的日志记录的条数为K条。
303、若K大于等于预设的容错条数阈值N,则暂停回放当前接收的所述日志记录;
当K条连续缺少的日志记录超过本申请设置的容错条数阈值N时,不允许备用数据库跳过日志断点,此时,需要暂停回放从主用数据库同步过来的日志记录。
304、从所述主用数据库中获取日志断点位置所有缺失的日志记录;
305、回放所有缺失的日志记录之后,再对当前接收的所述日志记录进行回放。
可选地,在本申请中,回放所有缺失的日志记录的具体过程包括:
将所有缺失的日志记录与所述备用数据库本地内存维护的日志记录暂停列表进行拼接,并对拼接的日志记录按日志写入顺序进行排序,得到日志记录恢复列表;
清空所述备用数据库本地内存维护的第一集合、第二集合和日志记录暂停列表;
按日志写入顺序回放所述日志记录恢复列表中的日志记录。
本发明实施例中,当出现日志断点时且断点缺失的日志记录条数在容错范围之外时,需要暂停回放从主用数据库同步过来的日志记录,通过在当前接收的日志记录中携带的之前日志记录的元信息,结合备用数据库本地内存中维护的日志记录的事物标识和被修改数据的记录标识以及日志记录暂停列表中,进而可以在后续发生日志断点的时候,可以利用日志记录暂停列表找回所有缺失的日志记录后一并执行回放的目的。
图5为本申请一实施例提供的日志记录处理装置的结构示意图,如图5所示,包括:
检测模块,用于当备用数据库从主用数据库中接收日志记录时检测到日志断点;且检测到所述日志断点之前存在K条连续缺少的日志记录;
回放模块,用于在确定K小于预设的容错条数阈值N,且在确定当前接收的所述日志记录与所述备用数据库已接收且因为日志断点暂时不能回放的日志记录以及所述连续缺少的K条日志记录没有冲突时,回放当前接收的所述日志记录。
可选地,所述备用数据库当前接收的所述日志记录中携带有所述日志记录之前的连续N条日志记录的元信息,所述元信息包含事务标识、被修改的数据记录的标识集合。
所述装置还包括:
获取模块,用于从当前接收的所述日志记录中获取所述连续缺少的K条日志记录的元信息;
确定模块,用于根据所述连续缺少的K条日志记录的元信息,确定当前接收的所述日志记录与所述连续缺少的K条日志记录没有冲突。
可选地,所述的装置还包括:
添加模块,用于遍历所述K条日志记录的元信息,将每条元信息中包含的所有被修改的数据记录的标识都添加到第一集合中,将每条元信息中包含的事务标识添加到第二集合中;
所述第一集合为所述备用数据库在本地内存维护的集合,用于记录因为日志断点造成的暂时不能在所述备用数据库中回放的日志记录中包含的所有被修改的数据记录的标识;
所述第二集合为所述备用数据库在本地内存维护的集合,用于记录因为日志断点造成的暂时不能在所述备用数据库中回放的事务标识。
可选地,所述检测模块,还用于检测所述第一集合与当前接收的所述日志记录中所有被修改的数据记录的标识集合是否存在交集;
所述确定模块,还用于在不存在交集时,确定当前接收的所述日志记录与所述备用数据库已接收且因为日志断点暂时不能回放的日志记录没有冲突。
可选地,所述添加模块,还用于在检测到存在交集,则暂停回放当前接收的所述日志记录,将当前接收的所述日志记录中所包含的事务标识添加到所述备用数据库本地内存维护的第二集合中,且将所述事务标识对应的事务中包含的所有被修改的数据记录的记录标识都添加到所述第一集合中,并将当前接收的所述日志记录添加到所述日志记录暂停列表中;
所述日志记录暂停列表为所述备用数据库在本地内存维护的列表,用来记录因为日志断点造成的所述备用数据库已接收且不能回放的日志记录。
可选地,所述获取模块,还用于根据所述K条日志记录的元信息从所述主用数据库中获取与所述连续缺失的K条日志记录的元信息对应的K条日志记录;
所述回放模块,还用于将所述K条日志记录和所述日志记录暂停列表中的日志记录合并到日志记录恢复列表中;清空所述备用数据库本地内存维护的第一集合、第二集合和日志记录暂停列表;按日志写入顺序回放所述日志记录恢复列表中的日志记录。
可选地,所述检测模块,还用于从所述主用数据库中接收到日志记录时不存在日志断点;进一步检测所述备用数据库本地内存维护的第一集合与当前接收的所述日志记录中所有被修改的数据记录的标识集合是否存在交集;
所述回放模块,还用于在检测到不存在交集时,回放当前接收的所述日志记录;
所述添加模块,还用于在检测到存在交集,则暂停回放当前接收的所述日志记录,将当前接收的所述日志记录中所包含的事务标识添加到所述第二集合中,将所述事务标识对应的事务中包含的所有被修改的数据记录的记录标识都添加到所述第一集合中,并将当前接收的所述日志记录添加到所述日志记录暂停列表中。
可选地,所述获取模块,还用于在确定K大于等于预设的容错条数阈值N时,暂停回放当前接收的所述日志记录,从所述主用数据库获取日志断点位置所有缺失的日志记录;
所述回放模块,还用于回放所有缺失的日志记录之后,再对当前接收的所述日志记录进行回放。
可选地,所述回放模块,具体用于将所有缺失的日志记录与所述备用数据库本地内存维护的日志记录暂停列表进行拼接,并对拼接的日志记录按日志写入顺序进行排序,得到日志记录恢复列表;清空所述备用数据库本地内存维护的第一集合、第二集合和日志记录暂停列表;按日志写入顺序回放所述日志记录恢复列表中的日志记录。
本发明实施例所述的装置可以上述实施例所示的方法,其实现原理和技术效果不再赘述。
以上描述了日志记录处理装置的内部功能和结构,实际中,该日志记录处理装置可作为备用数据库的服务器实现,如图6所示,一种数据库服务器包括:存储器、处理器以及通信组件。
通信组件,用于从主用数据库服务器接收日志记录;
所述存储器,用于存储计算机程序;
所述处理器,耦合至所述存储器,用于执行所述计算机程序,以用于:
在所述通信组件从主用数据库服务器接收日志记录时检测到日志断点;
确定所述日志断点之前存在K条连续缺少的日志记录;
若K小于预设的容错条数阈值N,在确定当前接收的所述日志记录与所述备用数据库已接收且因为日志断点暂时不能回放的日志记录以及所述连续缺少的K条日志记录没有冲突时,回放当前接收的所述日志记录。
可选地,处理器具体用于:当通信组件从所述主用数据库中接收到日志记录时,若查询到不存在所述日志记录的前一条日志记录,则确定存在日志断点。
可选地,通信组件当前接收的所述日志记录中携带有所述日志记录之前的连续N条日志记录的元信息,所述元信息包含事务标识、被修改的数据记录的标识集合。基于此,处理器具体用于:从当前接收的所述日志记录中获取所述连续缺少的K条日志记录的元信息;根据所述连续缺少的K条日志记录的元信息,确定当前接收的所述日志记录与所述连续缺少的K条日志记录没有冲突。
进一步,处理器还用于:遍历所述K条日志记录的元信息,将每条元信息中包含的所有被修改的数据记录的标识都添加到第一集合中,将每条元信息中包含的事务标识添加到第二集合中。其中,所述第一集合为所述备用数据库在本地内存维护的集合,用于记录因为日志断点造成的暂时不能在所述备用数据库中回放的日志记录中包含的所有被修改的数据记录的标识;所述第二集合为所述备用数据库在本地内存维护的集合,用于记录因为日志断点造成的暂时不能在所述备用数据库中回放的事务标识。
可选地,处理器具体用于:检测所述第一集合与当前接收的所述日志记录中所有被修改的数据记录的标识集合是否存在交集;若不存在交集,则确定当前接收的所述日志记录与所述备用数据库已接收且因为日志断点暂时不能回放的日志记录没有冲突。
进一步,处理器还用于:若存在交集,则暂停回放当前接收的所述日志记录,将当前接收的所述日志记录中所包含的事务标识添加到所述备用数据库本地内存维护的第二集合中,且将所述事务标识对应的事务中包含的所有被修改的数据记录的记录标识都添加到所述第一集合中,并将当前接收的所述日志记录添加到所述日志记录暂停列表中。其中,所述日志记录暂停列表为所述备用数据库在本地内存维护的列表,用来记录因为日志断点造成的所述备用数据库已接收且不能回放的日志记录。
可选地,处理器还用于:根据所述K条日志记录的元信息从所述主用数据库中获取与所述连续缺失的K条日志记录的元信息对应的K条日志记录;将所述K条日志记录和所述日志记录暂停列表中的日志记录合并到日志记录恢复列表中;清空所述备用数据库本地内存维护的第一集合、第二集合和日志记录暂停列表;按日志写入顺序回放所述日志记录恢复列表中的日志记录。
可选地,处理器还用于:当通信组件从所述主用数据库中接收到日志记录时不存在日志断点;检测所述备用数据库本地内存维护的第一集合与当前接收的所述日志记录中所有被修改的数据记录的标识集合是否存在交集;若不存在交集,则回放当前接收的所述日志记录;若存在交集,则暂停回放当前接收的所述日志记录,将当前接收的所述日志记录中所包含的事务标识添加到所述第二集合中,将所述事务标识对应的事务中包含的所有被修改的数据记录的记录标识都添加到所述第一集合中,并将当前接收的所述日志记录添加到所述日志记录暂停列表中。
可选地,处理器还用于:若K大于等于预设的容错条数阈值N,则所述备用数据库暂停回放当前接收的所述日志记录;从所述主用数据库获取日志断点位置所有缺失的日志记录;回放所有缺失的日志记录之后,再对当前接收的所述日志记录进行回放。
进一步,处理器在回放所有缺失的日志记录时,具体用于:将所有缺失的日志记录与所述备用数据库本地内存维护的日志记录暂停列表进行拼接,并对拼接的日志记录按日志写入顺序进行排序,得到日志记录恢复列表;清空所述备用数据库本地内存维护的第一集合、第二集合和日志记录暂停列表;按日志写入顺序回放所述日志记录恢复列表中的日志记录。
进一步,如图6所示,数据库服务器还包括:显示器、电源组件、音频组件等其它组件。图6中仅示意性给出部分组件,并不意味着存储管理设备只包括图6所示组件。
通信组件,可被配置为便于通信组件所属设备和其他设备之间有线或无线方式的通信。通信组件所属设备可以接入基于通信标准的无线网络,如WiFi,2G或3G,或它们的组合。在一个示例性实施例中,通信组件经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
显示器,可以包括屏幕,其屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。
电源组件,为电源组件所属设备的各种组件提供电力。电源组件可以包括电源管理系统,一个或多个电源,及其他与为电源组件所属设备生成、管理和分配电力相关联的组件。
音频组件,被配置为输出和/或输入音频信号。例如,音频组件包括一个麦克风(MIC),当音频组件所属设备处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器或经由通信组件发送。在一些实施例中,音频组件还包括一个扬声器,用于输出音频信号。
本发明实施例还提供了一种计算机存储介质,用于储存日志记录处理装置所用的计算机软件指令,所述计算机软件指令包含了用于执行上述日志记录处理方法为日志记录处理装置所涉及的程序。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。