CN115114370B - 主从数据库的同步方法、装置、电子设备和存储介质 - Google Patents
主从数据库的同步方法、装置、电子设备和存储介质 Download PDFInfo
- Publication number
- CN115114370B CN115114370B CN202210064633.3A CN202210064633A CN115114370B CN 115114370 B CN115114370 B CN 115114370B CN 202210064633 A CN202210064633 A CN 202210064633A CN 115114370 B CN115114370 B CN 115114370B
- Authority
- CN
- China
- Prior art keywords
- log
- redo
- redo log
- playback
- data
- 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.)
- Active
Links
Images
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
-
- 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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- 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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及数据存储技术领域,尤其涉及一种主从数据库的同步方法、装置、电子设备和存储介质,可应用于云技术、人工智能、智慧交通、辅助驾驶等各种场景。方法包括:从数据库获取主数据库传送的重做日志流,将重做日志流划分为多个重做日志集合,然后依次对多个重做日志集合进行日志回放,并且,在对每个重做日志集合进行日志回放过程中,将每个重做日志集合划分为多个重做日志子集,再通过多个日志回放线程分别对多个重做日志子集进行日志回放,以实现与主数据库的数据同步;通过上述方案,可以提高从数据库的日志回放性能,进而提高从数据的可用性。
Description
技术领域
本申请涉及网络安全技术领域,尤其涉及一种主从数据库的同步方法、装置、电子设备和存储介质。
背景技术
随着云技术的不断发展,云数据库在数据存储方面得到了广泛应用。云原生数据库是云数据库的一种,它采用计算存储分离架构,将计算节点和存储节点分离;计算节点作为主数据库,除了负责数据存储,还负责结构化查询语言(Structured Query Language,SQL)解析、查询优化以及数据库事务的控制等功能;存储节点作为从数据库,主要负责数据存储、备份等。
主数据库接受业务的读写访问,将读写访问涉及的数据变更操作记录在重做日志(Redo Log)中,并将重做日志发送到从数据库,由从数据库回放重做日志实现与主数据的数据同步。
但是,在上述主从数据库的同步过程中,可能会遇到以下问题:首先,主数据库可能同时产生大量重做日志,使得从数据库的回放压力较大;其次,从数据库的数据读取压力过大,阻塞重做日志的回放线程;这两个问题都会使得从数据库复制延迟过大导致从数据库不可用。
因此,现有的主从数据库的同步过程容易导致从数据库不可用,降低了从数据库的可用性。
发明内容
本申请实施例提供一种主从数据库的同步方法、装置、电子设备和存储介质,用于提高从数据库的日志回放性能,进而提高从数据的可用性。
一方面,本申请实施例提供一种主从数据库的同步方法,包括:
获取主数据库传送的重做日志流;其中,所述重做日志流中的每个重做日志用于记录在所述主数据库中执行的一次数据变更操作;
将所述重做日志流划分为多个重做日志集合,并依次对所述多个重做日志集合进行日志回放,其中,在对一个重做日志集合进行日志回放过程中,执行以下操作:
将一个重做日志集合划分为多个重做日志子集,并通过多个日志回放线程分别对所述多个重做日志子集进行日志回放;其中,一次日志回放包括:基于一个重做日志中记录的数据变更操作,对本地存储数据执行所述数据变更操作。
一方面,本申请实施例提供一种主从数据库的同步装置,包括:
日志获取模块,用于获取主数据库传送的重做日志流;其中,所述重做日志流中的每个重做日志用于记录在所述主数据库中执行的一次数据变更操作;
日志回放模块,用于将所述重做日志流划分为多个重做日志集合,并依次对所述多个重做日志集合进行日志回放,其中,在对一个重做日志集合进行日志回放过程中,执行以下操作:
将一个重做日志集合划分为多个重做日志子集,并通过多个日志回放线程分别对所述多个重做日志子集进行日志回放;其中,一次日志回放包括:基于一个重做日志中记录的数据变更操作,对本地存储数据执行所述数据变更操作。
在一种可能的实施例中,所述将一个重做日志集合划分为多个重做日志子集时,所述日志回放模块还用于:
将所述一个重做日志集合中,记录同一数据页的数据变更操作的至少一个重做日志作为一个重做日志子集,获得多个重做日志子集;其中,所述数据页为数据存储单位。
在一种可能的实施例中,所述将所述一个重做日志集合中,记录同一数据页的数据变更操作的至少一个重做日志作为一个重做日志子集,获得多个重做日志子集时,所述日志回放模块还用于:
针对所述一个重做日志集合中的多个重做日志分别执行以下操作:根据一个重做日志记录的数据页位置信息,计算所述一个重做日志对应的哈希值;
将哈希值相同的至少一个重做日志作为一个重做日志子集,获得多个重做日志子集;其中,哈希值相同的至少一个重做日志对应同一数据页。
可选地,当一个重做日志记录的数据变更操作属于数据页结构变更事务时,所述一个重做日志中还记录有指定字段;其中,所述数据页结构变更事务对应多个重做日志,所述指定字段包含所述数据页结构变更事务的最后一个重做日志的第一日志序号;
则所述日志回放模块还用于:
在通过一个日志回放线程对所述一个重做日志进行日志回放时,将所述包含所述第一日志序号的指定字段写入所述一个重做日志对应的数据页的指定位置。
可选地,还包括第一数据读取模块,用于:
在对一个重做日志集合进行日志回放的过程中,若接收到针对第一数据页的数据读取请求,则在确定所述第一数据页的指定位置记录有所述指定字段时,执行以下操作:
确定上一个重做日志集合的最后一个重做日志的第二日志序号;
若所述第二日志序号大于所述指定字段中的第一日志序号,则根据所述数据读取请求对所述第一数据页的数据内容进行读取。
可选地,还包括第二数据读取模块,用于:
若所述第二日志序号小于所述第一日志序号,则获取所述数据页结构变更事务的最后一个重做日志的日志回放状态;
若所述日志回放状态为已完成日志回放,则根据所述数据读取请求对所述第一数据页中的数据内容进行读取;
若所述日志回放状态为未完成日志回放,则禁止对所述第一数据页中的数据内容进行读取。
可选地,在获取所述数据页结构变更事务的最后一个重做日志的日志回放状态时,所述第二数据读取模块还用于:
所述获取所述数据页结构变更事务的最后一个重做日志的日志回放状态,包括:
获取所述数据页结构变更事务的回放进度信息,所述回放进度信息中包括所述数据页结构变更事务对应的多个重做日志中未完成日志回放的重做日志的数量;
若所述回放进度信息中未完成日志回放的重做日志的数量为0,则确定所述数据页结构变更事务的最后一个重做日志已经完成日志回放;
若所述回放进度信息中未完成日志回放的重做日志的数量不为0,则确定所述数据页结构变更事务的最后一个重做日志未完成日志回放。
可选地,在将所述重做日志流划分为多个重做日志集合时,所述日志回放模块还用于:
按照设定步长将所述重做日志流依次划分为多个重做日志集合;所述设定步长对应预设的数据长度或者预设的日志数量。
可选地,在通过多个日志回放线程分别对所述多个重做日志子集进行日志回放时,所述日志回放模块还用于:
针对所述多个日志回放线程,分别执行以下操作:
通过一个日志回放线程对所述多个重做日志子集中的至少一个重做日志子集依次进行日志回放;其中,在对一个重做日志子集进行日志回放过程中,执行以下操作:
按照预设顺序对所述一个重做日志子集中的至少一个重做日志分别进行日志回放。
可选地,在将所述重做日志流划分为多个重做日志集合时,所述日志回放模块还用于:
依次解析重做日志流中的多个重做日志,每当确定一个数据页结构变更事务对应的多个重做日志时,将确定的多个重做日志作为一个重做日志子流;
将所述重做日志流依次划分为多个重做日志集合;其中,不同的重做日志子流位于不同的重做日志集合中,且每个重做日志子流位于所在的重做日志集合的一端。
可选地,在将一个重做日志集合划分为多个重做日志子集时,所述日志回放模块还用于:
若所述一个重做日志集合中包括重做日志子流,则将所述重做日志子流作为一个第一重做日志子集;
将所述一个重做日志集合的其他重做日志中,记录同一数据页的数据变更操作的至少一个重做日志作为一个第二重做日志子集,获得多个第二重做日志子集;
将所述第一重做日志子集和所述多个第二重做日志子集,作为所述多个重做日志子集。
可选地,在通过多个日志回放线程分别对所述多个重做日志子集进行日志回放时,所述日志回放模块还用于:
通过所述多个日志回放线程分别对所述多个第二重做日志子集进行日志回放;若对所述多个第二重做日志子集完成日志回放,则采用所述多个日志回放线程中的一个日志回放线程对所述第一重做日志子集进行日志回放;或者
通过所述多个日志回放线程中的一个日志回放线程对所述第一重做日志子集进行日志回放;若对所述第一重做日志子集完成日志回放,则采用所述多个日志回放线程分别对所述多个第二重做日志子集进行日志回放。
可选地,在将一个重做日志集合划分为多个重做日志子集之后,所述日志回放模块还用于:
将下一个重做日志集合划分为多个重做日志子集。
在通过多个日志回放线程分别对所述多个重做日志子集进行日志回放之后,所述日志回放模块还用于:
通过所述多个日志回放线程分别对所述下一个重做日志集合的多个重做日志子集进行日志回放。
可选地,还包括第三数据读取模块,用于:
在对一个重做日志集合进行日志回放过程中,若接收到针对第二数据页的数据读取请求,则在确定当前针对所述第二数据页对应的第二重做日志执行日志回放时,禁止对所述第二数据页进行数据读取;
若对所述第二重做日志完成日志回放,则重新对所述第二数据页中的数据内容进行读取。
一方面,本申请实施例提供一种电子设备,其包括处理器和存储器,其中,所述存储器存储有程序代码,当所述程序代码被所述处理器执行时,使得所述处理器执行上述任一种主从数据库的同步方法的步骤。
一方面,本申请实施例提供一种计算机存储介质,所述计算机存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行上述任一种主从数据库的同步方法的步骤。
一方面,本申请实施例一种计算机程序产品,其包括计算机指令,所述计算机指令存储在计算机可读存储介质中;当电子设备的处理器从所述计算机可读存储介质读取所述计算机指令时,所述处理器执行该计算机指令,使得所述电子设备执行上述任一种主从数据库的同步方法的步骤。
由于本申请实施例采用上述技术方案,至少具有如下技术效果:
本申请实施例的从数据库在获取到主数据库传送的重做日志流后,将重做日志流划分为多个重做日志集合,然后依次对多个重做日志集合进行日志回放,并且,在对每个重做日志集合进行日志回放过程中,将每个重做日志集合划分为多个重做日志子集,再通过多个日志回放线程分别对多个重做日志子集进行日志回放;这样,在对大量重做日志进行回放时,可以缓解从数据库的日志回放压力;并且,在从数据库的数据读取压力较大时,避免阻塞日志回放线程,从而提高从数据库的日志回放性能,进而提高从数据的可用性。
本申请的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请而了解。本申请的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种主从数据库的同步方法的应用场景示意图;
图2为本申请实施例提供的一种主从数据库的同步方法的流程图;
图3为本申请实施例提供的一种重做日志流的划分示意图;
图4为本申请实施例提供的另一种主从数据库的同步方法的流程图;
图5为本申请实施例提供的一种重做日志集合的回放示意图;
图6为本申请实施例提供的一种数据页结构变更事务的示意图;
图7为本申请实施例提供的另一种数据页结构变更事务的示意图;
图8为本申请实施例提供的另一种主从数据库的同步方法的流程图;
图9为本申请实施例提供的一种日志回放过程中的数据页读取示意图;
图10A为本申请实施例提供的另一种主从数据库的同步方法的流程图;
图10B为本申请实施例提供的另一种主从数据库的同步方法的流程图;
图10C为本申请实施例提供的另一种重做日志流的划分示意图;
图11A为本申请实施例提供的一种日志回放流水线的示意图;
图11B为本申请实施例提供的一种主从数据库的同步方法的逻辑示意图;
图12为本申请实施例提供的一种主从数据库的同步装置的结构框图;
图13为本申请实施例提供的另一种主从数据库的同步装置的结构框图;
图14为本申请实施例提供的一种电子设备的结构示意图;
图15为本申请实施例中的另一种电子设备的结构示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
为了便于本领域技术人员更好地理解本申请的技术方案,下面对本申请涉及的部分概念进行介绍。
1、计算存储分离架构:是新一代云原生数据库的架构,其最大的特色是分离出计算节点和存储节点,采用重做日志(Redo Log)进行复制。计算节点负责SQL解析、查询优化以及事务的并发控制等,存储节点负责主要支持数据块存储,备份等。计算层将重做日志发送到存储层,由存储负责按需利用日志记录构建页面映像,达到事务持久化的作用。该架构具有计算资源快速弹性扩展、复制延迟低等特性。
2、重做日志:又叫Redo Log,是数据库系统为保证事务持久性的技术手段,在一次数据变更操作中,记录的是被修改数据行的新值(after image),使得在数据库意外崩溃时可以通过回放Redo Log达到更新数据库状态的目的。
3、B+树:又叫B-Tree,是一种N叉排序树,每个节点通常有多个孩子节点。中间节点仅做索引使用,叶子节点存储真正的数据。其增删改查操作具有较为稳定的对数时间复杂度,广泛用作数据库的索引使用。
4、数据页缓冲区(Buffer Pool):是数据库引擎InnoDB在内存中的数据页缓冲区,从磁盘上载入的数据页会暂时存放在Buffer Pool中,然后在接下来对该数据页的访问可以直接从内存中获得。
5、系统事务(Mini Transaction,MTR):MTR的更新对象是数据库的数据页,保证更新多个数据页时具有事务的原子性、隔离性等特性。典型场景为数据页结构变更时使得其他线程不能看到变更的中间状态。本申请实施例中的数据页结构变更事务可以理解为MTR,包括数据页的分裂和合并。
下文中所用的词语“示例性”的意思为“用作例子、实施例或说明性”。作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。
文中的术语“第一”、“第二”仅用于描述目的,而不能理解为明示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征,在本申请实施例的描述中,除非另有说明,“多个”的含义是两个或两个以上。
下面对本申请实施例的设计思想进行简要介绍:
相关技术中,在计算存储分离架构下,主数据库接受业务的读写访问,将读写访问涉及的数据变更操作记录在重做日志(Redo Log)中,并将重做日志发送到从数据库,由从数据库回放重做日志实现与主数据的数据同步。
但是,在上述主从数据库的同步过程中,可能会遇到以下问题:首先,主数据库可能同时产生大量重做日志,使得从数据库的回放压力较大;其次,从数据库的数据读取压力过大,阻塞重做日志的回放线程;这两个问题都会使得从数据库复制延迟过大导致从数据库不可用。
有鉴于此,本申请实施例提供一种主从数据库的同步方法、装置、电子设备和存储介质,从数据库在获取到主数据库传送的重做日志流后,将重做日志流划分为多个重做日志集合,对于每个重做日志集合,通过多个日志回放线程进行日志回放;这样,在对大量重做日志进行回放时,可以缓解从数据库的日志回放压力;并且,在从数据库的数据读取压力较大时,避免阻塞日志回放线程,从而提高从数据库的日志回放性能,进而提高从数据的可用性。
以下结合说明书附图对本申请的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本申请,并不用于限定本申请,并且在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
本申请实施例涉及云技术领域,通过云技术中的云存储技术实现数据库的构建。具体地,本身申请实施例采用主从数据库的架构,通过主数据库的重做日志实现主从数据库的数据同步。
云技术(Cloud technology)基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成重要支撑。技术网络系统的后台服务需要大量的计算、存储资源,如视频网站、图片类网站和更多的门户网站。伴随着互联网行业的高度发展和应用,将来每个物品都有可能存在自己的识别标志,都需要传输到后台系统进行逻辑处理,不同程度级别的数据将会分开处理,各类行业数据皆需要强大的系统后盾支撑,只能通过云计算来实现。
云存储(cloud storage)是在云计算概念上延伸和发展出来的一个新的概念,分布式云存储系统(以下简称存储系统)是指通过集群应用、网格技术以及分布存储文件系统等功能,将网络中大量各种不同类型的存储设备(存储设备也称之为存储节点)通过应用软件或应用接口集合起来协同工作,共同对外提供数据存储和业务访问功能的一个存储系统。
数据库(Database),简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。所谓“数据库”是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。
如图1所示,其为本申请实施例的应用场景示意图。该应用场景图中包括多个终端设备100、一个主数据库200和一个从数据库300,主数据库200和从数据库300可以分别部署在不同的服务器上。需要说明的是,主数据库200和从数据库300也可以部署在同一服务器上。
服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。终端设备可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。
在具体实施中,主数据库在接收到终端设备发送的数据写请求后,可以执行相应的写事务(例如插入数据、修改数据或者删除数据等),并产生一系列重做日志来记录写事务带来的数据变更,每个重做日志可以对应一次数据变更操作,然后将产生的重做日志流实时传送到从数据库。从数据库在获取到主数据库传送的重做日志流后,将重做日志流划分为多个重做日志集合,然后依次对多个重做日志集合进行日志回放,并且,在对每个重做日志集合进行日志回放过程中,将每个重做日志集合划分为多个重做日志子集,再通过多个日志回放线程分别对多个重做日志子集进行日志回放。
需要说明的是,图1所示只是举例说明,实际上终端设备和从数据库的数量不受限制,在本申请实施例中不做具体限定。
下面结合上述描述的应用场景,参考附图来描述本申请示例性实施方式提供的主从数据库的同步方法,需要注意的是,上述应用场景仅是为了便于理解本申请的精神和原理而示出,本申请的实施方式在此方面不受任何限制。本申请实施例可应用于各种场景,包括但不限于云技术、人工智能、智慧交通、辅助驾驶等。
本申请实施例的主从数据库的同步方法不仅可以应用于计算存储分离架构下的主从数据库,还可以应用于任何主从数据库架构下,在此不作限定。
参阅图2所示,本申请实施例提供一种主从数据库的同步方法,可以由从数据库执行,包括以下步骤:
S201,从数据库获取主数据库传送的重做日志流;其中,重做日志流中的每个重做日志用于记录在主数据库中执行的一次数据变更操作。
本申请实施例中,主数据库可以对外提供读写服务,从数据库可以对外提供读服务。例如,主数据库可以接收业务端(例如终端设备)的数据写请求,然后在执行相应的写事务时可以产生重做日志流,并将重做日志流传送给从数据库。需要说明的是,主数据库可以持续性产生重做日志流,每当产生重做日志流后可以向从数据库进行传送。
每个重做日志可以记录在主数据库中执行的一次数据变更操作,通常地,一次数据变更操作是针对一个数据页的数据变更操作,例如:在一个数据页中插入数据、删除数据或者修改数据等;其中,数据页是数据库的基本存储单位,也可以理解为一个io(inputoutput,输入输出)操作的基本单位。
此外,重做日志流中的每个重做日志可以对应一个日志序列号(简称日志序号),该日志序号用于标识重做日志的产生顺序,在重做日志流中,日志序号可以按照产生的先后顺序递增,例如:重做日志流包括重做日志1、重做日志2、重做日志3、重做日志4……,其中,1、2、3……表示日志序号。
S202,将重做日志流划分为多个重做日志集合,并依次对多个重做日志集合进行日志回放,其中,在对一个重做日志集合进行日志回放过程中,执行下面的步骤S203。
其中,重做日志流中的多个重做日志可以按照日志序号递增的顺序排列,也可以按照日志序号递减的顺序排列。在对重做日志流进行划分时,可以将重做日志流从头部或者尾部依次进行切割,从而获得多个重做日志集合。
可选地,S202中将重做日志流划分为多个重做日志集合时,可以按照设定步长将重做日志流进行切割,从而依次划分为多个重做日志集合;其中设定步长可以对应预设的数据长度或者预设的日志数量。
第一种可能的方式,当按照预设的数据长度对重做日志流进行切割时,可以依次对重做日志流中的多个重做日志进行解析,以确定每个重做日志的数据长度,进而按照预设的数据长度依次进行切割。
例如,预设的数据长度为10M,在依次解析重做日志流中的多个重做日志的数据长度时,每当数据长度达到10M时进行一次切割,从而获得多个重做日志集合。需要说明的是,在每一次切割时,不会在一个重做日志的中间进行切割,而是在两个重做日志之间进行切割。
示例性的,还以预设的数据长度为10M为例,如图3所示,重做日志流包括重做日志1、重做日志2、重做日志3、重做日志4、重做日志5、重做日志6、重做日志7、重做日志8、重做日志9、重做日志10……;将该重做日志流进行切割时,可以从重做日志1开始,依次解析各个重做日志的数据长度,当解析到重做日志10时,总的数据长度达到了10M,则在重做日志10和重做日志11之间进行切割,得到重做日志1至重做日志10组成的重做日志集合a;以此类推,得到重做日志11至重做日志25组成的重做日志集合b,重做日志26至重做日志40组成的重做日志集合c……。可以看出,每个重做日志集合包括日志序号相邻的多个重做日志。
需要说明的是,上述重做日志流中的重做日志的数量只是示例性的,在实际应用中可以根据实际需要设置,在此不做限定。
第二种可能的方式,当按照预设的日志数量对重做日志流进行切割时,假设预设的日志数量为10个,可以每隔10个重做日志切割一次,从而获得多个重做日志集合。
此外,除了上述切割方式之外,还可以在保证每个重做日志完整的情况下任意进行切割,可以理解的是,多个重做日志集合各自的数据长度可以相同,也可以不同;并且,多个重做日志集合各自的日志数量可以相同,也可以不同,在此不作限定。
进一步地,S202中依次对多个重做日志集合进行日志回放时,可以按照多个重做日志集合各自的重做日志产生的先后顺序,依次对多个重做日志集合进行回放;例如,对于上述重做日志集合a、重做日志集合b、重做日志集合c……,可以先对重做日志集合a中的重做日志1至重做日志10进行回放,然后依次对重做日志集合b、重做日志集合c……进行回放。
S203,将一个重做日志集合划分为多个重做日志子集,并通过多个日志回放线程分别对多个重做日志子集进行日志回放;其中,一次日志回放包括:基于一个重做日志中记录的数据变更操作,对本地存储数据执行数据变更操作。
该步骤中,从数据库可以通过日志分发线程将一个重做日志集合划分为多个重做日志子集。每个重做日志集合中的多个重做日志可能涉及多个数据页,并且每个数据页可能对应多个重做日志,为了使得每个数据页的多个重做日志可以按照产生的先后顺序进行回放,可以将每个数据页涉及的多个重做日志划分在一起,组成一个重做日志子集;这样,可以得到多个数据页各自对应的重做日志子集。
进一步地,可以通过多个日志回放线程对多个重做日志子集进行并行回放;每个日志回放线程可以负责至少一个重做日志子集,并按照预设顺序对至少一个重做日志子集进行回放,该预设顺序可以任意设置,在此不做限定;其中,在对一个重做日志子集进行回放时,可以按照该重做日志子集中的多个重做日志的先后顺序进行回放,具体可以按照日志序号从小到大依次进行回放。
本申请实施例中,从数据库在获取到主数据库传送的重做日志流后,将重做日志流划分为多个重做日志集合,然后依次对多个重做日志集合进行日志回放,并且,在对每个重做日志集合进行日志回放过程中,将每个重做日志集合划分为多个重做日志子集,再通过多个日志回放线程分别对多个重做日志子集进行日志回放;这样,在对大量重做日志进行回放时,可以缓解从数据库的日志回放压力;并且,在从数据库的数据读取压力较大时,避免阻塞日志回放线程,从而提高从数据库的日志回放性能,进而提高从数据的可用性。
在一些实施例中,如图4所示,上述S203可以包括以下步骤:
S2031,将一个重做日志集合中,记录同一数据页的数据变更操作的至少一个重做日志作为一个重做日志子集,获得多个重做日志子集;
S2032,通过多个日志回放线程分别对多个重做日志子集进行日志回放。
其中,每个重做日志中可以记录发生数据变更的数据页的位置信息,例如:该数据页位置信息可以包括数据库中的表空间地址以及数据页地址,其中,数据库可以包括一个表,该表中可以包括多个数据页,表空间地址可以表示表中的位置,数据页地址可以表示表空间地址中的数据页的位置,例如,一个表空间地址对应多个数据页,数据页地址可以表示表空间地址中的第几个数据页。
日志分发线程可以根据重做日志集合中的多个重做日志各自记录的数据页位置信息,确定涉及同一数据页的重做日志。例如可以通过下面两种可能的实施方式确定涉及同一数据页的重做日志。
在一种可能的实施方式中,S2031可以包括以下步骤:
A1、针对一个重做日志集合中的多个重做日志,分别执行以下操作:基于一个重做日志记录的数据页位置信息,确定一个重做日志对应的数据页。
其中,数据页位置信息可以包括表地址和数据页地址,根据一个重做日志记录的数据页位置信息可以确定该重做日志对应哪一个数据页。
A2、将对应同一数据页的至少一个重做日志作为一个重做日志子集,获得多个重做日志子集。
例如:以上述实施例中的重做日志集合a为例,重做日志集合a包括重做日志1至重做日志10,假设根据这10个重做日志各自记录的数据页位置信息,确定重做日志1至重做日志10分别对应数据页1、数据页5、数据页3、数据页8、数据页9、数据页1、数据页9、数据页3、数据页5、数据页8。则将数据页1对应的重做日志1、重做日志6,数据页3对应的重做日志3、重做日志8,数据页5对应的重做日志2、重做日志9,数据页8对应的重做日志4、重做日志10,数据页9对应的重做日志5、重做日志7,分别作为一个重做日志子集。
在另一些可能的实施方式中,为了进一步提高对重做日志集合的划分效率,可以对每个重做日志记录的数据页位置信息计算一个哈希值,可以理解的是,哈希值相同的至少一个重做日志对应同一数据页。因此,S2031可以包括以下步骤:
B1、针对一个重做日志集合中的多个重做日志分别执行以下操作:根据一个重做日志记录的数据页位置信息,计算一个重做日志对应的哈希值。
例如,当数据页位置信息包括表空间地址和数据页地址时,对一个重做日志集合中的每个重做日志记录的表空间地址和数据页地址计算一个哈希值,然后根据多个重做日志各自的哈希值,将多个重做日志形成一个日志哈希表,在日志哈希表中,哈希值相同的至少一个重做日志聚集在一起,可以理解的是,哈希值相同的至少一个重做日志对应同一数据页。
B2、将哈希值相同的至少一个重做日志作为一个重做日志子集,获得多个重做日志子集。
示例性的,如图5所示,通过日志分发线程对上述重做日志集合a进行划分时,分别对重做日志集合a中的多个重做日志各自记录的数据页位置信息计算哈希值,形成日志哈希表,在该日志哈希表中,将同一数据页对应的至少一个重做日志聚集在一起形成一个重做日志子集,具体包括:数据页1对应的重做日志子集1、数据页3对应的重做日志子集2、数据页5对应的重做日志子集1、数据页8对应的重做日志子集1、数据页9对应的重做日志子集1。
在一些实施例中,S2032中通过多个日志回放线程分别对多个重做日志子集进行日志回放,可以包括以下步骤:
针对多个日志回放线程,分别执行以下操作:
C1、通过一个日志回放线程对多个重做日志子集中的至少一个重做日志子集分别进行日志回放;其中,在对一个重做日志子集进行日志回放过程中,执行以下步骤C2。
C2、按照预设顺序对一个重做日志子集中的至少一个重做日志分别进行日志回放。
其中,预设顺序可以是产生的先后顺序,具体可以是日志序号递增的顺序。每个重做日志子集可以是一个数据页对应的至少一个重做日志,每个日志回放线程可以针对至少一个数据页分别进行日志回放;例如图5所示,假设有3个日志回放线程,包括:日志回放线程1、日志回放线程2、日志回放线程3,分别对5个数据页各自对应的重做日志子集进行回放,每个日志回放线程可以对其中的2个数据页各自对应的重做日志子集分别进行日志回放。
假设,日志回放线程1对数据页1对应的重做日志子集1、数据页3对应的重做日志子集2分别进行回放,日志回放线程1可以先对重做日志子集1中的至少一个重做日志按照产生的先后顺序(例如日志序号递增的顺序)依次回放至数据页缓冲区中的数据页1中;在回放完重做日志子集1后,继续将重做日志子集2回放至数据页缓冲区中的数据页3中。日志回放线程2和日志回放线程3的回放过程与日志回放线程1类似,在此不再赘述。
进一步地,考虑到重做日志流可能涉及业务端的多个数据写事务,每个数据写事务可以对应多个重做日志,为了及时跟进多个数据写事务的回放进度,当日志回放线程1、日志回放线程2和日志回放线程3将重做日志集合a回放完成后,可以通过事务提交线程将涉及的多个数据写事务的事务状态提交至事务系统,例如:事务状态包括但不限于:已完成状态、未完成状态等等。
本申请实施例中,针对每个重做日志集合,可以生成一个日志哈希表,将同一数据页的至少一个重做日志聚集在一起形成一个重做日志子集,存在多个日志回放线程,每个日志回放线程负责回放日志哈希表中部分区域保存的重做日志子集,即至少一个数据页各自对应的重做日志子集。这样,可以保证每个数据页上的至少一个重做日志可以按照日志序号递增的顺序回放,以准确回放每个数据页上的重做日志。
本申请实施例中,从数据库和主数据库可以均采用预设的数据结构存储数据,例如:数据结构可以是B树、B+树。下面以B+树为例对从数据库的数据结构进行介绍。
主数据库的存储引擎可以采用B+树进行数据索引,从而高效地查找数据。为了描述B+树,首先定义一条记录为一个二元组[key,data],key为记录的键值,对应表中的主键值,data为一行记录中除主键外的数据。对于不同的记录,key值互不相同。
B+树是一种N叉排序树,每个节点可以包括多个孩子节点,其中,非叶子节点只存储键值(key)信息,而数据记录(data)都存放在叶子节点中,每个节点可以对应一个数据页,用于存储相应的数据。
由于每个节点存储的键值的数量是有限的,因此,当某个节点的键值数量达到最大数量后,如果还向该节点插入键值时,则需要进行节点分裂。下面以图6为例介绍一下B+树的节点分裂过程。
如图6所示,假设每个节点最多能存储4个键值,当前的B+树包括一个根节点以及两个叶子节点为例,根节点存储的键值为10,分别指向左叶子节点和右叶子节点,左叶子节点中存储有键值5、8、9以及各自对应的data,右叶子节点中存储有键值10、15、16、17以及各自对应的data,可以看出,右叶子节点中的键值存满了,如果再向该节点插入键值以及对应的data,就需要进行分裂。
接下来,假设需要向上述B+树中插入键值18对应的data,根据上述B+树中的各个节点的键值大小可知,需要向右叶子节点中键值18,但是,由于右叶子节点中的键值存满了,所以要进行节点分裂,即在右叶子节点的右边分裂出一个新的右叶子节点,并将右叶子节点中的2个data转移至新的右叶子节点中,同时将键值18对应的data也插入新的右叶子节点中,右叶子节点和新的右叶子节点的中间键值16成为父节点(即根节点)中的键值,分裂后的两个节点都指向了父结点。
需要说明的是,当向B+树中插入数据时可能导致节点分裂,而当删除B+树中的数据时可能导致节点合并,下面以图7为例介绍一下B+树的节点合并过程。
如图7所示,在上述图6所示的发生节点分裂后的B+树的基础上,当删除左叶子节点中的键值8对应的data时,左叶子节点中只剩下一个键值5,而其兄弟节点(右叶子节点)中有两个键值10、15,可以将这两个节点合并成一个新的左叶子节点,并将父节点中的键值10删除。
由于每个节点对应一个数据页,因此,上述节点分裂或者节点合并可以理解为数据页结构变更事务,每个数据页结构变更事务涉及多个数据页的数据变更,当对其中的一个数据页进行数据变更操作时,涉及的多个数据页都禁止被读取。主数据库针对每个数据页的数据变更可以记录一个重做日志。通常的,每个数据页结构变更事务对应的多个重做日志的日志序号是连续的。
本申请实施例中,从数据库通过多个日志回放线程对重做日志集合进行回放过程中,在需要读取一个数据页时,如果该数据页发生了数据页结构变更事务,需要判断该数据页结构变更事务对应的多个重做日志是否已经完成回放,如果已完成回放,则允许读取该数据页,如果未完成回放,则禁止读取该数据页,需要后续进行读重试,以防止该数据页发生数据页结构变更事务后,不能正确读取到所需的数据,保证从数据库与主数据库的数据结构的一致性。
当主数据库的发生数据页结构变更事务时,在数据页结构变更事务涉及的多个数据页各自的指定位置中增加指定字段,例如:数据页的指定位置为数据页的Header,指定字段为FIL_PAGE_BTREE_SMO_LSN,可以简称为SSN,表示数据页结构变更事务的最后一个重做日志的第一日志序号。进一步地,主数据库针对数据页结构变更事务产生多个数据页各自的重做日志。
在一些实施例中,当一个重做日志记录的数据变更操作属于数据页结构变更事务时,为了便于从数据库确定数据页结构变更事务对应的多个重做日志,可以在该重做日志中记录上述指定字段,具体可以在重做日志的指定位置记录该指定字段。
例如:指定字段为FIL_PAGE_BTREE_SMO_LSN 6,其中的6可以表示数据页结构变更事务的最后一个重做日志的第一日志序号;指定位置可以是重做日志的header位置。
进一步地,从数据库在通过一个日志回放线程对上述一个重做日志进行日志回放时,为了表示该一个重做日志对应的数据页发生了数据页结构变更事务,可以将包含上述第一日志序号的指定字段写入该数据页的指定位置(例如该数据页的Header)。
在一些实施例中,如图8所示,从数据库还可以执行以下步骤:
S801,通过多个日志回放线程对一个重做日志集合进行日志回放的过程中,若接收到针对第一数据页的数据读取请求,则在确定第一数据页的指定位置记录有指定字段时,执行以下S802-S804。
其中,第一数据页的指定位置记录有指定字段,说明第一数据页最近发生了数据页结构变更事务。
S802,确定上一个重做日志集合的最后一个重做日志的第二日志序号;
其中,从数据库在对多个重做日志集合进行日志回放过程中,可以记录当前回放进度,该当前回放进度即为上一个重做日志集合的最后一个重做日志的第二日志序号。
S803,若第二日志序号大于指定字段中的第一日志序号,则根据数据读取请求对第一数据页的数据内容进行读取。
当第二日志序号大于第一日志序号时,说明数据页结构变更事务对应的最后一个重做日志已经回放完成,因此,可以对第一数据页的数据内容进行读取。
S804,若第二日志序号小于第一日志序号,则执行以下步骤S805-S807。
其中,当第二日志序号小于第一日志序号时,不确定数据页结构变更事务对应的多个重做日志是否都完成回放,需要进一步根据数据页结构变更事务的日志回放状态,确定是否可以读取第一数据页。
S805,获取数据页结构变更事务的最后一个重做日志的日志回放状态。
可选地,S805可以包括以下步骤:
D1、获取数据页结构变更事务的回放进度信息,回放进度信息中包括数据页结构变更事务对应的多个重做日志中未完成日志回放的重做日志的数量。
D2、若回放进度信息中未完成日志回放的重做日志的数量为0,则确定数据页结构变更事务的最后一个重做日志已经完成日志回放。
D3、若回放进度信息中未完成日志回放的重做日志的数量不为0,则确定数据页结构变更事务的最后一个重做日志未完成日志回放。
本申请实施例中,数据页结构变更事务可以表示为MTR,从数据库可以通过MTR哈希表,记录当前正在回放的重做日志集合内的每个MTR的回放进度信息。其中,MTR哈希表是一个固定长度的数组,数组的每个变量槽(Slot)中为一个Atomic变量,可以称为PC(PageCounter),用于记录对应的MTR中未完成回放的重做日志的数量(即数据页的数量);MTR哈希表中记录有每个MTR的SSN(包含该MTR的最后一个重做日志的第一志序号)以及PC。
在日志分发线程对多个重做日志集合分别进行划分过程中,可以根据每个重做日志记录的MTR的SSN,统计每个MTR的PC数量;在对每个重做日志集合进行日志回放过程中,对于每个MTR,每回放完一个重做日志,PC-1。
具体过程如下:
当日志分发线程将重做日志集合划分为多个重做日志子集时,对于每个重做日志,可以将该重做日志所属的MTR的最后一个重做日志的日志序号(END_LSN)与MTR哈希表的大小(Hash_Size)进行取模运算,得到志集合划分为多个重做日志子集时,对于每个重做日志,可以在MTR哈希表中的Slot索引:END_LSN/Hash_Size,然后对Slot内保存的PC=PC+1。
当日志回放线程回放完一个MTR内的一个数据页之后会把其在MTR哈希表内对应Slot的PC=PC–1。
因此,当读取第一数据页时,如果第一数据页的指定位置记录有指定字段SSN,说明第一数据页最近发生了MTR,则根据该SSN查找MTR哈希表,可以获得SSN对应的PC,从而获得该MTR的回放进度信息。
S806,若日志回放状态为已完成日志回放,则根据数据读取请求对第一数据页中的数据内容进行读取。
S807,若日志回放状态为未完成日志回放,则禁止对第一数据页中的数据内容进行读取。
从数据库通过多个日志回放线程对当前的重做日志集合进行日志回放过程中,当需要读取第一数据页时,结合该第一数据页中记录的SSN和MTR哈希表,以及当前回放进度(Applied_LSN)来判断这个数据页是否可读,该当前回放进度为上一个重做日志集合的最后一个重做日志的第二日志序号,具体的判断过程如下:
若SSN<Applied LSN(即上述实施例中的第二日志序号大于第一日志序号),说明MTR对应的最后一个重做日志已经回放完成,该第一数据页可读。
若SSN>Applied LSN(即上述实施例中的第二日志序号小于第一日志序号),且根据SSN得到MTR哈希表中的PC是0,说明MTR对应的最后一个重做日志已经回放完成,该第一数据页可读;若PC不是0,该第一数据页不可读,需要进行读重试。
示例性的,如图9所示,在对当前的重做日志集合进行日志回放过程中,当需要读取数据页2时,确定数据页2中记录的SSN为6,而当前回放进度Applied LSN为5,由于SSN>Applied LSN,需要根据该SSN查找MTR哈希表,获取到对应的PC为3,说明MTR对应的最后一个重做日志未回放完成,该数据页2不可读,需要进行读重试。
本申请上述实施例中,在对重做日志流进行划分时,按照预设的数据长度或者预设的日志数量依次对重做日志流划分,可能使得同一个数据页变更事务对应的多个重做日志划分到不同的重做日志集合,因此,在需要读取一个数据页时,如果该数据页发生了数据页结构变更事务,可以判断该数据页结构变更事务对应的多个重做日志是否已经完成回放,如果已完成回放,则允许读取该数据页,如果未完成回放,则禁止读取该数据页,需要后续进行读重试,以防止该数据页发生数据页结构变更事务后,不能正确读取到所需的数据,保证从数据库与主数据库的数据结构的一致性。
下面对本申请实施例的另一种主从数据库的同步方法进行介绍。
在一些实施例中,如图10A所示,本申请上述实施例的S202中,将重做日志流划分为多个重做日志集合,可以包括以下步骤:
S2021,依次解析重做日志流中的多个重做日志,每当确定一个数据页结构变更事务对应的多个重做日志时,将确定的多个重做日志作为一个重做日志子流。
其中,一个数据页结构变更事务对应的多个重做日志中,可以分别记录指定字段,用于表示发生了该数据页结构变更事务,指定字段包含该数据页结构变更事务的最后一个重做日志的日志序号。
S2022,将重做日志流依次划分为多个重做日志集合;其中,不同的重做日志子流位于不同的重做日志集合中,且每个重做日志子流位于所在的重做日志集合的一端;
S2023,依次对所述多个重做日志集合进行日志回放,其中,在对一个重做日志集合进行日志回放过程中,执行S203。
为了便于将一个数据页结构变更事务对应的重做日志子流,分配给同一个日志回放线程进行回放,同时,保证每个日志回放线程对同一数据页上的重做日志按照产生的先后顺序进行回放,可以将不同的重做日志子流划分至将不同的重做日志集合中,且每个重做日志子流位于所在的重做日志集合的一端,具体可以是重做日志集合的头部或者尾部,其中,重做日志集合从头部到尾部,多个重做日志的日志序号递增。
示例性的,如图10B所示,在依次解析重做日志流中的多个重做日志过程中,确定重做日志8、重做日志9、重做日志10对应一个数据页结构变更事务,将这3个重做日志作为一个重做日志子流,进一步地,确定重做日志25、重做日志26、重做日志27对应另一个数据页结构变更事务,将这3个重做日志作为另一个重做日志子流,以此类推。
当对重做日志流进行划分时,将重做日志1-重做日志10划分为重做日志集合A,即重做日志8、重做日志9、重做日志10组成的重做日志子流位于重做日志集合A的尾部;将重做日志11-重做日志20划分为重做日志集合B,将重做日志21-重做日志27划分为重做日志集合C,即重做日志25、重做日志26、重做日志27组成的位于重做日志集合C的尾部。
需要说明的是,每个重做日志子流也可以位于所在的重做日志集合的头部,在此不做限定。
进一步地,如图10C所示,本申请上述实施例的S203中,将一个重做日志集合划分为多个重做日志子集,可以包括以下步骤:
S203_1,若一个重做日志集合中包括重做日志子流,则将重做日志子流作为一个第一重做日志子集。
当重做日志集合中包括一个数据页结构变更事务对应的重做日志子流时,为了将重做日志子流分配给一个日志回放线程进行回放,可以将该重做日志子流划分为一个第一重做日志子集。因为,将重做日志子流分配给一个日志回放线程进行回放,可以在对重做日志子流中的第一个重做日志进行回放时,将重做日志子流涉及的多个数据页均设置为不可读,这样,可以保证从数据库与主数据库的数据结构的一致性。
S203_2,将一个重做日志集合的其他重做日志中,记录同一数据页的数据变更操作的至少一个重做日志作为一个第二重做日志子集,获得多个第二重做日志子集。
该步骤与本申请上述实施例中的S2031中确定同一数据页的重做日志的方式相同,可以对其他重做日志中的每个重做日志记录的数据页位置信息计算一个哈希值,可以理解的是,哈希值相同的至少一个重做日志对应同一数据页,具体过程不再赘述。
S203_3,将第一重做日志子集和多个第二重做日志子集,作为多个重做日志子集。
在一种可选的实施方式中,假设第一重做日志子集位于所在的重做日志集合的尾部,本申请上述实施例的S203中,通过多个日志回放线程分别对多个重做日志子集进行日志回放,可以包括以下步骤:
S203_4,通过多个日志回放线程分别对多个第二重做日志子集进行日志回放。
该步骤中,每个第二重做日志子集可以是一个数据页对应的至少一个重做日志,每个日志回放线程可以对至少一个第二重做日志子集分别进行日志回放,在对每个第二重做日志子集进行日志回放过程中,按照产生的先后顺序对该第二重做日志子集至少一个重做日志分别进行日志回放,以保证对每个数据页上的多个重做日志按照产生的先后顺序进行回放。
S203_5,若对多个第二重做日志子集完成日志回放,则采用多个日志回放线程中的一个日志回放线程对第一重做日志子集进行日志回放。
该步骤中,由于数据页结构变更事务对应的第一重做日志子集位于所在的重做日志集合的尾部,即第一重做日志子集因此,需要放到最后进行回放,在多个日志回放线程并行回放过程中,为了保证每个数据页上的重做日志按照先后顺序回放,需要使得重做日志子流位于所在重做日志集合的尾部,并且放在最后进行回放。
在另一种可选的实施方式中,假设第一重做日志子集位于所在的重做日志集合的头部,本申请上述实施例的S203中,通过多个日志回放线程分别对多个重做日志子集进行日志回放,可以包括以下步骤:
通过多个日志回放线程中的一个日志回放线程对第一重做日志子集进行日志回放;若对第一重做日志子集完成日志回放,则采用多个日志回放线程分别对多个第二重做日志子集进行日志回放。
本申请上述实施例中,在将重做日志流划分为多个重做日志集合后,可以依次对多个重做日志集合进行日志回放,也就是说,对一个重做日志集合回放完成后,再对下一个重做日志集合进行日志回放;而在对一个重做日志集合进行日志回放时,先将该一个重做日志集合划分为多个重做日志子集,再通过多个日志回放线程分别对多个重做日志子集进行日志回放。这样,在对大量重做日志进行回放时,可以缓解从数据库的日志回放压力;并且,在从数据库的数据读取压力较大时,避免阻塞日志回放线程,从而提高从数据库的日志回放性能,进而提高从数据的可用性。
在一些实施例中,为了提高整个重做日志流的回放效率,可以通过日志分发线程依次对多个重做日志集合进行划分;也就是说,在将一个重做日志集合划分为多个重做日志子集之后,可以继续将下一个重做日志集合划分为多个重做日志子集,这样,通过采用预分发的方式构造多个重做日志集合的并行回放流水线。
进一步地,在通过多个日志回放线程分别对一个重做日志集合的多个重做日志子集进行日志回放之后,继续通过多个日志回放线程分别对下一个重做日志集合的多个重做日志子集进行日志回放。
示例性的,如图11A所示,采用日志分发线程预解析的方式构造出日志回放流水线:
1)当多个日志回放线程回放完重做日志集合1,正在回放重做日志集合2期间,日志分发线程开始对重做日志集合10进行划分,并将划分完重做日志集合10放入重做日志集合队列的头部。
2)当多个日志回放线程回放完重做日志集合2之后,从重做日志集合队列的尾部取出待回放的重做日志集合3进行并行回放。
可见,日志分发线程和多个日志回放线程通过重做日志集合队列的连接,构成日志回放流水线。
图11B示出了本申请实施例的一种主从数据库的同步方法的逻辑示意图。
如图11B所示,本申请实施例中,从数据库将主数据库传送的重做日志流划分为多个重做日志集合,包括重做日志集合1、重做日志集合2……重做日志集合10,按照顺序依次对这10个重做日志集合进行日志回放;当对重做日志1进行日志回放时,假设通过日志分发线程将重做日志集合1划分为重做日志子集1、重做日志子集2、重做日志子集3、重做日志子集4、重做日志子集5,然后通过日志回放线程1分别将重做日志子集1、重做日志子集3回放至相应的数据页中,通过日志回放线程2分别将重做日志子集2、重做日志子集4回放至相应的数据页中,通过日志回放线程3将重做日志子集5回放至相应的数据页中。
日志回放线程在将重做日志集合a划分完成后,不需要等待重做日志集合a回放完成,可以继续对重做日志集合b进行划分,以此类推,将重做日志集合c、重做日志集合d分别进行划分,同时,多个日志回放线程在将一个重做日志集合回放完成后,继续对下一个重做日志集合进行回放。
与本申请上述方法实施例基于同一发明构思,本申请实施例中还提供了一种主从数据库的同步装置,该装置解决问题的原理与上述实施例的方法相似,因此该装置的实施可以参见上述方法的实施,重复之处不再赘述。
如图12所示,本申请实施例提供一种主从数据库的同步装置,包括日志获取模块121和日志回放模块122。
日志获取模块121,用于获取主数据库传送的重做日志流;其中,重做日志流中的每个重做日志用于记录在主数据库中执行的一次数据变更操作;
日志回放模块122,用于将重做日志流划分为多个重做日志集合,并依次对多个重做日志集合进行日志回放,其中,在对一个重做日志集合进行日志回放过程中,执行以下操作:
将一个重做日志集合划分为多个重做日志子集,并通过多个日志回放线程分别对多个重做日志子集进行日志回放;其中,一次日志回放包括:基于一个重做日志中记录的数据变更操作,对本地存储数据执行数据变更操作。
本申请实施例中,从数据库在获取到主数据库传送的重做日志流后,将重做日志流划分为多个重做日志集合,然后依次对多个重做日志集合进行日志回放,并且,在对每个重做日志集合进行日志回放过程中,将每个重做日志集合划分为多个重做日志子集,再通过多个日志回放线程分别对多个重做日志子集进行日志回放;这样,在对大量重做日志进行回放时,可以缓解从数据库的日志回放压力;并且,在从数据库的数据读取压力较大时,避免阻塞日志回放线程,从而提高从数据库的日志回放性能,进而提高从数据的可用性。
在一种可能的实施例中,将一个重做日志集合划分为多个重做日志子集时,日志回放模块122还用于:
将一个重做日志集合中,记录同一数据页的数据变更操作的至少一个重做日志作为一个重做日志子集,获得多个重做日志子集;其中,数据页为数据存储单位。
在一种可能的实施例中,将一个重做日志集合中,记录同一数据页的数据变更操作的至少一个重做日志作为一个重做日志子集,获得多个重做日志子集时,日志回放模块122还用于:
针对一个重做日志集合中的多个重做日志分别执行以下操作:根据一个重做日志记录的数据页位置信息,计算一个重做日志对应的哈希值;
将哈希值相同的至少一个重做日志作为一个重做日志子集,获得多个重做日志子集;其中,哈希值相同的至少一个重做日志对应同一数据页。
可选地,在将一个重做日志集合中,记录同一数据页的数据变更操作的至少一个重做日志作为一个重做日志子集,获得多个重做日志子集时,日志回放模块122还用于:
针对一个重做日志集合中的多个重做日志,分别执行以下操作:基于一个重做日志记录的数据页位置信息,确定一个重做日志对应的数据页;
将对应同一数据页的至少一个重做日志作为一个重做日志子集,获得多个重做日志子集。
可选地,当一个重做日志记录的数据变更操作属于数据页结构变更事务时,一个重做日志中还记录有指定字段;其中,数据页结构变更事务对应多个重做日志,指定字段包含数据页结构变更事务的最后一个重做日志的第一日志序号;
则日志回放模块122还用于:
在通过一个日志回放线程对一个重做日志进行日志回放时,将包含第一日志序号的指定字段写入一个重做日志对应的数据页的指定位置。
可选地,如图13所示,还包括第一数据读取模块123,用于:
在对一个重做日志集合进行日志回放的过程中,若接收到针对第一数据页的数据读取请求,则在确定第一数据页的指定字段记录有第一日志序号时,执行以下操作:
确定上一个重做日志集合的最后一个重做日志的第二日志序号;
若第二日志序号大于第一日志序号,则根据数据读取请求对第一数据页的数据内容进行读取。
可选地,还包括第二数据读取模块124,用于:
若第二日志序号小于第一日志序号,则获取数据页结构变更事务的最后一个重做日志的日志回放状态;
若日志回放状态为已完成日志回放,则根据数据读取请求对所述第一数据页中的数据内容进行读取;
若日志回放状态为未完成日志回放,则禁止对第一数据页中的数据内容进行读取。
可选地,在获取数据页结构变更事务的最后一个重做日志的日志回放状态时,第二数据读取模块124还用于:
获取数据页结构变更事务的最后一个重做日志的日志回放状态,包括:
获取数据页结构变更事务的回放进度信息,回放进度信息中包括数据页结构变更事务对应的多个重做日志中未完成日志回放的重做日志的数量;
若回放进度信息中未完成日志回放的重做日志的数量为0,则确定数据页结构变更事务的最后一个重做日志已经完成日志回放;
若回放进度信息中未完成日志回放的重做日志的数量不为0,则确定数据页结构变更事务的最后一个重做日志未完成日志回放。
可选地,在将重做日志流划分为多个重做日志集合时,日志回放模块122还用于:
按照设定步长将重做日志流依次划分为多个重做日志集合;设定步长对应预设的数据长度或者预设的日志数量。
可选地,在通过多个日志回放线程分别对多个重做日志子集进行日志回放时,日志回放模块122还用于:
针对多个日志回放线程,分别执行以下操作:
通过一个日志回放线程对多个重做日志子集中的至少一个重做日志子集依次进行日志回放;其中,在对一个重做日志子集进行日志回放过程中,执行以下操作:
按照预设顺序对一个重做日志子集中的至少一个重做日志分别进行日志回放。
可选地,在将重做日志流划分为多个重做日志集合时,日志回放模块122还用于:
依次解析重做日志流中的多个重做日志,每当确定一个数据页结构变更事务对应的多个重做日志时,将确定的多个重做日志作为一个重做日志子流;
将重做日志流依次划分为多个重做日志集合;其中,不同的重做日志子流位于不同的重做日志集合中,且每个重做日志子流位于所在的重做日志集合的一端。
可选地,在将一个重做日志集合划分为多个重做日志子集时,日志回放模块122还用于:
若一个重做日志集合中包括重做日志子流,则将重做日志子流作为一个第一重做日志子集;
将一个重做日志集合的其他重做日志中,记录同一数据页的数据变更操作的至少一个重做日志作为一个第二重做日志子集,获得多个第二重做日志子集;
将第一重做日志子集和多个第二重做日志子集,作为多个重做日志子集。
可选地,在通过多个日志回放线程分别对多个重做日志子集进行日志回放时,日志回放模块122还用于:
通过多个日志回放线程分别对多个第二重做日志子集进行日志回放;若对多个第二重做日志子集完成日志回放,则采用多个日志回放线程中的一个日志回放线程对第一重做日志子集进行日志回放;或者
通过多个日志回放线程中的一个日志回放线程对第一重做日志子集进行日志回放;若对第一重做日志子集完成日志回放,则采用多个日志回放线程分别对多个第二重做日志子集进行日志回放。
可选地,在将一个重做日志集合划分为多个重做日志子集之后,日志回放模块122还用于:
将下一个重做日志集合划分为多个重做日志子集。
通过多个日志回放线程分别对多个重做日志子集进行日志回放之后,日志回放模块122还用于:
通过多个日志回放线程分别对下一个重做日志集合的多个重做日志子集进行日志回放。
可选地,还包括第三数据读取模块125,用于:
在对一个重做日志集合进行日志回放过程中,若接收到针对第二数据页的数据读取请求,则在确定当前针对第二数据页对应的第二重做日志执行日志回放时,禁止对第二数据页进行数据读取;
若对第二重做日志完成日志回放,则重新对第二数据页中的数据内容进行读取。
为了描述的方便,以上各部分按照功能划分为各模块(或单元)分别描述。当然,在实施本申请时可以把各模块(或单元)的功能在同一个或多个软件或硬件中实现。
在介绍了本申请示例性实施方式的主从数据库的同步方法和装置之后,接下来,介绍根据本申请的另一示例性实施方式的主从数据库的同步装置。
所属技术领域的技术人员能够理解,本申请的各个方面可以实现为系统、方法或程序产品。因此,本申请的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。
在一些可能的实施方式中,根据本申请的主从数据库的同步装置可以至少包括处理器和存储器。其中,存储器存储有程序代码,当程序代码被处理器执行时,使得处理器执行本说明书中描述的根据本申请各种示例性实施方式的主从数据库的同步方法中的步骤。例如,所述处理器可以执行如图2中所示的步骤。
在介绍了本申请示例性实施方式的主从数据库的同步方法和装置之后,接下来,介绍根据本申请的另一示例性实施方式的电子设备。
与本申请上述方法实施例基于同一发明构思,本申请实施例中还提供了一种电子设备,该电子设备解决问题的原理与上述实施例的方法相似,因此该电子设备的实施可以参见上述方法的实施,重复之处不再赘述。
参阅图14所示,电子设备140可以至少包括处理器141、以及存储器142。其中,存储器142存储有程序代码,当程序代码被处理器141执行时,使得处理器141执行上述任意一种主从数据库的同步方法中的步骤。
在一些可能的实施方式中,根据本申请的电子设备可以至少包括至少一个处理器、以及至少一个存储器。其中,存储器存储有程序代码,当程序代码被处理器执行时,使得处理器执行本说明书上述描述的根据本申请各种示例性实施方式的主从数据库的同步方法中的步骤。例如,处理器可以执行图2中所示的步骤。
在示例性实施例中,本申请还提供了一种包括程序代码的存储介质,例如包括程序代码的存储器142,上述程序代码可由电子设备140的处理器141执行以完成上述主从数据库的同步方法。可选地,存储介质可以是非临时性计算机可读存储介质,例如,非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
下面参照图15来描述根据本申请的一种实施方式的电子设备150。图15的电子设备150仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图15,电子设备150以通用电子设备的形式表现。电子设备150的组件可以包括但不限于:至少一个处理单元151、至少一个存储单元152、连接不同系统组件(包括存储单元152和处理单元151)的总线153。
总线153表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器、外围总线、处理器或者使用多种总线结构中的任意总线结构的局域总线。
存储单元152可以包括易失性存储器形式的可读介质,例如随机存取存储器(RAM)1521和/或高速缓存存储单元1522,还可以进一步包括只读存储器(ROM)1523。
存储单元152还可以包括具有一组(至少一个)程序模块1524的程序/实用工具1525,这样的程序模块1524包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
电子设备150也可以与一个或多个外部设备154(例如键盘、指向设备等)通信,还可与一个或者多个使得用户能与电子设备150交互的设备通信,和/或与使得该电子设备150能与一个或多个其它电子设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口155进行。并且,电子设备150还可以通过网络适配器156与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器156通过总线153与用于电子设备150的其它模块通信。应当理解,尽管图中未示出,可以结合电子设备150使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理器、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
在一些可能的实施方式中,本申请提供的主从数据库的同步方法的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在电子设备上运行时,程序代码用于使电子设备执行本说明书上述描述的根据本申请各种示例性实施方式的主从数据库的同步方法中的步骤,例如,电子设备可以执行如图2中所示的步骤。
程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
本申请的实施方式的程序产品可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在计算装置上运行。然而,本申请的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被命令执行系统、装置或者器件使用或者与其结合使用。
可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由命令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
应当注意,尽管在上文详细描述中提及了装置的若干单元或子单元,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本申请的实施方式,上文描述的两个或更多单元的特征和功能可以在一个单元中具体化。反之,上文描述的一个单元的特征和功能可以进一步划分为由多个单元来具体化。
此外,尽管在附图中以特定顺序描述了本申请方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (11)
1.一种主从数据库的同步方法,其特征在于,包括:
从数据库获取主数据库传送的重做日志流;其中,所述重做日志流中的每个重做日志用于记录在所述主数据库中执行的一次数据变更操作;
将所述重做日志流划分为多个重做日志集合,并依次对所述多个重做日志集合进行日志回放,其中,在对一个重做日志集合进行日志回放过程中,执行以下操作:
将一个重做日志集合划分为多个重做日志子集,其中,记录同一数据页的数据变更操作的至少一个重做日志位于同一重做日志子集;
通过多个日志回放线程分别对所述多个重做日志子集进行日志回放;其中,一次日志回放包括:基于一个重做日志中记录的数据变更操作,对本地存储数据执行所述数据变更操作;
所述将所述重做日志流划分为多个重做日志集合,包括:
依次解析所述重做日志流中的多个重做日志,每当确定一个数据页结构变更事务对应的多个重做日志时,将确定的多个重做日志作为一个重做日志子流;其中,所述数据页结构变更事务包括数据页分裂或者数据页合并,涉及多个数据页的数据变更;
将不同的重做日志子流划分至不同的重做日志集合中,且每个重做日志子流位于所在的重做日志集合的头部或尾部;
所述将一个重做日志集合划分为多个重做日志子集,包括:
若所述一个重做日志集合中包括重做日志子流,则将所述重做日志子流作为一个第一重做日志子集;
将所述一个重做日志集合的其他重做日志中,记录同一数据页的数据变更操作的至少一个重做日志作为一个第二重做日志子集,获得多个第二重做日志子集;
将所述第一重做日志子集和所述多个第二重做日志子集,作为所述多个重做日志子集;
所述通过多个日志回放线程分别对所述多个重做日志子集进行日志回放,包括:
若所述重做日志子流位于所在的重做日志集合的尾部,则通过所述多个日志回放线程分别对所述多个第二重做日志子集进行日志回放;若对所述多个第二重做日志子集完成日志回放,则采用所述多个日志回放线程中的一个日志回放线程对所述第一重做日志子集进行日志回放;或者
若所述重做日志子流位于所在的重做日志集合的头部,则通过所述多个日志回放线程中的一个日志回放线程对所述第一重做日志子集进行日志回放;若对所述第一重做日志子集完成日志回放,则通过所述多个日志回放线程分别对所述多个第二重做日志子集进行日志回放;
所述通过所述多个日志回放线程分别对所述多个第二重做日志子集进行日志回放,包括:
针对所述多个日志回放线程,分别执行以下操作:
通过一个日志回放线程对所述多个第二重做日志子集中的至少一个第二重做日志子集分别进行日志回放;其中,在对一个第二重做日志子集进行日志回放过程中,按照预设顺序对所述一个第二重做日志子集中的至少一个重做日志分别进行日志回放。
2.根据权利要求1所述的方法,其特征在于,所述将所述一个重做日志集合中,记录同一数据页的数据变更操作的至少一个重做日志作为一个重做日志子集,获得多个重做日志子集,包括:
针对所述一个重做日志集合中的多个重做日志分别执行以下操作:根据一个重做日志记录的数据页位置信息,计算所述一个重做日志对应的哈希值;
将哈希值相同的至少一个重做日志作为一个重做日志子集,获得多个重做日志子集;其中,哈希值相同的至少一个重做日志对应同一数据页。
3.根据权利要求1或2所述的方法,其特征在于,当一个重做日志记录的数据变更操作属于数据页结构变更事务时,所述一个重做日志中还记录有指定字段;其中,所述数据页结构变更事务对应多个重做日志,所述指定字段包含所述数据页结构变更事务的最后一个重做日志的第一日志序号;
则所述方法还包括:
在通过一个日志回放线程对所述一个重做日志进行日志回放时,将包含所述第一日志序号的指定字段写入所述一个重做日志对应的数据页的指定位置。
4.根据权利要求3所述的方法,其特征在于,还包括:
在对一个重做日志集合进行日志回放的过程中,若接收到针对第一数据页的数据读取请求,则在确定所述第一数据页的指定位置记录有所述指定字段时,执行以下操作:
确定上一个重做日志集合的最后一个重做日志的第二日志序号;
若所述第二日志序号大于所述指定字段中的第一日志序号,则根据所述数据读取请求对所述第一数据页的数据内容进行读取。
5.根据权利要求4所述的方法,其特征在于,还包括:
若所述第二日志序号小于所述第一日志序号,则获取所述数据页结构变更事务的最后一个重做日志的日志回放状态;
若所述日志回放状态为已完成日志回放,则根据所述数据读取请求对所述第一数据页中的数据内容进行读取;
若所述日志回放状态为未完成日志回放,则禁止对所述第一数据页中的数据内容进行读取。
6.根据权利要求5所述的方法,其特征在于,所述获取所述数据页结构变更事务的最后一个重做日志的日志回放状态,包括:
获取所述数据页结构变更事务的回放进度信息,所述回放进度信息中包括所述数据页结构变更事务对应的多个重做日志中未完成日志回放的重做日志的数量;
若所述回放进度信息中未完成日志回放的重做日志的数量为0,则确定所述数据页结构变更事务的最后一个重做日志已经完成日志回放;
若所述回放进度信息中未完成日志回放的重做日志的数量不为0,则确定所述数据页结构变更事务的最后一个重做日志未完成日志回放。
7.根据权利要求1或2所述的方法,其特征在于,所述将所述重做日志流划分为多个重做日志集合,包括:
按照设定步长将所述重做日志流依次划分为多个重做日志集合;所述设定步长对应预设的数据长度或者预设的日志数量。
8.根据权利要求1或2所述的方法,其特征在于,所述将一个重做日志集合划分为多个重做日志子集之后,还包括:
将下一个重做日志集合划分为多个重做日志子集;
所述通过多个日志回放线程分别对所述多个重做日志子集进行日志回放之后,还包括:
通过所述多个日志回放线程分别对所述下一个重做日志集合的多个重做日志子集进行日志回放。
9.一种主从数据库的同步装置,其特征在于,包括:
日志获取模块,用于获取主数据库传送的重做日志流;其中,所述重做日志流中的每个重做日志用于记录在所述主数据库中执行的一次数据变更操作;
日志回放模块,用于将所述重做日志流划分为多个重做日志集合,并依次对所述多个重做日志集合进行日志回放,其中,在对一个重做日志集合进行日志回放过程中,执行以下操作:
将一个重做日志集合划分为多个重做日志子集,其中,记录同一数据页的数据变更操作的至少一个重做日志位于同一重做日志子集;
通过多个日志回放线程分别对所述多个重做日志子集进行日志回放;其中,一次日志回放包括:基于一个重做日志中记录的数据变更操作,对本地存储数据执行所述数据变更操作;
所述日志回放模块具体用于:
在将所述重做日志流划分为多个重做日志集合的过程中,依次解析所述重做日志流中的多个重做日志,每当确定一个数据页结构变更事务对应的多个重做日志时,将确定的多个重做日志作为一个重做日志子流,其中,所述数据页结构变更事务包括数据页分裂或者数据页合并,涉及多个数据页的数据变更;
将不同的重做日志子流划分至不同的重做日志集合中,且每个重做日志子流位于所在的重做日志集合的头部或尾部;
在将一个重做日志集合划分为多个重做日志子集时,若所述一个重做日志集合中包括重做日志子流,则将所述重做日志子流作为一个第一重做日志子集;
将所述一个重做日志集合的其他重做日志中,记录同一数据页的数据变更操作的至少一个重做日志作为一个第二重做日志子集,获得多个第二重做日志子集;
将所述第一重做日志子集和所述多个第二重做日志子集,作为所述多个重做日志子集;
在通过多个日志回放线程分别对所述多个重做日志子集进行日志回放时,执行以下操作:
若所述重做日志子流位于所在的重做日志集合的尾部,则通过所述多个日志回放线程分别对所述多个第二重做日志子集进行日志回放;若对所述多个第二重做日志子集完成日志回放,则采用所述多个日志回放线程中的一个日志回放线程对所述第一重做日志子集进行日志回放;或者
若所述重做日志子流位于所在的重做日志集合的头部,则通过所述多个日志回放线程中的一个日志回放线程对所述第一重做日志子集进行日志回放;若对所述第一重做日志子集完成日志回放,则通过所述多个日志回放线程分别对所述多个第二重做日志子集进行日志回放;
在通过所述多个日志回放线程分别对所述多个第二重做日志子集进行日志回放时,针对所述多个日志回放线程,分别执行以下操作:
通过一个日志回放线程对所述多个第二重做日志子集中的至少一个第二重做日志子集分别进行日志回放;其中,在对一个第二重做日志子集进行日志回放过程中,按照预设顺序对所述一个第二重做日志子集中的至少一个重做日志分别进行日志回放。
10.一种电子设备,其特征在于,其包括处理器和存储器,其中,所述存储器存储有程序代码,当所述程序代码被所述处理器执行时,使得所述处理器执行权利要求1~8中任一所述方法的步骤。
11.一种计算机可读存储介质,其特征在于,其包括程序代码,当所述程序代码在电子设备上运行时,所述程序代码用于使所述电子设备执行权利要求1~8中任一所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210064633.3A CN115114370B (zh) | 2022-01-20 | 2022-01-20 | 主从数据库的同步方法、装置、电子设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210064633.3A CN115114370B (zh) | 2022-01-20 | 2022-01-20 | 主从数据库的同步方法、装置、电子设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115114370A CN115114370A (zh) | 2022-09-27 |
CN115114370B true CN115114370B (zh) | 2023-06-13 |
Family
ID=83324662
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210064633.3A Active CN115114370B (zh) | 2022-01-20 | 2022-01-20 | 主从数据库的同步方法、装置、电子设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115114370B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117194566B (zh) * | 2023-08-21 | 2024-04-19 | 泽拓科技(深圳)有限责任公司 | 多存储引擎数据复制方法、系统、计算机设备 |
CN117555884B (zh) * | 2024-01-12 | 2024-04-26 | 腾讯科技(深圳)有限公司 | 数据页的读取方法、装置、设备及可读存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105740248A (zh) * | 2014-12-09 | 2016-07-06 | 华为软件技术有限公司 | 一种数据同步方法、装置及系统 |
CN108874588A (zh) * | 2018-06-08 | 2018-11-23 | 郑州云海信息技术有限公司 | 一种数据库实例恢复方法和装置 |
CN109101627A (zh) * | 2018-08-14 | 2018-12-28 | 交通银行股份有限公司 | 异构数据库同步方法及装置 |
CN110442560A (zh) * | 2019-08-14 | 2019-11-12 | 上海达梦数据库有限公司 | 一种日志重演方法、装置、服务器和存储介质 |
CN112100141A (zh) * | 2020-09-11 | 2020-12-18 | 北京金山云网络技术有限公司 | 一种数据页处理方法、装置及系统 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101207510B1 (ko) * | 2008-12-18 | 2012-12-03 | 한국전자통신연구원 | 클러스터 데이터 관리시스템 및 클러스터 데이터 관리 시스템에서 공유 재수행 로그를 이용한 데이터 재구축 방법 |
US8429134B2 (en) * | 2009-09-08 | 2013-04-23 | Oracle International Corporation | Distributed database recovery |
CN103049355B (zh) * | 2012-12-25 | 2015-06-17 | 华为技术有限公司 | 一种数据库系统恢复方法及设备 |
US9767178B2 (en) * | 2013-10-30 | 2017-09-19 | Oracle International Corporation | Multi-instance redo apply |
CN109213817B (zh) * | 2018-08-10 | 2019-09-06 | 杭州数梦工场科技有限公司 | 增量数据抽取方法、装置及服务器 |
US11321354B2 (en) * | 2019-10-01 | 2022-05-03 | Huawei Technologies Co., Ltd. | System, computing node and method for processing write requests |
CN111290714B (zh) * | 2020-02-06 | 2023-09-05 | 北京百度网讯科技有限公司 | 数据读取方法和装置 |
CN112416654B (zh) * | 2020-11-26 | 2024-04-09 | 上海达梦数据库有限公司 | 一种数据库日志重演方法、装置、设备及存储介质 |
-
2022
- 2022-01-20 CN CN202210064633.3A patent/CN115114370B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105740248A (zh) * | 2014-12-09 | 2016-07-06 | 华为软件技术有限公司 | 一种数据同步方法、装置及系统 |
CN108874588A (zh) * | 2018-06-08 | 2018-11-23 | 郑州云海信息技术有限公司 | 一种数据库实例恢复方法和装置 |
CN109101627A (zh) * | 2018-08-14 | 2018-12-28 | 交通银行股份有限公司 | 异构数据库同步方法及装置 |
CN110442560A (zh) * | 2019-08-14 | 2019-11-12 | 上海达梦数据库有限公司 | 一种日志重演方法、装置、服务器和存储介质 |
CN112100141A (zh) * | 2020-09-11 | 2020-12-18 | 北京金山云网络技术有限公司 | 一种数据页处理方法、装置及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN115114370A (zh) | 2022-09-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7271670B2 (ja) | データレプリケーション方法、装置、コンピュータ機器及びコンピュータプログラム | |
Vora | Hadoop-HBase for large-scale data | |
US10078682B2 (en) | Differentiated secondary index maintenance in log structured NoSQL data stores | |
CN109254733B (zh) | 用于存储数据的方法、装置和系统 | |
Chandra | BASE analysis of NoSQL database | |
US11860900B2 (en) | Log-based distributed transaction management | |
Bailis et al. | Bolt-on causal consistency | |
JP5387757B2 (ja) | 並列データ処理システム、並列データ処理方法及びプログラム | |
CN115114370B (zh) | 主从数据库的同步方法、装置、电子设备和存储介质 | |
US11314717B1 (en) | Scalable architecture for propagating updates to replicated data | |
CN111414403B (zh) | 数据访问方法和装置、数据存储方法和装置 | |
CN110134737B (zh) | 数据变化监听方法及装置、电子设备和计算机可读存储介质 | |
CN104519103A (zh) | 网络数据的同步处理方法、服务器及相关系统 | |
CN112965939A (zh) | 一种文件合并方法、装置和设备 | |
Podgorelec et al. | A brief review of database solutions used within blockchain platforms | |
WO2019109256A1 (zh) | 一种日志管理方法、服务器和数据库系统 | |
CN114741449A (zh) | 一种基于分布式数据库的对象存储方法及装置 | |
CN114297196B (zh) | 元数据存储方法、装置、电子设备及存储介质 | |
CN110121712B (zh) | 一种日志管理方法、服务器和数据库系统 | |
CN110196788A (zh) | 一种数据读取方法、装置、系统及存储介质 | |
CN111930684A (zh) | 基于hdfs的小文件处理方法、装置、设备及存储介质 | |
Dhanda | Big data storage and analysis | |
CN114817402A (zh) | 分布式数据库于多region部署场景下的SQL执行优化方法 | |
Kumar | Big data using Hadoop and Hive | |
Vilaça et al. | On the expressiveness and trade-offs of large scale tuple stores |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20230919 Address after: 35th floor, Tencent building, Keji Zhongyi Road, high tech Zone, Nanshan District, Shenzhen City, Guangdong Province Patentee after: TENCENT TECHNOLOGY (SHENZHEN) Co.,Ltd. Patentee after: TENCENT CLOUD COMPUTING (BEIJING) Co.,Ltd. Address before: 35th floor, Tencent building, Keji Zhongyi Road, high tech Zone, Nanshan District, Shenzhen City, Guangdong Province Patentee before: TENCENT TECHNOLOGY (SHENZHEN) Co.,Ltd. |