CN114090538A - 数据回溯方法及装置 - Google Patents
数据回溯方法及装置 Download PDFInfo
- Publication number
- CN114090538A CN114090538A CN202010918128.1A CN202010918128A CN114090538A CN 114090538 A CN114090538 A CN 114090538A CN 202010918128 A CN202010918128 A CN 202010918128A CN 114090538 A CN114090538 A CN 114090538A
- Authority
- CN
- China
- Prior art keywords
- data
- metadata
- log
- fragment
- file
- 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.)
- Pending
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/21—Design, administration or maintenance of databases
- G06F16/219—Managing data history or versioning
-
- 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/23—Updating
- G06F16/2358—Change logging, detection, and notification
-
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on storage systems
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Human Computer Interaction (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种数据回溯方法及装置,属于数据库技术领域。所述方法包括:获取日志数据的元数据中目标历史时刻对应的第一元数据;获取多个分片数据中每个分片数据的元数据中所述目标历史时刻对应的第二元数据,所述多个分片数据是对所述日志数据分片处理得到的数据;按照所述第一元数据处理所述日志数据,得到目标历史时刻的日志数据;按照所述第二元数据处理所述多个分片数据,得到目标历史时刻的多个分片数据。本申请能够减少数据回溯时延。本申请用于数据库的容灾。
Description
本申请要求于2020年7月30日提交的申请号为202010748428.X、发明名称为“快照闪回的方法、装置、服务器及存储介质”的中国专利申请的优先权,其全部内容通过引用结合在本申请中。
技术领域
本申请涉及数据库技术领域,特别涉及一种数据回溯方法及装置。
背景技术
为了提高数据库(Database,DB)的容灾性,需要在一些场景下进行数据的回溯。例如,在一些数据库中,在每次进行更新操作时,如数据操纵语言(Data ManipulationLanguage,DML)操作,数据库需要在指定存储空间中对该操作进行逻辑记录。在需要进行数据的回溯时,从该指定存储空间中按照时间由近到远的顺序从读取逻辑记录的每次更新操作,并对读取的更新操作进行逆操作,直至将数据回溯到指定时间点。但是,该回溯过程进行逻辑记录读取以及更新操作进行逆操作的过程复杂,数据回溯时延较长。
发明内容
本申请实施例提供了一种数据回溯方法及装置。该技术方案如下:
第一方面,提供了一种数据回溯方法,该数据回溯方法的全部或部分可以由数据库系统执行,例如由管理节点执行,该方法包括:
获取日志数据的元数据中目标历史时刻对应的第一元数据;获取多个分片数据中每个分片数据的元数据中该目标历史时刻对应的第二元数据,该多个分片数据是对该日志数据分片处理得到的数据;按照该第一元数据处理该日志数据,得到目标历史时刻的日志数据;按照该第二元数据处理该多个分片数据,得到目标历史时刻的多个分片数据。
本申请实施例中,基于日志数据的目标历史时刻对应的第一元数据回溯日志数据,基于分片数据的目标历史时刻对应的第二元数据回溯分片数据,无需进行逻辑记录的读取和更新操作的逆操作,数据回溯效率较高,有效降低数据回溯时延。
在一种可选方式中,该目标历史时刻对应的第一元数据和该目标历史时刻对应的第二元数据通过快照获取。通过快照进行第一元数据和第二元数据的获取可以提高元数据获取的速度,减少获取时延。
在一种可选方式中,该按照该第一元数据指示的处理该日志数据,得到目标历史时刻的日志数据的过程,包括:按照该第一元数据指示的数据位置,回退该日志数据,得到该目标历史时刻的日志数据。
在另一种可选方式中,该按照该第二元数据处理该多个分片数据,得到目标历史时刻的多个分片数据的过程,包括:按照该第二元数据指示的数据位置,回退该多个分片数据,得到该目标历史时刻的多个分片数据。
由于前述采集时刻的不一致,或者其他原因,可能导致目标历史时刻的日志数据与目标历史时刻的多个分片数据的不一致(即日志数据中的部分数据并未落入对应的分片中),则本申请实施例所提供的数据回溯方法还包括:基于该目标历史时刻的日志数据,更新该目标历史时刻的多个分片数据。如此可以实现目标历史时刻的日志数据和目标历史时刻的分片数据的一致。
示例的,该更新过程包括:基于分片关系数据和该目标历史时刻的日志数据,更新该目标历史时刻的多个分片数据,该分片关系数据用于记录日志数据中的子数据与分片的对应关系。
由于管理节点是基于分片关系数据确定日志数据对应的分片数据的,因此在获取分片数据时,也需要获取分片关系数据。在一种可选方式中,可以直接存储每个采集时刻对应的分片关系数据,在数据回溯时提取该分片关系数据;在另一种可选方式中,可以存储分片关系规则,以在数据回溯时基于该分片关系规则获取分片关系数据;在再一种可选方式中,分片关系数据具有元数据,也即是分片关系对应的数据包括:分片关系数据和第三元数据,管理节点可以存储该第三元数据,以便在数据回溯时基于该元数据获取分片关系数据。其中,该第三元数据用于描述该分片关系数据。则在进行数据回溯时,该分片关系数据由分片关系数据的第三元数据恢复得到。通过第三元数据来获取分片关系数据,可以实现分片关系数据的快速获取。如此可以在无需进行数据回溯的时候仅存储第三元数据,在需要获取分片关系数据时基于第三元数据进行分片关系数据的恢复,减少对存储空间的占用。
该基于分片关系数据,以及该目标历史时刻的日志数据,更新该目标历史时刻的多个分片数据的过程,包括:基于该日志数据的第一元数据指示的数据结束位置与该多个分片数据的第二元数据指示的数据结束位置,确定增量日志数据;基于该增量日志数据以及分片关系数据,确定至少一个增量分片数据;基于该分片关系数据和该至少一个增量分片数据,更新该多个分片数据,更新后的该多个分片数据包括该至少一个增量分片数据。
在一种示例中,本申请实施例中的增量分片数据的更新过程支持幂等特性。则基于该分片关系数据和该至少一个增量分片数据,更新该多个分片数据的过程包括:
对于每个增量分片数据,检测对应的目标分片存储的数据是否存在与该增量分片数据相同的数据;当对应的目标分片存储的数据均与增量分片数据不同时,将增量分片数据写入对应的目标分片;当对应的目标分片存储有与增量分片数据相同的数据时,禁止写入增量分片数据,或者,采用增量分片数据覆盖对应的目标分片中与增量分片数据相同的数据,目标分片为基于分片关系数据确定的增量分片数据对应的分片。采用上述两种方式,可以避免最终存储的分片数据中存在重复的数据,减少冗余数据对存储空间的占用,实现幂等特性。
示例的,前述日志数据的第一元数据指示的数据结束位置由连续落盘LSN表示,该连续落盘LSN为对应时刻已连续落盘的日志数据对应的LSN中最大的LSN;该多个分片数据的第二元数据指示的数据结束位置由全局分片落盘LSN表示,该全局分片落盘LSN为对应时刻已全局连续落盘的分片数据对应的LSN中最大的LSN。
可选地,该日志数据和该分片数据中任一数据的元数据包括:至少一个文件中每个文件的数据写入信息,该至少一个文件用于存储该任一数据;任一文件的数据写入信息用于记录该任一文件在该至少一个文件中的位置,以及该任一文件中的写入数据(即写入的该任一数据)的结束位置。通过此种元数据可以有效标识各个文件的位置,从而在数据回溯时,实现文件的依次连续获取,保证文件的连续性,从而恢复得到有效的该任一数据。
由于LSN表征了事务写入到事务日志的字节总量。则显然,LSN是一种针对事务日志的典型的数据量的指示信息。又由于一个文件的日志数据是不断写入的。随着事务记录写入条数的增多,LSN也逐渐增大。因此,文件中的写入数据所携带的最大的LSN(即最近写入的事务记录的LSN)能够反映该写入数据的结束位置。可选地,该任一文件的数据写入信息包括:该任一文件中的写入数据中携带的最大LSN,以此来标识写入数据的结束位置。可选地,该日志数据对应的任一文件的数据写入信息还包括:该任一文件的文件位置标识。该文件位置标识用于标识该任一文件在其所属的至少一个文件中的位置。
在一种可选方式中,该目标历史时刻对应的第一元数据和第二元数据是在k个采集时刻对应的元数据中筛选得到的,该k为正整数,该k个采集时刻中每个采集时刻对应的元数据包括日志数据的元数据和多个分片数据的元数据。如此,每个采集时刻对应的元数据实际为一组元数据集合。示例的,管理节点可以周期性地进行数据库的元数据采集或者在接收到数据采集指令后进行数据库的元数据的采集,以得到k个采集时刻对应的元数据。该采集时刻可以为采集开始时刻,也可以为采集结束时刻,还可以为采集开始时刻和采集结束时刻之间的时刻(即元数据的采集时段内的时刻),其用于标识元数据的采集时段中数据库中各个元数据的状态。需要说明的是,若采集时段较长,由于采集开始时刻到采集结束时刻可能出现数据的变化,因此采用采集结束时刻作为前述采集时刻,可以实现元数据的采集时段中数据库中各个元数据的状态的准确标识。
在另一种可选方式中,该目标历史时刻对应的第一元数据是在n个第一采集时刻对应的元数据中筛选得到的,该n个采集时刻中每个采集时刻对应的元数据包括日志数据的元数据,该n为正整数;对于该每个分片数据,该目标历史时刻对应的第二元数据是在m个第二采集时刻对应的元数据中得到的,该n个采集时刻中每个采集时刻对应的元数据包括多个分片数据的元数据该m为正整数。
可选地,m等于n,该n个第一采集时刻与该m个第二采集时刻一一对应,对应的第一采集时刻和第二采集时刻的时间差小于差值阈值。通过将第一采集时刻和第二采集时刻设置的相近或相同,可以简化元数据采集的流程,便于后续进行数据回溯。
第二方面,提供了一种数据回溯装置,所述装置包括至少一个模块,该至少一个模块可以用于实现上述第一方面或者第一方面的各种可能实现提供的该数据回溯方法。
第三方面,本申请提供一种计算机设备,该计算机设备包括处理器和存储器。该存储器存储计算机指令;该处理器执行该存储器存储的计算机指令,使得该计算机设备执行上述第一方面或者第一方面的各种可能实现提供的方法,使得该计算机设备部署上述第二方面或者第二方面的各种可能实现提供的该数据回溯装置。
第四方面,本申请提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机指令,该计算机指令指示该计算机设备执行上述第一方面或者第一方面的各种可能实现提供的方法,或者该计算机指令指示该计算机设备部署上述第二方面或者第二方面的各种可能实现提供的数据回溯装置。
第五方面,本申请提供一种计算机程序产品,该计算机程序产品包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器可以从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述第一方面或者第一方面的各种可能实现提供的方法,使得该计算机设备部署上述第二方面或者第二方面的各种可能实现提供的数据回溯装置。
第六方面,提供一种芯片,该芯片可以包括可编程逻辑电路和/或程序指令,当该芯片运行时用于实现如第一方面任一该的数据回溯方法。
综上所述,本申请实施例中,基于日志数据的目标历史时刻对应的第一元数据回溯日志数据,基于分片数据的目标历史时刻对应的第二元数据回溯分片数据,无需进行逻辑记录的读取和更新操作的逆操作,数据回溯效率较高,有效降低数据回溯时延。
附图说明
图1是本申请实施例提供的一种分片数据的生成原理示意图;
图2是本申请实施例提供的数据回溯方法所涉及分布式数据库系统的一种应用环境的示意图;
图3是本申请实施例提供的数据回溯方法所涉及分布式数据库系统的另一种应用环境的示意图;
图4是本申请实施例提供的一种事务记录的结构示意图;
图5是本申请实施例提供的一种数据回溯方法的流程示意图;
图6是本申请实施例提供的另一种数据回溯方法的流程示意图;
图7是本申请实施例提供的一种数据回溯方法的时间轴示意图;
图8是本申请实施例提供的另一种数据回溯方法的时间轴示意图;
图9本申请实施例提供的一种示意性的目标历史时刻的日志数据的存储状态示意图;
图10本申请实施例提供的一种示意性的目标历史时刻的分片数据的存储状态示意图;
图11是本申请实施例提供的一种回溯原理示意图;
图12是本申请实施例提供的一种数据库系统的结构示意图;
图13是本申请实施例提供的一种回退效果示意图;
图14是本申请实施例提供的一种数据回溯装置的结构示意图;
图15是本申请实施例提供的一种数据回溯装置的结构示意图;
图16示意性地提供本申请实施例提供的计算机设备的一种可能的基本硬件架构。
具体实施方式
为使本申请的原理和技术方案更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
为了便于读者理解,以下对本申请实施例中所涉及的名词进行解释:
关系型数据库:是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据。每个关系模型可以称为一个关系表。根据存储原理的不同,关系型数据库可以分为分布式关系型数据库和非分布式关系型数据库。
事务:是维护数据库数据一致性和完整性的单位,其具备“要么全成功,要么全失败”的特性。一个事务在提交前,数据库不对其数据的一致性和完整性负责。但事务一旦提交,数据库就要保证数据的一致性和完整性,简单来说就是事务一旦提交后,就不能丢数据。在关系型数据库中,为了提升性能,一般把事务数据(即事务执行时所涉及的数据,也称事务内容)写入到事务日志和缓冲池(Buffer Pool)后,事务就提交了。
页面(page):也称页、数据页、物理页或物理页面,页面是数据库系统存储的基本单位。例如,在某一数据库系统中,页面的大小是8千字节(KB),则该数据库系统中每兆字节有128页。
事务日志(redo log):在关系型数据库中,用于记录事务在执行过程中所涉及的数据。该事务日志是可以直接存放在磁盘上的一组文件,其通常是顺序存储的物理日志。事务日志用于记录页面的历史修改信息(通常是物理修改信息)。比如,某一事物日志用于记录对1个页面上的第10字节(byte)至第13字节的历史修改信息。采用事物日志记录页面的历史修改信息,比重新生成一个页面更加高效,从而可以保证较高的写入效率。该事务日志通常被存储在一个或多个日志文件(例如2个日志文件)中,日志文件中存储着事务记录(redo records),每一个事务记录也被称作为事务条目(redo entry),该事务记录是一组改变向量(change vectors,cv),也称改变载体,每一个改变载体描述的是数据库中单个数据块的改变。例如:一个雇员(employee)表中的薪水值被修改,会产生一个事务记录,这个事务记录包括一个改变载体,该改变载体描述的是这个雇员表中数据块的改变。在关系型数据库中,每一个数据库实例都设置有一个对应的事务日志,也即是该事务日志可以表示一个数据库实例。
在通过事务处理了数据查询指令后,相应的事务数据在事务日志和缓冲池中均已经发生变化,但还未将对应的页面记录到存储介质(如磁盘)中,这种与缓冲池中记录内容不同的页面称为脏页。基于缓冲池的数据,将脏页记录到存储介质的过程称为刷脏。若数据库还有部分脏页没有写入存储介质时,发生了故障,如崩溃(crash),缓冲池中的数据就会丢失,如此就需要存储在存储介质中的事务日志来还原缓冲池中的数据。因此,事务日志的主要作用是进行关系型数据库中的数据还原,保证关系型数据库中的数据的一致性和完整性。
元数据(metadata):又称中介数据或中继数据,为描述数据的数据(data aboutdata),通常为用于描述数据属性(property)的信息,元数据可以用于支持如指示存储位置、历史数据、资源查找或文件记录等功能。
分片:是数据存储节点中的一个独立的数据区域(也称存储空间),该区域可以是物理上与其他分片隔离的,也是可以是逻辑上进行隔离的。
日志序列号(log sequence number,LSN):是一个递增型的整形数字,表示事务写入到事务日志的字节总量。由于其一直递增,LSN可以作为表示不同时刻写入的事务数据的唯一标识。LSN主要用于数据库发生故障时对数据进行恢复。LSN既可以保存在事务日志中,也可以保存在缓冲池中。
落盘:指的是数据写入存储介质。该存储介质为非易失性计算机可读存储介质,如磁盘、只读存储器或光盘等。
日志优先(write ahead log,WAL)原则:也称日志先行原则,即当事务提交时,先在存储介质中写入事务日志,再修改页面数据,此处的页面数据指的是缓冲池中的数据页和索引页的数据。
快照(snapshot):关于指定数据集合的一个完全可用拷贝,该拷贝包括相应数据在某个时刻(拷贝开始的时刻)的映像。快照可以是其所表示的数据的一个副本,也可以是数据的一个复制品。本申请实施例中的快照可以参考新技术文件系统(New TechnologyFile System,NTFS)或第四代扩展文件系统(英语:Fourth extended filesystem,EXT4)的快照。应用于数据库中的快照也称数据库快照。
本申请实施例中所提及的日志数据均为事务日志的日志数据。下面,对关系型数据库的日志数据存储原理进行简单介绍:当关系型数据库是分布式数据库时,如图1所示,事务日志的日志数据会被划分为多个分片日志数据,分别存储在数据存储节点的分片中,每个分片中的数据称为分片数据。通常每个分片数据至少包括分片日志数据,还可以包括分片页面数据。其中分片日志数据包含日志数据的部分内容,分片页面数据是基于对应的分片日志数据生成的,例如分片页面数据是由数据存储节点将对应的分片日志数据转化得到的。值得说明的是,当分片数据中的某一分片日志数据转化为分片页面数据后,该某一分片日志数据可以删除,也可以保留,本申请实施例对此不做限定。由于分片数据是基于日志数据生成的,因此在获取了多个分片数据后,若需要恢复日志数据,基于获取的多个分片数据即可恢复日志数据。
本申请实施例提供一种数据回溯方法,可以应用于分布式关系型数据库。示例的,该分布式关系型数据库可以是基于NTFS或EXT4的文件系统构建,也可以基于其他分布式文件系统或分布式存储系统构建。如greenplum数据库或者TaurusDB等。其中,greenplum DB简称gpdb。请参考图2,图2是本申请实施例提供的数据回溯方法所涉及分布式数据库系统(Distributed Database System,DDBS)的一种应用环境的示意图。该DDBS可以为一个服务器或者由多个服务器组成的服务器集群,该DDBS包括分布式数据库管理系统(DistributedDatabase Management System,DDBMS)和DDB。在分布式数据库系统中,一个应用程序可以通过DDBS对DDB进行透明操作,DDB中的数据分别在不同的局部数据库中存储、由一个或多个DDBMS进行管理、在不同的机器上运行、由不同的操作系统支持,并被不同的通信网络连接在一起。其中,DDBS10包括:管理节点(也称数据库引擎,协调数据节点,coordinator)101和多个数据节点102。示例的,DDBMS可以部署在管理节点101上,DDB可以部署在多个数据节点(data node)102上。
DDBS10可以包括一个或多个管理节点101,管理节点101用于管理相应的数据节点102,并实现应用程序对数据节点102的操作,例如执行数据添加操作、数据删除操作、数据修改操作或数据查询操作等。
本申请实施例中,管理节点101可以为单独的一个节点,或者多个数据节点102中指定数据节点或者选举得到的数据节点,其可以为一个服务器或者由多个服务器组成的服务器集群。在一种实现方式中,每个数据节点可以为一个服务器或者由多个服务器组成的服务器集群;在另一实现方式中,每个数据节点表征DDBS的一个设定的最小处理单元。示例的,每个数据节点可以为一个虚拟机或一个容器,其管理和/或存储数据的一个应用实例或一个数据库执行进程。分布式数据库可以具有一个或多个表空间(tablespace),表空间是关系型数据库的逻辑划分,一个表空间通常属于一个数据库。一个表空间通常包括一个或多个关系表。
进一步的,管理节点101还可以进行事务日志的日志数据以及相应的分片数据的回溯。如图3所示,图3是本申请实施例提供的数据回溯方法所涉及分布式数据库系统的另一种应用环境的示意图。图3以DDBS10中的一个管理节点101为例对分布式数据库系统进行说明,假设该管理节点101包括:管理子节点1011,回溯子节点1012和虚拟路由(VirtualRouter)1013,多个数据节点102包括多个数据存储节点,该多个数据存储节点包括数据存储节点A至数据存储节点G。该多个数据存储节点通常占用分布式数据库系统的内存空间。
其中,管理子节点1011用于接收数据处理请求(如数据的读取、写入、增加、删除或修改请求),并基于接收的数据处理请求,通过虚拟路由1013对目标数据存储节点进行数据的处理。管理子节点1011支持结构化查询语言(Structured Query Language,SQL)功能。该管理子节点1011的功能可以由数据库实例实现,该数据库实例为数据写入的主体。回溯子节点1012是回溯流程的调度者,用于通过虚拟路由1013,发送回溯流程中的各个请求(或指令)到DDBS中的各个数据节点,以将日志数据和分片数据进行回溯,该请求可以包括后续实施例涉及的回溯指令或快照请求。虚拟路由1013用于进行请求的路由,以实现请求的分发,以供接收到请求的数据节点执行与请求对应的动作,如数据的读写。其中,管理子节点1011、回溯子节点1012和虚拟路由1013的功能可以分别由一个独立的进程实现,也可以由同一进程实现,该同一进程为数据库实例中的一个进程。
数据存储节点由于其存储数据的类型不同,可以划分为日志存储节点和分片存储节点。其中,日志存储节点用于存储日志数据,每个日志数据有1个或者多个副本,称为日志数据副本,一份日志数据的内容通过其副本进行存储。同一份日志数据的不同副本分布在不同的日志存储节点上。分片存储节点用于存储分片数据,每个分片数据有1个或者多个副本,一份分片数据的内容通过其副本进行存储。同一份分片数据的不同副本分布在不同的分片存储节点的分片中。图3假设数据存储节点A至C为日志存储节点;数据存储节点D至G为分片存储节点。其中,日志数据有3个副本,分别为日志数据副本1至3,该日志数据副本1至3分别存储在数据存储节点A至C中;与前述日志副本对应的3个分片数据分别为分片数据1至3,该3个分片数据中,每个分片数据有3个副本,分别为副本1至3,每个分片数据的3个副本分别存储在数据存储节点D至F中的3个数据存储节点中。例如,分片数据1的副本1至3分别存储在数据存储节点D、E和G;分片数据2的副本1至3分别存储在数据存储节点D、E和G;分片数据3的副本1至3分别存储在数据存储节点D、F和G。
需要说明的是,本申请实施例所提供的数据回溯方法,事务日志或者页面的写入方式采用只追加(Append only)模式,也称随机读和追加写模式,该模式支持只新增写入数据,不通过覆盖方式修改已写入的数据。
在一种可选方式中,本申请实施例提供的分布式关系型数据库的文件系统本身支持只追加模式。在只追加模式下的文件系统中,只允许追加文件但不可以改写文件,生成的文件称为只追加文件(Append Only File,AOF)。
在另一种可选方式中,本申请实施例提供的分布式关系型数据库的文件系统本身未设置Append only模式。但是无论该分布式关系型数据库是基于NTFS或EXT4的文件系统构建,还是基于其他分布式文件系统或分布式存储系统构建,只要事务日志或者页面的写入方式采用只追加模式,都可以通过本申请实施例提供的数据回溯方法进行数据回溯。
为了便于读者理解,下面对本申请实施例所提供的数据回溯方法的原理进行介绍。在分布式数据库中,基于日志优先原则,在每次产生事务日志后,将该事务日志的日志数据先写入对应的数据存储节点,实现日志数据的落盘(即存储日志数据的指定个数的副本);在当前事务日志(即本次事务日志)的日志数据落盘后,将其划分为多个分片数据,再写入对应的数据存储节点,实现分片数据的落盘(即存储每个分片数据的指定个数的副本)。其中,分片数据包括分片日志数据和分片页面数据中的至少一种。其中,分片页面数据是基于对应的分片日志数据生成的,例如分片页面数据是由对应的分片日志数据转化得到的。传统的分布式关系数据库中,日志数据和分片数据并不对应设置元数据,本申请实施例为日志数据和分片数据配置元数据,以实现数据的回溯。
下面对本申请实施例中,日志数据的元数据和分片数据的元数据分别进行介绍:事务日志对应的数据包括日志数据和该日志数据的元数据。其中,日志数据为事务在执行过程中所涉及的数据,也称事务内容;元数据用于描述该日志数据。通过该元数据可以定位到日志数据,也即是确定日志数据的存储位置。
由于本申请实施例提供的数据回溯方法,事务日志或者页面的写入方式采用只追加模式,而采用该模式下的文件系统中,文件的大小(即文件中能够写入的数据量)设置有上限。如果待写入的数据较大(即数据的大小大于该上限),则需要分成多个文件(即预设的最小存储单元)进行写入。因此在数据落盘后,落盘的数据存储在至少一个文件中。例如,一个日志数据存储在至少一个文件(通常为至少两个文件)中,一个页面数据存储在至少一个文件中。当需要将落盘的数据存储在多个文件中时,该多个文件是需要具有一定顺序的。在数据回溯时,该多个文件是可以依序链接的,也即是该多个文件存在先后关系,通过这种先后关系,可以把多个文件连接起来。因此,本申请实施例中,日志数据的元数据可以包括:至少一个文件中每个文件的数据写入信息,该至少一个文件用于存储该日志数据。也即是,每个文件包括两部分:一部分用于存储日志数据,另一部分用于存储数据写入信息。其中,每个文件中可以设置固定大小的指定位置(也可以称为指定空间),用于存储数据写入信息。示例的,该指定位置可以为该文件的文件头或者文件尾。数据写入信息用于描述该文件中的日志数据的写入情况。例如,该数据写入信息用于记录对应的文件在其所属的至少一个文件中的位置,以及该对应的文件中的写入数据(即写入的日志数据)的结束位置。通过此种元数据可以有效标识各个文件的位置,从而在数据回溯时,实现文件的依次连续获取,保证文件的连续性,从而回溯得到有效的日志数据。
由于在事务日志或者页面的写入方式采用只追加模式的文件系统中,文件只能写入,其数据量是递增的。因此可以通过写入文件的数据量来标识文件中的写入数据的结束位置。可选地,对于任一文件,可以在每次写入数据后,将当前写入的数据总量(即该文件当前时刻之前的所有写入时刻所写入的数据量的总和)来标识该文件中的写入数据的结束位置。例如,假设对于文件F1,其记录了3个时刻分别写入的100字节的数据,相应的,管理节点在每次写入数据时,确定对应时刻写入的数据量,并记录该数据量。假设管理节点在3个时刻分别在指定位置写入3个指示信息,该3个指示信息分别指示数据量为100字节、200字节和300字节。如该指示信息为数据量的数值,如100、200和300。如此,在每次进行写入数据的结束位置的查询时,直接查询最近写入的数据量的指示信息即可快速确定写入数据的结束位置。例如,查询得到最近写入的指示信息为300,则确定写入数据的结束位置为写入300字节数据的位置。
目前的事务日志中,每个事务日志的日志数据包括一个或多个事务记录,每条事务记录均携带一个LSN。如图4所示,图4是本申请实施例提供的一种事务记录的结构示意图。该事务记录包括日志类型位、日志长度位、LSN位、数据位和校验位。其中,日志类型位用于记录该事务日志对页面的修改方式(也称修改类型),例如日志类型位的内容用于指示修改了2个byte、创建一个空页面或者修改文件名等等,日志长度位用于记录该事务记录的长度,例如长度为100字节;LSN位用于记录该事务记录的LSN;数据位用于记录该事务记录中的实际数据(或称实际内容);校验位用于记录校验值,该校验值用于校验数据位所携带的数据的准确性。其中,日志类型位、日志长度位、LSN位和校验位的长度固定。例如,日志类型位的长度为4字节,日志长度位的长度是8字节,LSN位的长度是8字节,校验位的长度是8字节。
如前所述,LSN表征了事务写入到事务日志的字节总量。则显然,LSN是一种针对事务日志的典型的数据量的指示信息。由于一个文件的日志数据是不断写入的。随着事务记录写入条数的增多,LSN也逐渐增大。因此,文件中的写入数据所携带的最大的LSN(即最近写入的事务记录的LSN)能够反映该写入数据的结束位置。在本申请实施例中,对于该日志数据对应的至少一个文件中任一文件,该任一文件的数据写入信息可以包括:该任一文件中的写入数据中携带的最大LSN,以此来标识写入数据的结束位置。
例如,对于文件F2,其记录了3个时刻写入的数据。相应的,在每次写入数据时,通过读取对应时刻写入的数据中事务记录中的LSN位(该事务记录的结构可以参考前述图4),确定本次写入数据的最大LSN,并将本次写入数据的最大LSN记录在元数据中,以标识本次写入数据的结束位置。假设3次写入数据的最大LSN分别为0xFFFFFFFFF000、0xFFFFFFFFF00F和0xFFFFFFFFF0FF。则管理节点最终记录在该文件F2中的LSN包括:0xFFFFFFFFF000、0xFFFFFFFFF00F和0xFFFFFFFFF0FF。其中,最大的LSN:0xFFFFFFFFF0FF标识最近一次写入数据的结束位置。
可选地,该日志数据对应的任一文件的数据写入信息还包括:该任一文件的文件位置标识。文件位置标识用于标识该任一文件在其所属的至少一个文件中的位置。其中,文件位置标识可以由一个或多个字符组成。例如,该字符可以为二进制字符,例如0或1,也可以为十进制字符。
在一种可选方式中,由于一些文件的标识本身具有标识其位置的功能,因此该文件位置标识可以为文件的标识。例如,日志数据存储在3个文件中,该三个文件的标识按照其排布顺序分配,分别为00、01和10,则文件00中的文件位置标识为00。
在另一种可选方式中,文件位置标识可以包括:该任一文件的前一个文件的标识和/或后一个文件的标识。值得说明的是,当该任一文件为前述至少一个文件的首个文件,则其前一个文件为空;当该任一文件为前述至少一个文件的末尾文件,则其后一个文件为空;当日志数据只存储在一个文件中,也即是前述至少一个文件实质仅为一个文件,则该文件中的数据写入信息包括的该文件的前一个文件的标识和后一个文件的标识均为空。仍然以日志数据存储在前述3个文件中为例,文件00中的文件位置标识为01(即仅包括后一个文件的标识);文件01中的文件位置标识为00+10(即包括前一个文件的标识和后一个文件的标识);文件10中的文件位置标识为01(即仅包括前一个文件的标识)。
在本申请实施例中,每个分片对应的数据包括分片数据和该分片数据的元数据。其中,该元数据用于描述该分片数据。通过该元数据可以定位到分片数据,也即是确定分片数据的存储位置。
由于分片日志数据是由日志数据划分得到的,因此每个分片日志数据实际上是日志数据的一部分,具有与日志数据相同的属性。参考前述日志数据,在分片日志数据落盘后,一个(或称一份)分片日志数据存储在至少一个文件中。并且,数据存储节点可以将分片中的部分分片日志数据转化为分片页面数据,该分片页面数据存储在至少一个文件中。值得说明的是,属于同一分片的分片日志数据和分片页面数据所存储的文件可以相同也可以不同。例如,在同一分片中,分片日志数据存储在文件1至3,分片页面数据存储在文件4至6中;又例如,分片日志数据存储在文件1至6中,分片页面数据也存储在文件1至6中,其中,每个文件存储有部分分片日志数据和部分分片页面数据。分片日志数据和分片页面数据在文件中的存储方式是根据数据库系统的存储规则设定的,本申请实施例对此不做限定。
本申请实施例中,分片数据的元数据可以包括:至少一个文件中每个文件的数据写入信息,该至少一个文件用于存储日志数据。也即是,存储分片数据的每个文件包括两部分:一部分用于存储分片数据,另一部分用于存储数据写入信息。其中,每个文件中可以设置固定大小的指定位置,用于存储数据写入信息。示例的,该指定位置可以为该文件的文件头或者文件尾。数据写入信息用于描述该文件中的分片数据的写入情况,例如,该数据写入信息用于记录对应的文件在其所属的至少一个文件中的位置,以及该对应的文件中的写入数据(即写入的分片数据)的结束位置。通过此种元数据可以有效标识各个文件的位置,从而在数据回溯时,实现文件的依次连续获取,保证文件的连续性,从而恢复得到有效的分片数据。
与前述存储日志数据的文件同理的,在本申请实施例中,对于分片数据对应的至少一个文件中任一文件,该任一文件的数据写入信息包括:该任一文件中的写入数据中携带的最大LSN,以此来标识写入数据的结束位置。
可选地,该分片数据对应的任一文件的数据写入信息还包括:该任一文件的文件位置标识。该文件位置标识用于标识该任一文件在其所属的至少一个文件中的位置。该文件位置标识的结构可以参考前述日志数据对应的文件位置标识的结构。存储分片数据的文件的结构和前述存储日志数据的文件的结构可以相同,或相近,因此本申请实施例中对分片数据的文件的结构不再赘述。
本申请实施例提供一种数据回溯方法,应用于如图2或图3所示的应用环境,该数据回溯方法的全部或部分可以由前述数据库系统执行,例如由管理节点执行,进一步的,由如管理节点中的回溯子节点执。图5是本申请实施例提供的一种数据回溯方法的流程示意图,如图5所示,假设该数据回溯方法由管理节点执行,后续实施例以一个数据库的日志数据与其分片数据的数据回溯方法为例进行说明,该方法包括:
S501、管理节点存储日志数据。
当管理节点检测到应用程序发送的数据处理请求后,通过事务来控制相应的数据节点执行数据处理请求所请求执行的操作。例如,管理节点可以基于数据处理请求,发起多个分布式事务,在执行每个分布式事务时生成一个或多个分布式计划,并指示相应的数据节点执行生成的分布式计划,从而实现数据处理请求所请求的操作。
在前述事务执行的过程中,产生相应的事务数据。管理节点将事务数据写入事务日志中,以实现日志数据的存储,也即是日志数据的落盘。
S502、管理节点存储与日志数据对应的分片数据。
可选地,数据库系统中存储有分片关系数据,该分片关系数据用于记录日志数据的子数据与分片的对应关系,子数据为预先划分的数据分配单元,是数据库支持的最小存储单元,不允许修改,一个(或称一份)子数据可以包括一个或多个事务记录。该分片关系数据可以以表的形成存储,因此也称为分片列表。该分片列表可以采用全量更新的方式更新该日志数据的子数据与分片的对应关系,也即是,在每次对应关系需要更新时,采用新的分片列表替换原有的分片列表;该分片列表也可以采用增量更新的方式更新日志数据的子数据与分片的对应关系,也即是,在首次保存该分片列表后,若需要更新对应关系,只更新与原有分片列表记录的数据不同的数据,也即是更新增量数据。
可选地,该分片关系数据可以包括第一对应关系数据和第二对应关系数据,第一对应关系数据用于记录日志的子数据与数据库对象的对应关系,第二对应关系数据用于记录数据库对象与分片的对应关系,该数据库对象指的是关系型数据库中数据处理过程所针对的对象。其可以为表空间(如关系表)、页面、索引或者其他与数据库分类(也称归属)相关的对象。
示例的,该第一对应关系数据可以记录子数据的标识信息与页面的标识信息的对应关系,第二对应关系数据可以记录页面的标识信息和分片的标识信息的对应关系。子数据的标识信息与页面的标识信息的对应关系通常为多对一的对应关系,该页面的标识信息和分片的标识信息的对应关系通常为一对一,或者多对一的关系。例如一个分片可以对应100个页面。其中,页面的标识信息用于唯一标识一个页面,该标识信息可以由一个或多个字符组成。例如,该字符可以为二进制字符,例如0或1,也可以为十进制字符。值得说明的是,一个关系型数据库中可能存储有一个或多个关系表,每个关系表都包括多个页面。为了实现对页面的唯一标识,当关系型数据库中仅存储一个关系表时,该页面的标识信息可以仅包括页面的身份标识码(identity document,ID,简称标识);当关系型数据库中存储多个关系表时,该页面的标识信息可以包括关系表的ID和页面的ID。
分片的标识信息用于唯一标识一个分片,该标识信息可以由一个或多个字符组成。例如,该字符可以为二进制字符,如0或1,也可以为十进制字符。值得说明的是,当分布式关系型数据库中包括多个数据存储节点,每个数据存储节点上包括多个分片时。为了实现对分片的唯一标识,在一种可选方式中,可以为所有分片分配互不相同的分片ID,作为对应分片的标识信息;在另一种可选方式中,不同数据存储节点上的分片ID有相同的情况,则分片的标识信息可以包括数据存储节点的ID和分片ID。
每个数据库对象在被操作时会产生日志数据。管理节点可以基于前述分片关系数据将日志数据进行分片处理。例如,对于获取的日志数据的每个子数据,管理节点可以查询第一对应关系数据,得到该子数据对应的数据库对象;然后,采用该子数据对应的数据库对象查询该第二对应关系数据,得到对应的分片,(即确定每个子数据对应的分片,该过程可以视为将每个子数据映射到对应的分片中)。最终,管理节点将对应于同一个分片的子数据确定为一个分片日志数据,然后将每个分片日志数据写入到对应的分片中,即完成分片日志数据的存储。一个或多个分片日志数据存储后,可以转化为分片页面数据,最终一个分片内存储的分片数据可以包括分片日志数据和/或分片页面数据。
值得说明的是,前述分片关系数据也可以仅包括前述第二对应关系数据,每个子数据在生成时携带其对应的数据库对象(也称所属的数据库对象)的标识信息。对于获取的日志数据的每个子数据,管理节点可以采用该子数据所携带的数据库对象的标识信息查询第二对应关系数据,得到对应的分片。无需查询两个对应关系。示例的,假设数据库对象为页面,该第二对应关系数据可以如表1所示。页面ID为00至04的页面分别与分片ID为0至3的分片一一对应。
表1
假设通过查询第一对应关系数据或者提取子数据中携带的页面ID确定当前获取的日志数据包括:属于页面00的子数据A,属于页面01的子数据B,则查询上述表1,可以将子数据A作为分片日志数据写入分片0;将子数据B作为分片日志数据写入分片1。从而实现了日志数据所包括的分片日志数据的存储。
可选地,数据库系统中存储与多个分片一一对应的多个页面索引数据,该页面索引数据用于记录对应的分片中分片日志数据与分片页面数据的对应关系。基于每个分片的页面索引数据,可以确定该分片中哪些分片日志数据转化为分片页面数据。
在本申请实施例中,数据库支持数据回溯功能,该数据回溯功能可以是预先设置在数据库中的,也可以是接收到用户触发的数据库功能开启指令后开启的。数据回溯功能支持对日志数据的元数据以及分片数据的元数据的采集。在数据回溯功能开启之后,管理节点才能基于获取的元数据的记录进行数据回溯。通常情况下,该数据回溯功能在数据库初始化、迁移或者其他指定时刻开启。
S503、管理节点获取n个第一采集时刻对应的日志数据的元数据,n为正整数。
可选地,管理节点对日志数据进行n次元数据采集处理得到的n个第一采集时刻对应的元数据。例如,管理节点可以在数据库系统部署之后,进行一次或多次日志数据的元数据的采集,以实现日志数据的元数据的备份,如此在后续过程中可以实现数据的回溯。
该第一采集时刻可以为日志数据的元数据的采集开始时刻也可以为日志数据的元数据的采集结束时刻,还可以为第一设定时刻。由于日志数据的元数据的数据量较小,因此,采集开始时刻约等于采集结束时刻,也即是两个时刻的时间差可以忽略不计。
每个第一采集时刻对应一个日志数据的元数据,其包括:用于存储该日志数据的至少一个文件中每个文件的数据写入信息,例如,第一采集时刻9:00对应的元数据包括用于存储日志数据的文件100至120的数据写入信息;第一采集时刻9:30对应的元数据包括用于存储日志数据的文件110至130的数据写入信息。由此可知,在9:00至9:30这一时段内,数据库系统中删除了文件100至文件109,增加了文件121至130。
在一种可选方式中,管理节点可以周期性进行日志数据的元数据采集。采集周期可以是预先设置的,其间隔越小,可选择的回溯的第一采集时刻越多。示例的,相邻采集周期的时间间隔相同。
在另一种可选方式中,管理节点可以在接收到数据采集指令后,采集数据库系统中日志数据的元数据。
可选地,管理节点可以采用快照获取日志数据的元数据,也即是前述元数据采集处理为快照处理。如此能有效加快获取元数据的速度,提高采集效率。
S504、管理节点获取m个第二采集时刻对应的分片数据的元数据,m为正整数。
可选地,管理节点对分片数据进行m次元数据采集处理得到的m个第二采集时刻对应的元数据。
在本申请实施例中,假设S502中的分片数据是由S501的日志数据处理得到。同理的,管理节点可以在数据库系统部署之后,对于每个分片数据(即每个分片中的数据),进行一次或多次分片数据的元数据的采集,以实现分片数据的元数据的备份,如此在后续过程中可以实现数据的回溯。
该第二采集时刻可以为多个分片数据的元数据的采集开始时刻也可以为多个分片数据的元数据的采集结束时刻,还可以为第二设定时刻。当日志数据对应的分片数据的个数较多时,该采集开始时刻和采集结束时刻的时间差较大,通常将采集结束时刻作为第二采集时刻。
每个第二采集时刻对应数据库系统的多个分片数据的元数据,通常为第二采集时刻的该数据库系统的所有分片数据的元数据,如此才能保证在若需要回溯到该第二采集时刻,回溯得到的数据是该第二采集时刻对应的数据库系统中的所有分片数据。
由于分片数据有多个,因此,每个第二采集时刻对应一组元数据,也可以视为一个元数据序列。对于每个分片数据的元数据,其包括:用于存储该分片数据的至少一个文件中每个文件的数据写入信息。例如,假设第一分片数据为数据库系统中日志数据的任一分片数据,对于第一分片数据,第二采集时刻9:00对应的元数据包括用于存储第一分片数据的文件110至115的数据写入信息;第二采集时刻9:30对应的元数据包括用于存储第一分片数据的文件111至120的数据写入信息,由此可知,在9:00至9:30这一时段内,数据库系统在与第一分片数据所在的第一分片中,删除了文件100,增加了文件116至120。数据库系统中日志数据的其他分片数据的元数据的采集原理可以参考该第一分片数据的元数据的采集原理,本申请实施例对此不做赘述。
在一种可选方式中,管理节点可以周期性进行分片数据的元数据采集。采集周期可以是预先设置的,其间隔越小,可选择的回溯的第二采集时刻越多。示例的,相邻采集周期的时间间隔相同。
在另一种可选方式中,管理节点可以在接收到数据采集指令后,采集数据库系统中分片数据的元数据。
本申请实施例中,在进行多个分片数据的一次采集时,管理节点可以依次(也称串行)获取多个分片数据中每个分片数据的元数据,也可以并行获取多个分片数据中每个分片数据的元数据。可选地,管理节点可以采用快照获取分片数据的元数据,也即是前述元数据采集处理为快照处理。如此能有效加快获取元数据的速度,提高采集效率。
需要说明的是,在分布式数据库中,由于数据的回溯需要保证回溯得到的日志数据和分片数据的一致性,因此,在元数据采集阶段,日志数据和分片数据也在时间上需要具有一定对应关系。本申请实施例以以下两种可选实现方式为例进行说明:
在第一种可选实现方式中,n个第一采集时刻和m个第二采集时刻具有一对多的对应关系,也即是,每个第一采集时刻对应至少两个第二采集时刻。
示例的,假设第一采集时刻与第二采集时刻的对应关系是1对2的关系。若管理节点周期性进行日志数据的元数据采集,以及分片数据的元数据的采集。则在一次日志数据的元数据的采集所对应的采集周期内,进行两次分片数据的元数据的采集。可选地,日志数据的元数据的采集周期的时长是分片数据的元数据的采集周期的时长的2倍。若管理节点在接收到数据采集指令后进行日志数据的元数据采集,以及分片数据的元数据的采集。则在接收到数据采集指令后进行一次日志数据的元数据的采集,分别进行两次分片数据的元数据的采集,两次分片数据的元数据的第二采集时刻的间隔时长可以是预先设置的时长。
在第二种可选实现方式中,m等于n,n个第一采集时刻与m个第二采集时刻一一对应,对应的第一采集时刻和第二采集时刻的时间差小于差值阈值。示例的,第一采集时刻x1与第二采集时刻x2对应,第一采集时刻x1是第二采集时刻x2之后的时刻,两者时间差小于差值阈值(若日志数据和分片数据的元数据均通过周期性采集的方式采集,该差值阈值小于采集周期),或者第一采集时刻x1等于第二采集时刻x2。通过将第一采集时刻和第二采集时刻设置的相近或相同,可以简化元数据采集的流程,便于后续进行数据回溯。
S505、管理节点获取日志数据的元数据中目标历史时刻对应的第一元数据。
为了提高数据库的容灾性,需要在一些场景下进行数据的回溯。例如,在某一时段数据库中出现错误数据的写入,需要将数据库的数据回溯到该时段之前。
管理节点可以在接收到指示目标历史时刻的回溯指令后执行回溯操作。在一种可选方式中,管理节点可以通过用户界面呈现n个第一采集时刻,由用户在该n个第一采集时刻中选择一个第一采集时刻作为目标历史时刻,并在检测到选择操作时生成回溯指令。在另一种可选方式中,管理节点可以通过用户界面呈现时间轴,由用户在该时间轴中指示目标时刻(例如在时间轴上拖动或点击来指示目标时刻),管理节点将n个采集时刻中距离该目标时刻最近的第一采集时刻作为目标历史时刻,并在检测到该选择操作时生成回溯指令。
在本申请实施例中,管理节点在接收到回溯指令后,可以先将数据库中所有写入数据进行备份,防止极端情况下出现数据回溯失败的情况。若后续过程中出现数据回溯失败的情况,基于备份的写入数据,可以将数据库回滚到正确状态。
需要说明的是,在接收到回溯指令后,数据库系统会进入回溯状态,进入回溯状态的数据库系统会执行预处理操作,以保证后续数据回溯动作的有效执行。示例的,该预处理操作包括如下的一种或多种:暂停数据库使用、关闭用户连接(该用户连接指的是数据库与应用程序的连接)、丢弃未提交的写入数据或者清理内存中的数据等。
参考前述S503,管理节点获取了n个第一采集时刻对应的元数据,在S505中,管理节点在确定了目标历史时刻后,可以在该n个第一采集时刻对应的元数据中,获取该目标历史时刻对应的第一元数据。参考S503中的例子,若目标历史时刻为9:00,则目标历史时刻对应的第一元数据为文件100至120的元数据。
S506、管理节点获取多个分片数据中每个分片数据的元数据中目标历史时刻对应的第二元数据,该多个分片数据是对日志数据进行分片处理得到的数据。
参考S504和S505,管理节点已获取了m个第二采集时刻对应的元数据,且管理节点已确定了目标历史时刻,则对于每个分片数据,管理节点可以在该m个第二采集时刻对应的元数据中,获取该目标历史时刻对应的第二元数据。继续参考前述S504,由于在元数据采集阶段,日志数据和分片数据也在时间上具有一定对应关系,因此,管理节点可以基于该对应关系,获取多个分片数据中每个分片数据的元数据中目标历史时刻对应的第二元数据。本申请实施例以以下两种可选实现方式为例进行说明:
与前述S504的第一种可选实现方式对应的,在第一种可选实现方式中,由于每个第一采集时刻对应至少两个第二采集时刻,管理节点可以在目标历史时刻对应的至少两个第二采集时刻中选择一个目标采集时刻,将该目标采集时刻对应的元数据获取为目标历史时刻对应的第二元数据。示例的,该目标采集时刻为至少两个第二采集时刻中随机选择的一个采集时刻,或者距离目标历史时刻最远的采集时刻。
与前述S504的第二种可选实现方式对应的,在第二种可选实现方式中,由于每个第一采集时刻对应一个第二采集时刻,则管理节点可以将目标历史时刻对应的一个第二采集时刻对应的元数据获取为目标历史时刻对应的第二元数据。
其中,当目标历史时刻是该n个第一采集时刻中的一个第一采集时刻x时,目标历史时刻对应的第二采集时刻即为该第一采集时刻x所对应的第二采集时刻;当目标历史时刻是n个采集时刻中距离该用户指示的目标时刻最近的第一采集时刻y时,目标历史时刻对应的第二采集时刻即为该第一采集时刻y所对应的第二采集时刻。
参考S504中的例子,若目标历史时刻为9:00,则目标历史时刻对应的第二元数据为文件110至115的元数据。
S507、管理节点按照第一元数据处理日志数据,得到目标历史时刻的日志数据。
如S503所述,每次采集处理所采集的是反映数据库在采集时刻的日志数据的状态的一个元数据,则管理节点按照第一元数据指示的数据位置,回退日志数据,即可得到目标历史时刻的日志数据。参考S506中的例子,目标历史时刻对应的第一元数据包括用于存储日志数据的文件100至120的数据写入信息,基于该第一元数据可以恢复文件100至120中的数据,恢复得到的日志数据即为目标历史时刻的日志数据。
在一种可选实现方式中,管理节点在数据库本地存储空间或者云存储空间存储有该数据库系统的备份数据,该备份数据包括数据库系统中的不同时期的日志数据。管理节点基于第一元数据直接在备份数据中提取相应位置的数据,即可得到该目标历史时刻的日志数据。
在另一种可选实现方式中,若管理节点在接收到回溯指令时所存储的当前日志数据包括前述第一元数据所指示的数据位置中的数据。则管理节点可以删除该当前日志数据中除第一元数据所指示的数据位置之外的数据,以得到目标历史时刻的日志数据。例如,管理节点接收到回溯指令时存储日志数据的文件为文件100至150,第一元数据指示的文件为文件120至140,则删除文件100至150中的文件100至119,以及141至150,即可得到目标历史时刻的日志数据。
S508、管理节点按照第二元数据处理多个分片数据,得到目标历史时刻的多个分片数据。
示例的,管理节点可以按照第二元数据指示的数据位置,回退多个分片数据,即可得到目标历史时刻的多个分片数据。如S504所述,对于每个分片数据,每次采集处理所采集的是反映数据库在该采集时刻的一个或多个分片数据的状态的一个元数据,则一个第二采集时刻对应的第二元数据为与多个分片数据一一对应的多个元数据的集合,管理节点按照该分片数据所对应的第二元数据指示的数据位置,回退该分片数据,即可得到目标历史时刻的该分片数据。参考S506中的例子,目标历史时刻的第一分片数据对应的第二元数据包括用于存储该第一分片数据的文件110至115的数据写入信息,基于该第二元数据可以恢复文件100至120中的数据,恢复得到的数据即为目标历史时刻的第一分片数据。
参考前述S507的两种可选实现方式中,管理节点在数据库本地存储空间或者云存储空间存储有该数据库系统的备份数据,该备份数据包括数据库系统中的不同时期的多个分片数据。管理节点基于每个第二元数据直接在备份数据中提取相应位置的数据,即可得到目标历史时刻的一个分片数据。或者,若管理节点在接收到回溯指令时所存储的当前分片数据中的某一分片数据,若该某一分片数据包括对应的第二元数据所指示的数据位置中的数据。则管理节点可以删除该某一分片数据中除第二元数据所指示的数据位置之外的数据,以得到目标历史时刻的一个分片数据。
综上所述,本申请实施例中,基于日志数据的目标历史时刻对应的第一元数据回溯日志数据,基于分片数据的目标历史时刻对应的第二元数据回溯分片数据,无需进行逻辑记录的读取和更新操作的逆操作,数据回溯效率较高,有效降低数据回溯时延。
前述S503至S504,由于将日志数据的元数据和分片数据的元数据的采集分别执行,例如采用两个进程执行,因此需要记录日志数据和分片数据在时间上的对应关系,以便于后续进行数据回溯时,实现关联的日志数据和分片数据(即均与目标历史时刻对应的日志数据和分片数据)的有效回溯。
在实际实现时,日志数据的元数据和分片数据的元数据是关联采集的,如此采集得到的元数据可以进行关联存储,无需记录前述时间上的对应关系,相应的,简化了管理节点获取目标历史时刻对应的第一元数据和第二元数据的过程,从而减少数据回溯的复杂度。图6是本申请实施例提供的另一种数据回溯方法的流程示意图,如图6所示,假设该数据回溯方法由管理节点执行,后续实施例以一个数据库的日志数据与其分片数据的数据回溯方法为例进行说明,该方法包括:
S601、管理节点存储日志数据。
S601的过程可以参考前述S501。
S602、管理节点存储与日志数据对应的分片数据。
S602的过程可以参考前述S502。
S603、管理节点获取k个采集时刻对应的元数据,该k个采集时刻中每个采集时刻对应的元数据包括日志数据的元数据和多个分片数据的元数据。k为正整数。
每个采集时刻对应的元数据实际为一组元数据集合。示例的,管理节点可以周期性地进行数据库的元数据采集或者在接收到数据采集指令后进行数据库的元数据的采集,以得到k个采集时刻对应的元数据。该采集时刻可以为采集开始时刻,也可以为采集结束时刻,还可以为采集开始时刻和采集结束时刻之间的时刻(即元数据的采集时段内的时刻),其用于标识元数据的采集时段中数据库中各个元数据的状态。需要说明的是,若采集时段较长,由于采集开始时刻到采集结束时刻可能出现数据的变化,因此采用采集结束时刻作为前述采集时刻,可以实现元数据的采集时段中数据库中各个元数据的状态的准确标识。
需要说明的是,当前述采集时刻为一组元数据集合的采集结束时刻时。由于在采集一组元数据集合时,若分片数据的元数据较多,则采集第二元数据所消耗的时长较长,若先采集第一元数据,再采集第二元数据,容易在采集第二元数据的时段中出现日志数据产生增量数据的情况,出现第一元数据指示的数据位置与采集结束时刻的日志数据的实际数据位置不一致的情况。因此,在每一组元数据集合的采集过程中,通常先采集分片数据的元数据,再采集日志数据的元数据,以减少增量日志数据所带来的第一元数据指示的数据位置与采集结束时刻的日志数据的实际数据位置的不一致。
S604、管理节点获取目标历史时刻对应的元数据,该目标历史时刻对应的元数据包括第一元数据和多个第二元数据。
管理节点可以在接收到指示目标历史时刻的回溯指令后执行回溯操作。在一种可选方式中,管理节点可以通过用户界面呈现k个采集时刻,由用户在该k个采集时刻中选择一个采集时刻作为目标历史时刻,并在检测到该选择操作时生成回溯指令。在另一种可选方式中,管理节点可以通过用户界面呈现时间轴,由用户在该时间轴中指示目标时刻(例如在时间轴上拖动或点击来指示目标时刻),管理节点将k个采集时刻中距离该目标时刻最近的采集时刻作为目标历史时刻,并在检测到该选择操作时生成回溯指令。
参考S603,管理节点已获取了k个采集时刻对应的元数据,且管理节点已确定了目标历史时刻,则管理节点可以在k个采集时刻对应的元数据中筛选出目标历史时刻对应的元数据,从而确定目标历史时刻对应的第一元数据和多个第二元数据。
S605、管理节点按照第一元数据处理日志数据,得到目标历史时刻的日志数据。
S605的过程可以参考前述S507。
S606、管理节点按照第二元数据处理多个分片数据,得到目标历史时刻的多个分片数据。
S606的过程可以参考前述S508。
综上所述,本申请实施例中,基于日志数据的目标历史时刻对应的第一元数据回溯日志数据,基于分片数据的目标历史时刻对应的第二元数据回溯分片数据,无需进行逻辑记录的读取和更新操作的逆操作,数据回溯效率较高,有效降低数据回溯时延。
如图1所示,每个分片数据是基于日志数据确定的,在分布式关系型数据库中,同一时刻需要保证多个分片数据与日志数据的一致性(也称业务一致性或逻辑一致性)。但是由于前述采集时刻的不一致,或者其他原因,可能导致目标历史时刻的日志数据与目标历史时刻的多个分片数据的不一致。为了便于读者理解,下面结合图7对可能出现目标历史时刻的日志数据与目标历史时刻的多个分片数据不一致的情况进行说明。图7是本申请实施例提供的一种数据回溯方法的时间轴示意图。图7假设日志数据的元数据和分片数据的元数据是关联采集的,其记录了一次采集时刻对应的元数据获取过程,则管理节点在接收到回溯指令时或达到采集周期时,开始进行日志数据的元数据和分片数据的元数据的采集。图7中假设通过快照进行元数据的采集,采集时刻为多个分片数据的元数据的采集结束时刻。则图7中采用快照获取日志数据的元数据得到的快照为第一快照,采用快照获取各个分片数据的元数据的快照称为第二快照,多个第二快照与多个分片数据的元数据一一对应,则一次获取数据库系统中的元数据的采集时段包括日志数据的元数据采集时段L1和分片数据的元数据采集时段L2。图7中,采集时段的开始时刻为第二快照的获取时刻,采集时段的结束时刻为第一快照的获取时刻。前述第一采集时刻和第二采集时刻均可以设置为该采集时段的结束时刻。如果一个日志数据对应的分片数据较多,实际的采集结束时刻与采集开始时刻间隔的时间较长,在该元数据采集时段L2中,数据库系统可能会产生增量日志数据(即新写入的日志数据),第一快照和第二快照对该增量日志数据的元数据的记录不一定一致,如此就出现了日志数据和分片数据不一致的情况。
则在前述S508或者S606之后,管理节点还可以基于目标历史时刻的日志数据,更新目标历史时刻的多个分片数据。如此可以使得更新后的多个分片数据与日志数据一致。
在一种可选实现方式中,管理节点可以检测目标历史时刻的日志数据的数据结束位置与多个分片数据的数据结束位置是否一致,当检测目标历史时刻的日志数据的数据结束位置与多个分片数据的数据结束位置是不一致时,基于目标历史时刻的日志数据,更新目标历史时刻的多个分片数据,使得更新后的多个分片数据与日志数据一致;当检测目标历史时刻的日志数据的数据结束位置与多个分片数据的数据结束位置是一致时,不进行动作。
在另一种可选实现方式中,由于目标历史时刻的日志数据与目标历史时刻的分片数据不一致的概率较高,管理节点可以直接进行一致性处理。即基于目标历史时刻的日志数据,更新目标历史时刻的多个分片数据。如此使得更新后的多个分片数据与日志数据一致。
示例的,前述一致性处理过程包括:基于分片关系数据和目标历史时刻的日志数据,更新目标历史时刻的多个分片数据。更新后的多个分片数据与日志数据实现一致。参考前述S502,分片关系数据用于记录日志数据中的子数据与分片的对应关系。
管理节点获取分片关系数据的方式可以有多种。在一种可选方式中,可以直接存储每个采集时刻对应的分片关系数据,在数据回溯时提取该分片关系数据;在另一种可选方式中,可以存储分片关系规则,以在数据回溯时基于该分片关系规则获取分片关系数据;在再一种可选方式中,分片关系数据具有元数据,也即是分片关系对应的数据包括:分片关系数据和第三元数据,管理节点可以存储该第三元数据,以便在数据回溯时基于该元数据获取分片关系数据。其中,该第三元数据用于描述该分片关系数据。则在进行数据回溯时,该分片关系数据由分片关系数据的第三元数据恢复得到。通过第三元数据来获取分片关系数据,可以实现分片关系数据的快速获取。如此可以在无需进行数据回溯的时候仅存储第三元数据,在需要获取分片关系数据时基于第三元数据进行分片关系数据的恢复,减少对存储空间的占用。
示例的,管理节点在数据库本地存储空间或者云存储空间存储有该数据库系统的备份数据,该备份数据包括数据库系统中的不同时期的分片关系数据。管理节点基于第三元数据直接在备份数据中提取相应位置的数据,即可得到该分片关系数据。
在一种可选方式中,与前述S504同理,管理节点获取h个第三采集时刻对应的分片关系数据的元数据,该过程可以在前述S505前执行,h为正整数。可选地,管理节点对分片关系数据进行h次元数据采集处理得到的h个第三采集时刻对应的元数据。该分片关系数据的元数据可以周期性采集,也可以在收到数据采集指令后采集。该n个第一采集时刻和h个第三采集时刻具有一对多的对应关系,或者一一对应。该分片关系数据的第三元数据是目标历史时刻对应的元数据,是管理节点在h个第三采集时刻对应的元数据中筛选的目标历史时刻对应的元数据。该分片关系数据的第三元数据的获取过程可以参考前述第二元数据的获取过程,本申请实施例不做赘述。
在二种可选方式中,分片关系数据的元数据与日志数据的元数据以及分片数据的元数据关联采集。则在前述S603中,该k个采集时刻中每个采集时刻对应的元数据包括日志数据的元数据、多个分片数据的元数据和分片数据的元数据。图8是本申请实施例提供的另一种数据回溯方法的时间轴示意图,如图8所示,假设采用快照技术获取分片关系数据的元数据的快照称为第三快照,一次采集时刻对应的元数据的采集时段包括日志数据的元数据采集时段L1、分片数据的元数据采集时段L2和分片关系数据的采集时段L3。采集时段的开始时刻为第二快照的获取时刻,采集时段的结束时刻为第三快照的获取时刻。
在一种可选示例中,管理节点基于分片关系数据和目标历史时刻的日志数据,更新目标历史时刻的多个分片数据,使得更新后的多个分片数据与日志数据一致的过程,包括:
A1、基于日志数据的第一元数据指示的数据结束位置与多个分片数据的第二元数据指示的数据结束位置,确定增量日志数据。
如图7所示,在一个采集时段中,由于数据的写入可能产生增量日志数据,该增量日志数据是日志数据相对于多个分片数据多的数据。管理节点可以基于该采集时段所获取的日志数据的元数据所指示的数据结束位置与多个分片数据的第二元数据指示的数据结束位置求取差值数据,该差值数据即为增量日志数据。
在一种可选实现方式中,日志数据的第一元数据指示的数据结束位置由连续落盘LSN表示,该连续落盘LSN为对应时刻已连续落盘的日志数据对应的LSN中最大的LSN;多个分片数据的第二元数据指示的数据结束位置由全局分片落盘LSN表示,该全局分片落盘LSN为对应时刻已全局连续落盘的分片数据对应的LSN中最大的LSN。
其中,连续落盘LSN为对应时刻(例如,目标历史时刻)已连续落盘的日志数据对应的LSN中最大的LSN。其中,已连续落盘指的是已落盘且连续落盘。在本申请实施例中,可以先获取日志数据的已落盘的数据,再将获取的已落盘的数据中连续落盘的数据,作为已连续落盘的日志数据。
其中,一个日志数据已落盘指的是该日志数据的各个副本均已存储。对于数据库的同一日志数据,由于写入的存储介质的不同,写入速度也相应不同,因此,其连续落盘LSN会不断变化。
图9本申请实施例提供的一种示意性的目标历史时刻的日志数据的存储状态示意图。图9中,日志数据的副本1至3需要分别存储在数据存储节点A至C,日志数据中的事务记录的LSN为LSN700至LSN1000。假设,目标历史时刻的日志数据的副本1已写入数据存储节点A的数据的LSN为LSN700至LSN750,日志数据的副本2已写入数据存储节点B的数据的LSN为LSN700至LSN720,日志数据的副本3已写入数据存储节点C的数据的LSN为LSN700至LSN800。则数据存储节点A至C中与已连续落盘的日志数据对应的LSN为LSN700至LSN720。其中,最大的LSN为LSN720。则日志数据的连续落盘LSN为LSN720。
由于分片日志数据是基于日志数据得到的,其数据结构与日志数据的数据结构相同,携带有LSN;而分片页面日志数据是由对应的分片日志数据转化得到的,也携带对应的分片日志数据的LSN。因此,事务日志的日志数据和分片数据中均携带LSN。全局分片落盘LSN是基于分片数据中的LSN确定的。
其中,该全局分片落盘LSN为对应时刻(例如目标历史时刻)已全局连续落盘的分片数据对应的LSN中最大的LSN。其中,已全局连续落盘指的是已落盘且全局连续落盘。在本申请实施例中,可以先获取每个分片数据的已落盘的数据,再在获取的已落盘的数据中获取连续落盘的数据,作为已全局连续落盘的分片数据。值得说明的是,由于分片页面数据是在分片日志数据落盘后转化得到的,也即是,携带的LSN与对应分片日志数据携带的LSN相同。因此,前述全局分片落盘LSN可以为对应时刻已全局连续落盘的分片日志数据对应的LSN中最大的LSN,无需考虑分片页面数据中的LSN。
一个(或称一份)分片数据已落盘指的是该分片数据的各个副本均已存储。对于数据库的同一分片数据,由于写入的存储介质的不同,写入速度也相应不同,因此,其落盘的数据会不断变化,对应的LSN也不断变化。
以图10为例,图10本申请实施例提供的一种示意性的目标历史时刻的分片数据的存储状态示意图。假设分片日志数据1的副本1至3分别存储在数据存储节点D、E和G。在进行数据回溯后,分片日志数据1的副本1已写入数据存储节点D的数据的LSN为LSN100至LSN300,分片日志数据1的副本2已写入数据存储节点E的数据的LSN为LSN100至LSN140,以及LSN160至LSN170,分片日志数据1的副本3已写入数据存储节点E的数据的LSN为LSN100至LSN140,以及LSN171至LSN180。则分片日志数据1落盘的事务记录的LSN为LSN100至LSN140。同理,图10中分片日志数据2已落盘的事务记录的LSN301至LSN350,图10中3已落盘的事务记录的LSN401至LSN460。
连续落盘指的是数据按照LSN由小到大的顺序落盘。一旦LSN在中间断开,后面的数据即不为连续数据。全局连续落盘指的是,所有分片数据连续落盘。即所有分片数据中按照LSN由小到大的顺序落盘。
请继续参考图10,分片日志数据1至3已落盘的事务记录的LSN分别为LSN100至LSN140、LSN301至LSN350和LSN401至LSN460。其中,虽然对于分片日志数据2,与LSN301至LSN320事务日志可以视为连续落盘,但是对于所有分片日志数据,即分片日志数据1至3,从LSN140与LSN301之间的LSN存在断开,因此,全局连续落盘的数据对应的LSN为LSN100至LSN140。其中,最大的LSN为LSN140,则全局分片落盘LSN为LSN140。
参考前述S502,通过分片关系数据,管理节点基于日志数据确定了多个分片数据。在一种可选方式中,分片数据(例如分片日志数据)与其所属的日志数据的LSN相同,也即是在将分片数据写入对应分片时,不改变分片数据中事务记录所携带的LSN;在另一种可选方式中,分片数据与其所属的日志数据的LSN不同,也即是在将分片数据写入对应分片时,改变分片数据中事务记录所携带的LSN(分片数据中携带的LSN与所属的日志数据中携带的LSN存在映射关系)。在该两种可选方式中,可以通过建立数据对应关系来记录分片数据的LSN与其所属的日志数据的LSN的对应关系,如完全相同,或者存在映射。
管理节点可以基于该数据对应关系,确定全局分片落盘LSN在日志数据中所对应的目标LSN,然后基于目标LSN和连续落盘LSN确定增量日志数据,该增量日志数据对应的LSN为目标LSN到连续落盘LSN之间的LSN。请参考图9和图10,假设分片数据与其所属的日志数据的LSN相同,则目标LSN等于全局分片落盘LSN,为LSN140。连续落盘LSN为LSN720。则增量日志数据对应的LSN为LSN140至LSN720,将LSN140至LSN720所在的事务记录确定为增量日志数据即可。
A2、管理节点基于增量日志数据以及分片关系数据,确定至少一个增量分片数据。
可选地,参考前述S502,假设分片关系数据包括第一对应关系和第二对应关系。管理节点可以基于前述分片关系数据将增量日志数据进行分片处理。例如,对于获取的增量日志数据的每个子数据,管理节点可以查询第一对应关系,得到该子数据对应的数据库对象;然后,采用该子数据对应的数据库对象查询该第二对应关系,得到对应的分片,(即确定每个子数据对应的分片,该过程可以视为将每个子数据映射到对应的分片中)。最终,管理节点将对应于同一个分片的子数据确定为一个分片增量日志数据。从而得到至少一个增量分片数据。
A3、管理节点基于分片关系数据和至少一个增量分片数据,更新多个分片数据,更新后的多个分片数据包括至少一个增量分片数据。
以图7或图8为例,至少一个增量分片数据是前述目标历史时刻对应的采集时段中产生的增量分片数据,其数据量大于或等于所有分片数据在该采集时段中其对应元数据获取后新增的数据量之和。相应的,该至少一个增量分片数据与已回溯的分片数据存在数据重复的可能性。图11是本申请实施例提供的一种回溯原理示意图。如图11所示,假设采集时段的起始时刻为第一时刻,结束时刻为第二时刻,回溯得到的两个分片数据,分别为分片数据1和分片数据2,分片数据1由第三时刻获取的第二元数据回溯得到,分片数据2由第四时刻获取的第二元数据回溯得到,则与分片数据1对应的增量分片数据(分片数据1与其对应的增量分片数据存储在同一分片中)为图11中从第三时刻到第二时刻的新增数据702,与分片数据2对应的增量分片数据(分片数据2与其对应的增量分片数据存储在同一分片中)为图11中从第四时刻到第二时刻新增数据703。而基于增量日志数据获取的至少一个增量分片数据为图11中从第一时刻到第二时刻的新增数据701,其包括该采集时段中与分片数据1对应的数据,以及该采集时段中与分片数据2对应的数据。由图11可知,数据701减去数据702,再减去数据703,得到的差值数据是会产生重复写入问题的数据。
可选地,本申请实施例中的增量分片数据的更新过程支持幂等特性。该更新过程包括:
步骤A31、对于每个增量分片数据,检测对应的目标分片存储的数据是否存在与该增量分片数据相同的数据。
目标分片是基于分片关系数据确定的该增量日志数据所需写入的分片。示例的,管理节点可以通过比较目标分片存储的数据中事务记录的LSN与增量分片数据的事务记录的LSN。若存在LSN相同的事务记录,将LSN相同的事务记录确定为相同的数据;若不存在LSN相同的事务记录,确定目标分片存储的数据不存在与该增量分片数据相同的数据。
步骤A32、当对应的目标分片存储的数据均与增量分片数据不同时,将增量分片数据写入对应的目标分片。
当对应的目标分片存储的数据均与增量分片数据不同时,说明目标分片存储的数据均与增量分片数据不存在重复的数据,则可以将增量分片数据写入对应的目标分片中。
步骤A33、当对应的目标分片存储有与增量分片数据相同的数据时,禁止写入增量分片数据,或者,采用增量分片数据覆盖对应的目标分片中与增量分片数据相同的数据,目标分片为基于分片关系数据确定的增量分片数据对应的分片。
当对应的目标分片存储的数据均与增量分片数据不同时,说明目标分片存储的数据均与增量分片数据存在重复的数据,采用上述两种方式,可以避免最终存储的分片数据中存在重复的数据,减少冗余数据对存储空间的占用,实现幂等特性。
本申请实施例中,基于目标历史时刻的日志数据,更新目标历史时刻的多个分片数据,使得更新后的多个分片数据与日志数据一致,保证了分布式数据库的数据一致性,实现有效的数据回溯。
值得说明的是,本申请实施例中的一致性处理过程还可以有其他实现方式,例如在S508或者S606之后,管理节点还可以重启数据库进程,例如执行宕机恢复(crashrecover)流程,通过该宕机恢复流程,采用目标历史时刻的日志数据,更新目标历史时刻的多个分片数据,也能如此保证重启后的数据库系统的稳定性和数据一致性。
图12是本申请实施例提供的一种数据库系统的结构示意图,该数据库系统用于执行前述数据回溯方法。如图12所示,图12以元数据通过快照获取(如目标历史时刻对应的第一元数据和目标历史时刻对应的第二元数据通过快照获取)为例进行说明,该数据库系统包括管理子节点、回溯子节点、计算层以及存储层。其中,管理子节点和回溯子节点的功能可以参考前述图3中对应节点的功能。计算层包括与日志数据相关的模块,示例的,其包括:计算层快照闪回模块、数据组织管理模块、存储模块和缓冲池。其中,计算层快照闪回模块用于在回溯子节点的控制下进行日志数据的闪回,也即是执行前述S507或S605;数据组织管理模块用于将存储模块中存储的数据处理得到高层语义数据,也即是用户可以理解的数据;存储模块用于存储快照数据、分片关系数据和索引数据(该数据用于进行关系表中表项的索引)等,该快照数据可以包括前述第一快照和/或第三快照,该分片关系数据的定义参考前述S502中的定义;缓冲池用于存储事务数据。
存储层包括与分片日志数据相关的模块,示例的,其包括:存储层闪回代理模块、多个存储层快照闪回模块、存储层启动管理模块、数据组织管理模块、存储模块和缓冲池。其中,存储层闪回代理模块用于在回溯子节点的控制下管理多个存储层快照闪回模块,例如向该多个存储层快照闪回模块透传回溯子节点下发的指令;该多个存储层快照闪回模块与多个分片一一对应,每个存储层快照闪回模块用于进行所在分片中的分片数据的闪回,也即是执行前述S508或S606;存储层启动管理模块用于控制分片中数据处理过程的停止和启动,例如控制分片中停止进行数据写入或者开始进行数据写入,在一种可选实现方式中,存储层启动管理模块可以在前述S508或S606之前控制分片中暂停数据写入,在S508或S606之后控制分片中重启数据写入;数据组织管理模块用于将存储模块中存储的数据处理得到高层语义数据,也即是用户可以理解的数据;存储模块用于存储快照数据、分片日志数据和页面数据,该快照数据可以包括前述第二快照,该页面数据的定义参考前述S502中的定义;页面数据的定义参考前述实施例;缓冲池用于存储事务数据。
本申请前述将计算层和存储层分离的数据库系统架构称为计算存储分离架构,日志数据和多个分片数据可以分别回溯,如此可以实现数据的闪回。并且在闪回之后,再进行一致性处理,保证计算层和存储层的一致性,可以有效减少数据回溯对数据库系统的性能的影响。
图13是本申请实施例提供的一种回退效果示意图。图13以一个分片数据的回退效果为例,图13假设在回退前,分片数据包括依序链接的文件1至文件5,分片数据的当前写入位置为文件5,对该分片数据执行前述S508或S606得到一个采集时刻对应的元数据,例如通过快照得到元数据,则该一个采集时刻对应的元数据包括文件1至文件3的元数据,图3假设用户选择的目标历史时刻为该采集时刻,则回退后,文件4和文件5被删除(图中以画叉表示删除),文件1至文件3保留,分片数据的当前写入位置更新为文件3之后的文件6。日志数据的回退效果也可以参考图13的例子,本申请不做赘述。
本申请实施例中,前述S503、S504或S603,第一采集时刻、第二采集时刻或采集时刻可以由时间戳(如原子钟时间戳)或全局唯一标识表征。只要能够唯一表示所采集的元数据即可。
需要说明的是,在获取元数据后(如采用快照获取元数据后,参考前述S503、S504或S603),元数据对应的数据(即元数据所来源的数据)需要添加锁定标识,该锁定标识用于指示对应的数据禁止删除,即进行固化存储。如此可以避免一些其他原因导致该数据被误删除,导致无法进行有效的数据回溯。例如,快照实际上是对快照时刻的元数据的记录,快照生成后,快照对应的文件会通过添加锁定标识被保留,从而保证该文件不被清除。
综上所述,本申请实施例中,基于日志数据的目标历史时刻对应的第一元数据回溯日志数据,基于分片数据的目标历史时刻对应的第二元数据回溯分片数据,无需进行逻辑记录的读取和更新操作的逆操作,数据回溯效率较高,有效降低数据回溯时延。
针对于相同的数据库,相关技术的回溯时延范围通常为几分钟至几十分钟,而本申请实施例提供的数据回溯方法的回溯时延范围通常为十几秒至几十秒。显然,本申请实施例的回溯时延大大降低,可以实现数据库的闪回。
并且,相关技术中采用额外的存储空间来记录的更新操作,占用的存储资源较多,通常需要在云存储空间来进行存储,还需要消耗一定的通信资源。而本申请实施例只需记录日志数据的元数据和分片数据的元数据,而元数据的数据量较小,占用的存储资源较少,可以存储在数据库本地存储空间中,减少通信资源的消耗。并且,由于本申请实施例提供的数据回溯方法占用的存储资源较少,对数据库的数据节点(尤其数据存储节点)的性能影响较小。
相关技术中,支持数据回溯功能的数据库需要在该数据库初始化后即进行更新操作的记录,对数据库的限制较多。本申请实施例提供的数据回溯方法可以通过用户触发或者预先设置的方式来触发数据回溯功能,数据回溯功能的设置更加灵活。
需要说明的是,本申请实施例提供的数据回溯方法步骤的先后顺序可以进行适当调整,例如,S503至S504可以同步执行,步骤也可以根据情况进行相应增减,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化的方法,都应涵盖在本申请的保护范围之内,因此不再赘述。
图14是本申请实施例提供的一种数据回溯装置80的结构示意图,如图14所示,该装置80包括:
第一获取模块801,用于获取日志数据的元数据中目标历史时刻对应的第一元数据;第二获取模块802,用于获取多个分片数据中每个分片数据的元数据中该目标历史时刻对应的第二元数据,该多个分片数据是对该日志数据分片处理得到的数据;第一处理模块803,用于按照该第一元数据处理该日志数据,得到目标历史时刻的日志数据;第二处理模块804,用于按照该第二元数据处理该多个分片数据,得到目标历史时刻的多个分片数据。
综上该,本申请实施例中,第一处理模块基于日志数据的目标历史时刻对应的第一元数据回溯日志数据,第二处理模块基于分片数据的目标历史时刻对应的第二元数据回溯分片数据,无需进行逻辑记录的读取和更新操作的逆操作,数据回溯效率较高,有效降低数据回溯时延。
在一种可选方式中,该目标历史时刻对应的第一元数据和该目标历史时刻对应的第二元数据通过快照获取。
在一种可选方式中,该第一处理模块803,用于:按照该第一元数据指示的数据位置,回退该日志数据,得到该目标历史时刻的日志数据。
在一种可选方式中,该第二处理模块804,用于:按照该第二元数据指示的数据位置,回退该多个分片数据,得到该目标历史时刻的多个分片数据。
图15是本申请实施例提供的一种数据回溯装置80的结构示意图,如图15所示,该装置还包括:更新模块805,用于基于该目标历史时刻的日志数据,更新该目标历史时刻的多个分片数据。
在一种可选方式中,该更新模块805,用于:基于分片关系数据和该目标历史时刻的日志数据,更新该目标历史时刻的多个分片数据,该分片关系数据用于记录日志数据中的子数据与分片的对应关系。
在一种可选方式中,该分片关系数据由分片关系数据的第三元数据恢复得到。
在一种可选方式中,该更新模块805,用于:基于该日志数据的第一元数据指示的数据结束位置与该多个分片数据的第二元数据指示的数据结束位置,确定增量日志数据;基于该增量日志数据以及分片关系数据,确定至少一个增量分片数据;基于该分片关系数据和该至少一个增量分片数据,更新该多个分片数据,更新后的该多个分片数据包括该至少一个增量分片数据。
在一种可选方式中,该日志数据和该分片数据中任一数据的元数据包括:至少一个文件中每个文件的数据写入信息,该至少一个文件用于存储该任一数据;任一文件的数据写入信息用于记录该任一文件在该至少一个文件中的位置,以及该任一文件中的写入数据的结束位置。
可选地,图16示意性地提供本申请实施例提供的计算机设备的一种可能的基本硬件架构。参见图16,计算机设备900包括处理器901、存储器902、通信接口903和总线904。
计算机设备900中,处理器901的数量可以是一个或多个,图16仅示意了其中一个处理器901。可选地,处理器901,可以是中央处理器(central processing unit,CPU)。如果计算机设备900具有多个处理器901,多个处理器901的类型可以不同,或者可以相同。可选地,计算机设备900的多个处理器901还可以集成为多核处理器。
存储器902存储计算机指令和数据;存储器902可以存储实现本申请提供的数据回溯方法所需的计算机指令和数据,例如,存储器902存储用于实现数据回溯方法的步骤的指令。存储器902可以是以下存储介质的任一种或任一种组合:非易失性存储器(例如只读存储器(ROM)、固态硬盘(SSD)、硬盘(HDD)、光盘),易失性存储器。
通信接口903可以是以下器件的任一种或任一种组合:网络接口(例如以太网接口)、无线网卡等具有网络接入功能的器件。
通信接口903用于计算机设备900与其它计算机设备或者终端进行数据通信。
总线904可以将处理器901与存储器902和通信接口903连接。这样,通过总线904,处理器901可以访问存储器902,还可以利用通信接口903与其它计算机设备或者终端进行数据交互。
在本申请中,计算机设备900执行存储器902中的计算机指令,使得计算机设备900实现本申请提供的数据回溯方法,或者使得计算机设备900部署数据库系统。
在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器,上述指令可由服务器的处理器执行以完成本申请各个实施例所示的数据回溯方法。例如,该非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现,所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机的可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质,或者半导体介质(例如固态硬盘)等。
在本申请中,术语“第一”、“第二”和“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。术语“至少一个”表示1个或多个,术语“多个”指两个或两个以上,除非另有明确的限定。A参考B,指的是A与B相同或者A为B的简单变形。
需要说明的是:上述实施例提供的数据回溯装置在执行该数据回溯方法时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的数据回溯装置与数据回溯方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (20)
1.一种数据回溯方法,其特征在于,所述方法包括:
获取日志数据的元数据中目标历史时刻对应的第一元数据;
获取多个分片数据中每个分片数据的元数据中所述目标历史时刻对应的第二元数据,所述多个分片数据是对所述日志数据分片处理得到的数据;
按照所述第一元数据处理所述日志数据,得到目标历史时刻的日志数据;
按照所述第二元数据处理所述多个分片数据,得到目标历史时刻的多个分片数据。
2.根据权利要求1所述的方法,其特征在于,所述目标历史时刻对应的第一元数据和所述目标历史时刻对应的第二元数据通过快照获取。
3.根据权利要求1或2所述的方法,其特征在于,所述按照所述第一元数据指示的处理所述日志数据,得到目标历史时刻的日志数据,包括:
按照所述第一元数据指示的数据位置,回退所述日志数据,得到所述目标历史时刻的日志数据。
4.根据权利要求1或2所述的方法,其特征在于,所述按照所述第二元数据处理所述多个分片数据,得到目标历史时刻的多个分片数据,包括:
按照所述第二元数据指示的数据位置,回退所述多个分片数据,得到所述目标历史时刻的多个分片数据。
5.根据权利要求1至4任一所述的方法,其特征在于,所述方法还包括:
基于所述目标历史时刻的日志数据,更新所述目标历史时刻的多个分片数据。
6.根据权利要求5所述的方法,其特征在于,所述基于所述目标历史时刻的日志数据,更新所述目标历史时刻的多个分片数据,包括:
基于分片关系数据和所述目标历史时刻的日志数据,更新所述目标历史时刻的多个分片数据,所述分片关系数据用于记录日志数据中的子数据与分片的对应关系。
7.根据权利要求6所述的方法,其特征在于,所述分片关系数据由分片关系数据的第三元数据恢复得到。
8.根据权利要求6或7所述的方法,其特征在于,所述基于分片关系数据,以及所述目标历史时刻的日志数据,更新所述目标历史时刻的多个分片数据,包括:
基于所述日志数据的第一元数据指示的数据结束位置与所述多个分片数据的第二元数据指示的数据结束位置,确定增量日志数据;
基于所述增量日志数据以及分片关系数据,确定至少一个增量分片数据;
基于所述分片关系数据和所述至少一个增量分片数据,更新所述多个分片数据,更新后的所述多个分片数据包括所述至少一个增量分片数据。
9.根据权利要求1至8任一所述的方法,其特征在于,所述日志数据和所述分片数据中任一数据的元数据包括:至少一个文件中每个文件的数据写入信息,所述至少一个文件用于存储所述任一数据;
任一文件的数据写入信息用于记录所述任一文件在所述至少一个文件中的位置,以及所述任一文件中的写入数据的结束位置。
10.一种数据回溯装置,其特征在于,所述装置包括:
第一获取模块,用于获取日志数据的元数据中目标历史时刻对应的第一元数据;
第二获取模块,用于获取多个分片数据中每个分片数据的元数据中所述目标历史时刻对应的第二元数据,所述多个分片数据是对所述日志数据分片处理得到的数据;
第一处理模块,用于按照所述第一元数据处理所述日志数据,得到目标历史时刻的日志数据;
第二处理模块,用于按照所述第二元数据处理所述多个分片数据,得到目标历史时刻的多个分片数据。
11.根据权利要求10所述的装置,其特征在于,所述目标历史时刻对应的第一元数据和所述目标历史时刻对应的第二元数据通过快照获取。
12.根据权利要求10或11所述的装置,其特征在于,所述第一处理模块,用于:
按照所述第一元数据指示的数据位置,回退所述日志数据,得到所述目标历史时刻的日志数据。
13.根据权利要求10或11所述的装置,其特征在于,所述第二处理模块,用于:
按照所述第二元数据指示的数据位置,回退所述多个分片数据,得到所述目标历史时刻的多个分片数据。
14.根据权利要求10至13任一所述的装置,其特征在于,所述装置还包括:更新模块,用于基于所述目标历史时刻的日志数据,更新所述目标历史时刻的多个分片数据。
15.根据权利要求14所述的装置,其特征在于,所述更新模块,用于:
基于分片关系数据和所述目标历史时刻的日志数据,更新所述目标历史时刻的多个分片数据,所述分片关系数据用于记录日志数据中的子数据与分片的对应关系。
16.根据权利要求15所述的装置,其特征在于,所述分片关系数据由分片关系数据的第三元数据恢复得到。
17.根据权利要求15或16所述的装置,其特征在于,所述更新模块,用于:
基于所述日志数据的第一元数据指示的数据结束位置与所述多个分片数据的第二元数据指示的数据结束位置,确定增量日志数据;
基于所述增量日志数据以及分片关系数据,确定至少一个增量分片数据;
基于所述分片关系数据和所述至少一个增量分片数据,更新所述多个分片数据,更新后的所述多个分片数据包括所述至少一个增量分片数据。
18.根据权利要求10至17任一所述的装置,其特征在于,所述日志数据和所述分片数据中任一数据的元数据包括:至少一个文件中每个文件的数据写入信息,所述至少一个文件用于存储所述任一数据;
任一文件的数据写入信息用于记录所述任一文件在所述至少一个文件中的位置,以及所述任一文件中的写入数据的结束位置。
19.一种计算机设备,其特征在于,包括:
处理器和存储器;
所述存储器,用于存储计算机指令;
所述处理器,用于执行所述存储器存储的计算机指令,使得所述计算机设备执行权利要求1至9任一所述的数据回溯方法。
20.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质包括计算机指令,所述计算机指令指示计算机设备执行权利要求1至9任一所述的数据回溯方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010748428X | 2020-07-30 | ||
CN202010748428 | 2020-07-30 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114090538A true CN114090538A (zh) | 2022-02-25 |
Family
ID=80295830
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010918128.1A Pending CN114090538A (zh) | 2020-07-30 | 2020-09-03 | 数据回溯方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114090538A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115269563A (zh) * | 2022-09-26 | 2022-11-01 | 北京奥星贝斯科技有限公司 | 用于针对数据库系统进行日志分析的方法及装置 |
-
2020
- 2020-09-03 CN CN202010918128.1A patent/CN114090538A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115269563A (zh) * | 2022-09-26 | 2022-11-01 | 北京奥星贝斯科技有限公司 | 用于针对数据库系统进行日志分析的方法及装置 |
CN115269563B (zh) * | 2022-09-26 | 2022-12-09 | 北京奥星贝斯科技有限公司 | 用于针对数据库系统进行日志分析的方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10944807B2 (en) | Organizing present and future reads from a tiered streaming data storage layer | |
CN109074306B (zh) | 分布式存储系统中的混合垃圾收集 | |
US8250033B1 (en) | Replication of a data set using differential snapshots | |
US7774565B2 (en) | Methods and apparatus for point in time data access and recovery | |
US7257690B1 (en) | Log-structured temporal shadow store | |
US8060713B1 (en) | Consolidating snapshots in a continuous data protection system using journaling | |
JP5500309B2 (ja) | ストレージ装置 | |
US9305072B2 (en) | Information storage system and data replication method thereof | |
CN110018989B (zh) | 一种快照比对的方法和装置 | |
CN109358987B (zh) | 一种基于两级数据去重的备份集群 | |
CN109522290B (zh) | 一种HBase数据块恢复及数据记录提取方法 | |
US8560500B2 (en) | Method and system for removing rows from directory tables | |
CN110998537B (zh) | 一种过期备份处理方法及备份服务器 | |
US11468011B2 (en) | Database management system | |
US10229127B1 (en) | Method and system for locality based cache flushing for file system namespace in a deduplicating storage system | |
CN114281762B (zh) | 一种日志存储加速方法、装置、设备及介质 | |
CN113377292B (zh) | 一种单机存储引擎 | |
CN114968966A (zh) | 分布式元数据远程异步复制方法、装置和设备 | |
CN113094374A (zh) | 分布式存储和检索方法、装置及计算机设备 | |
CN113885809B (zh) | 数据管理系统及方法 | |
CN114090538A (zh) | 数据回溯方法及装置 | |
CN107133334B (zh) | 基于高带宽存储系统的数据同步方法 | |
CN113495807A (zh) | 数据备份方法、数据恢复方法及装置 | |
US10073874B1 (en) | Updating inverted indices | |
US11803525B2 (en) | Selection and movement of data between nodes of a distributed storage system |
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 |