CN117992274A - 非关系型数据库的数据恢复方法、装置、计算设备集群 - Google Patents

非关系型数据库的数据恢复方法、装置、计算设备集群 Download PDF

Info

Publication number
CN117992274A
CN117992274A CN202211324203.7A CN202211324203A CN117992274A CN 117992274 A CN117992274 A CN 117992274A CN 202211324203 A CN202211324203 A CN 202211324203A CN 117992274 A CN117992274 A CN 117992274A
Authority
CN
China
Prior art keywords
data
copy
recovery
data table
source 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.)
Pending
Application number
CN202211324203.7A
Other languages
English (en)
Inventor
宋雨恒
谢晓芹
秦华东
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Cloud Computing Technologies Co Ltd
Original Assignee
Huawei Cloud Computing Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Cloud Computing Technologies Co Ltd filed Critical Huawei Cloud Computing Technologies Co Ltd
Priority to CN202211324203.7A priority Critical patent/CN117992274A/zh
Publication of CN117992274A publication Critical patent/CN117992274A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1448Management of the data involved in backup or backup restore
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor

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)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Quality & Reliability (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供了一种非关系型数据库的数据恢复方法、装置及计算设备集群。方法包括:创建第一表名对应的第一源数据表对应的副本;获取客户端发送的包括恢复时刻和第一表名的数据恢复请求;响应数据恢复请求,确定早于恢复时刻的第一源数据表的第一副本;确定第一预写日志;其中,第一预写日志包括第一副本的创建时刻至恢复时刻这一时段的第一操作记录;基于第一预写日志中的第一操作记录和第一副本,将第一副本中的第一副本数据经过第一操作记录处理后的数据还原到第一表名对应的当前的第一源数据表,第一副本数据为第一副本的创建时刻下的第一源数据表中的数据。由此,无需重定向到新的数据表,进一步无需对应用程序进行修改。

Description

非关系型数据库的数据恢复方法、装置、计算设备集群
技术领域
本发明涉及数据处理技术领域,尤其涉及一种非关系型数据库的数据恢复方法、装置及计算设备集群。
背景技术
数字信息的存储依赖于数据库技术,而数据的安全显得尤为重要,而数据表的数据恢复技术就是数据库安全至关重要的功能。
目前,数据表的恢复技术就是使用数据库备份过来的数据表的副本和日志等,将数据表的数据恢复到一个新的数据表,实现数据表的数据的恢复。
但是,将数据恢复到一个新的数据表,意味着用户需要将应用程序重定向到新的数据表,这将影响用户的具体使用。
发明内容
本发明实施例提供了一种非关系型数据库的数据恢复方法、装置及计算设备集群,将恢复数据直接恢复到和用户对接的源数据表,无需将应用程序重定向到新的数据表,避免用户对应用程序的修改,提高用户体验。
第一方面,本发明实施例提供了一种非关系型数据库的数据恢复方法,非关系型数据库包括第一表名对应的第一源数据表,第一源数据表用于记录客户端发送的业务数据,方法包括:创建第一表名对应的第一源数据表的副本;获取客户端发送的数据恢复请求;其中,数据恢复请求包括恢复时刻和第一表名;响应数据恢复请求,从已经创建的第一源数据表对应的副本中确定第一副本;其中,第一副本的创建时刻早于恢复时刻;确定第一预写日志;其中,第一预写日志包括第一副本的创建时刻至恢复时刻这一时段的针对第一副本表示的第一源数据表的第一操作记录;基于第一预写日志中的第一操作记录和第一副本,将恢复时刻的恢复数据还原到第一表名对应的当前的第一源数据表;其中,恢复数据为第一副本中的第一副本数据经过第一操作记录处理后的数据,第一副本数据为第一副本的创建时刻下的第一源数据表中的数据。
本方案中,将数据表的恢复数据直接恢复到和用户对接的源数据表,无需将应用程序重定向到新的数据表,避免用户对应用程序的修改,提高用户体验。
具体可通过如下两种实现方式更新当前的第一源数据表。
在一种可能的实现方式中,基于第一预写日志中的第一操作记录和第一副本,将恢复时刻的恢复数据还原到第一表名对应的当前的第一源数据表,包括:确定第一表名对应的当前的第一源数据表中的当前数据;确定恢复数据;确定恢复数据和当前数据之间的差异数据;将差异数据写入第一表名对应的当前的第一源数据表中。
本方案中,将恢复数据和当前的源数据表的当前数据之间的差异数据,写入对接用户的源数据表,可以在一定程度上减少数据写入的成本和时间。
进一步地,将差异数据写入当前的第一源数据表的过程中,方法还包括:将第一表名下的待写入的业务数据写入当前的第一源数据表中;其中,差异数据和业务数据写入当前的第一源数据表的时刻不同,以区别恢复数据和新写入的业务数据。
本方案中,将恢复数据和当前的源数据表的当前数据之间的差异数据,写入对接用户的源数据表的过程中,支持新数据的写入,由于差异数据先写入,新数据后写入,通过写入时刻的差异,可以确定恢复数据和新写入数据,从而区别出最新数据。
在一个例子中,确定恢复数据,包括:确定第一操作记录对应的临时索引树;基于第一副本中的第一索引树和临时索引树,确定恢复数据;其中,第一索引树用于检索第一副本数据。
本方案中,通过构建操作记录的临时索引树,和结合副本中的索引树,实现数据恢复,可以在一定程序上提高数据恢复的效率。
进一步的,删除临时索引树
在另一种可能的实现方式中,基于第一预写日志中的第一操作记录和第一副本,将恢复时刻的恢复数据还原到第一表名对应的当前的第一源数据表,包括:基于第一预写日志中的第一操作记录和第一副本,确定第二表名下的数据表;其中,数据表中的数据为恢复数据;将第二表名替换为第一表名,以使第二表名的数据表作为第一表名对应的当前的源数据表。
本方案中,通过将恢复数据恢复到一张新表,之后交换数据表的表名,实现源数据表的对接。
在一个例子中,将第二表名替换为第一表名之前,还包括:确定当前的第一源数据表为只读状态;确定第一表名下的第二预写日志;其中,第二预写日志包括恢复时刻到当前时刻这一时段的针对恢复时刻的第一源数据表的第二操作记录;将第二预写日志中的第二操作记录写入第二表名下的数据表中。
本方案中,在交换表名之前,将最初的源数据表设置为只读,不再写入新的数据,之后将最新的预写日志写到恢复数据所在的新的数据表中,使得新的数据表和最初的源数据表中的数据保持一致,之后,交换数据表的表名,实现源数据表的对接。
进一步的,删除第一表名下之前的当前的源数据表。
在一种可能的实现方式中,副本还包括创建时刻前第一时段的预写日志;预写日志指示了创建时刻前第一时段针对第一源数据表的操作记录,第一时段的时长大于等于该副本的创建时刻和上一副本的创建时刻之间的时长;对应的,第一预写日志为第一副本之后创建的若干个副本中的预写日志。
可选地,第一副本为已经创建的第一源数据表的副本中创建时刻距离恢复时刻最近的副本,对应的,第一预写日志为第一副本之后的下一副本的预写日志。
第二方面,本发明实施例提供了一种非关系型数据库的数据恢复装置,数据恢复装置包括若干个模块,各个模块用于执行本发明实施例第一方面提供的显示方法中的各个步骤,关于模块的划分在此不做限制。该显示装置各个模块所执行的具体功能及达到的有益效果请参考本发明实施例第一方面提供的显示方法的各个步骤的功能,在此不再赘述。
示例地,非关系型数据库的数据恢复装置,非关系型数据库包括第一表名对应的第一源数据表,第一源数据表用于记录客户端发送的业务数据,该装置包括:
副本创建模块,用于创建第一表名对应的第一源数据表的副本;
请求获取模块,用于获取客户端发送的数据恢复请求;其中,数据恢复请求包括恢复时刻和第一表名;
响应模块,用于响应数据恢复请求,从已经创建的第一源数据表对应的副本中确定第一副本;其中,第一副本的创建时刻早于恢复时刻;
日志确定模块,用于确定第一预写日志;其中,第一预写日志包括第一副本的创建时刻至恢复时刻这一时段的针对第一副本表示的第一源数据表的第一操作记录;
更新模块,用于基于第一预写日志中的第一操作记录和第一副本,将恢复时刻的恢复数据还原到第一表名对应的当前的第一源数据表;其中,恢复数据为第一副本中的第一副本数据经过第一操作记录处理后的数据,第一副本数据为第一副本的创建时刻下的第一源数据表中的数据。
第三方面,本发明实施例提供了一种非关系型数据库的数据恢复装置,包括:至少一个存储器,用于存储程序;至少一个处理器,用于执行存储器存储的程序,当存储器存储的程序被执行时,处理器用于执行第一方面中所提供的方法。
第四方面,本发明实施例提供了一种非关系型数据库的数据恢复装置,该装置运行计算机程序指令,以执行第一方面中所提供的方法。示例性的,该装置可以为芯片,或处理器。
在一个例子中,该装置可以包括处理器,该处理器可以与存储器耦合,读取存储器中的指令并根据该指令执行第一方面中所提供的方法。其中,该存储器可以集成在芯片或处理器中,也可以独立于芯片或处理器之外。
第五方面,本发明实施例提供了一种计算设备集群,包括:至少一个计算设备,每个计算设备包括处理器和存储器;至少一个计算设备的处理器用于执行至少一个计算设备的存储器中存储的指令,以使得计算设备集群执行第一方面中所提供的方法。
第六方面,本发明实施例提供了一种计算设备集群,该集群运行计算机程序指令,以执行第一方面中所提供的方法。示例性的,该集群包括至少一个计算设备。
第七方面,本发明实施例提供了一种计算机存储介质,计算机存储介质中存储有指令,当指令在计算机上运行时,使得计算机执行第一方面中所提供的方法。
第八方面,本发明实施例提供了一种包含指令的计算机程序产品,当指令在计算机上运行时,使得计算机执行第一方面中所提供的方法。
附图说明
图1是本发明实施例所应用的一种数据恢复系统的架构架构图;
图2是一种数据恢复方案的示意图;
图3是本发明实施例提供的一种非关系型数据库的数据恢复方法的流程示意图;
图4是图3中步骤350的实现方式1的流程示意图;
图5是图4中步骤3512的流程示意图;
图6是本发明实施例提供的一种临时索引树的示意图;
图7是本发明实施例提供的一种第一索引树的示意图;
图8是图4示出的方案的场景示意图。
图9是图3中步骤350的实现方式2的流程示意图;
图10是图9所示方案的场景示意图;
图11是本发明实施例提供的一种非关系型数据库的数据恢复装置的示意图;
图12是本发明实施例提供的一种计算设备的结构示意图;
图13是本发明实施例提供的一种计算设备集群的结构示意图一;
图14a是本发明实施例提供的一种计算设备集群的结构示意图二;
图14b是本发明实施例提供的一种计算设备集群的结构示意图三。
具体实施方式
为了使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图,对本发明实施例中的技术方案进行描述。
在本发明实施例的描述中,“示例性的”、“例如”或者“举例来说”等词用于表示作例子、例证或说明。本发明实施例中被描述为“示例性的”、“例如”或者“举例来说”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”、“例如”或者“举例来说”等词旨在以具体方式呈现相关概念。
在本发明实施例的描述中,术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,单独存在B,同时存在A和B这三种情况。另外,除非另有说明,术语“多个”的含义是指两个或两个以上。例如,多个系统是指两个或两个以上的系统,多个终端是指两个或两个以上的终端。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
图1示出了本发明实施例所应用的一种数据恢复系统的架构示例图。应理解,本发明实施例适用的数据恢复系统还可以适用图1示出的数据恢复系统之外的其他数据恢复系统,本发明实施例对此不做限定。如图1所示,数据恢复系统包括终端设备101和计算设备集群102。
其中,终端设备101可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备。本发明实施例中涉及的终端设备101的示例性实施例包括但不限于搭载iOS、android、Windows、鸿蒙系统(Harmony OS)或者其他操作系统的电子设备。本发明实施例对电子设备的类型不做具体限定。
其中,计算设备集群102由若干台计算设备组成的集群,该计算设备可以是服务器,例如是中心服务器、边缘服务器,或者是本地数据中心中的本地服务器。在一些实施例中,计算设备也可以是台式机、笔记本电脑或者智能手机等终端设备。在一些实施例中,本方案中涉及的计算设备集群102中的计算设备可以用于提供云服务,其可以为一种可以与其他的设备建立通信连接、且能为其他的设备提供运算功能和/或存储功能的服务器或者是超级终端。另外,该计算设备可以是硬件服务器,也可以植入虚拟化环境中,例如,本发明实施例中涉及的服务器可以是在包括一个或多个其他虚拟机的硬件服务器上执行的虚拟机。
终端设备101通过网络与计算设备集群102通信。其中,网络可以为有线网络或无线网络。示例地,有线网络可以为电缆网络、光纤网络、数字数据网(Digital DataNetwork,DDN)等,无线网络可以为电信网络、内部网络、互联网、局域网络(Local AreaNetwork,LAN)、广域网络(Wide Area Network,WAN)、无线局域网络(Wireless Local AreaNetwork,WLAN)、城域网(Metropolitan Area Network,MAN)、公共交换电话网络(PublicService Telephone Network,PSTN)、蓝牙网络、紫蜂网络(ZigBee)、移动电话(GlobalSystem for Mobile Communications,GSM)、CDMA(Code Division Multiple Access)网络、CPRS(GeneralPacketRadioService)网络等或其任意组合。可以理解的是,网络可使用任何已知的网络通信协议来实现不同客户端层和网关之间的通信,上述网络通信协议可以是各种有线或无线通信协议,诸如以太网、通用串行总线(universal serial bus,USB)、火线(firewire)、全球移动通讯系统(global system for mobile communications,GSM)、通用分组无线服务(general packet radio service,GPRS)、码分多址接入(code divisionmultiple access,CDMA)、宽带码分多址(wideband code division multiple access,WCDMA),时分码分多址(time-division code division multiple access,TD-SCDMA)、长期演进(long term evolution,LTE)、新空口(new radio,NR)、蓝牙(bluetooth)、无线保真(wireless fidelity,Wi-Fi)等通信协议。
本发明实施例中,计算设备集群102包括非关系型数据库,非关系型数据库是按照数据结构来组织、存储和管理数据的仓库;本发明实施例中,非关系型数据库以数据表的形式存储数据,每个数据表具有唯一标识该表的表名,值得注意的是,表名下的数据表用于对接用户,存储用户最新的业务数据,为源数据表;需要指出,非关系型数据库去掉数据表之间的关系特性,不同数据表中的数据之间无关系。
在相关技术中,终端设备101可以对计算设备集群102中的若干个源数据表进行业务配置,比如,PITR(point-in-time recovery,即时恢复),在为源数据表配置了PITR特性后,计算设备集群102可以以一定周期创建配置了PITR特性的源数据表的副本。示例地,该副本可以为快照或备份。在用户存在误操作导致数据出现异常时,此时需要进行数据恢复。图2为一种数据恢复方案的示意图。下面结合图2对目前的非关系型数据库的数据恢复方法进行说明。
如图2所示,假设用户对某个源数据表在时间点12:15:00的数据进行了误操作,用户想要恢复该源数据表在时间点12:15:00的数据,此时,终端设备101可以生成一个请求(为了便于描述和区别,可以称为数据恢复请求),将该请求上传至计算设备集群102。其中,该请求包括恢复时刻、计算设备集群102中的源数据表的表名(为了便于描述和区别,称为源数据表名)和一个新的表名(为了便于描述和区别,称为新数据表名)。计算设备集群102将恢复时刻转换为内部时间戳,从而理解用户指定的恢复时刻;然后,查找该内部时间戳之前的最近的源数据表名下的一个副本,该副本可以为快照或备份,至少指示了源数据表名下的源数据表在时刻12:10:00的所有数据;接着,根据该内部时间戳定位预写日志(Write-Ahead Logging,WAL)的偏移位置;其中,预写日志的初始位置至偏移位置之间的操作记录指示了在用户指定的时刻12:15:00和最近的一个副本的建立时刻12:10:00这一区间内,对时刻12:10:00的源数据表名下的源数据表的所有数据的操作记录;然后,将最近的一个副本中的数据恢复到新数据表名下的新的数据表中,接着,将预写日志的初始位置至偏移位置之间的操作记录写入新数据表名下的新的数据表,最后,得到的新数据表名下的新的数据表中的数据即为源数据表名的源数据表在用户指定的恢复时刻12:15:00的所有数据。
在该相关技术中,一方面,PITR数据恢复必须恢复到一张具有新的表名的数据表中,这意味着用户必须将应用程序重定向到新的表名的数据表,使得该数据表称为源数据表,这将影响用户的具体应用。另一方面,用户选择将新的表名的数据表替换为原来的源数据表,这将带来额外的成本和时间。再一方面,可能会改变用户某些模板化管理数据表的处理逻辑,由于更改了源数据表的表名,因此PITR恢复的新的表名的数据表将会脱离模板的管控。
在本发明实施例中,采用原地回滚的方式,将PITR数据恢复到相同表名下的源数据表中,用户无需将应用程序重定向到新的表名的数据表,确保用户体验。
【方法实施例】
图3是本发明实施例提供的一种非关系型数据库的数据恢复方法的流程示意图。本实施例可应用在任何具有计算、处理能力的装置、设备、平台、设备集群来执行。比如,可以为上述计算设备集群102;下面以计算设备集群102作为执行主体进行说明。这里,非关系型数据库具有多个源数据表,每个源数据表用于记录对应的客户端发送的业务数据,且不断的覆盖旧的业务数据,因此,通过源数据表可以检索出最新的业务数据。若源数据表被用户配置了PITR特性,则可以该源数据表进行数据恢复,每个配置PITR源数据表的数据恢复方法相同,本发明实施例以一个源数据表的数据恢复为例进行描述,为了便于描述和区别,将该源数据源称为第一源数据表,对应的表名称为第一表名,换言之,非关系型数据库包括第一表名对应的第一源数据表,且该第一源数据表被用户配置了PITR特性,第一源数据表用于记录客户端发送的业务数据。需要说明的是,计算设备集群102包含非关系型数据库。如图3所示,本发明实施例提供的一种非关系型数据库的数据恢复方法至少包括如下步骤:
步骤310、创建第一表名对应的第一源数据表的副本。
在实际应用本发明实施例提供的方法中,客户端比如上述终端设备101提供第一页面,该页面具有数据表选择控件和PITR特性配置控件,数据表选择控件用于选择源数据表,PITR特性配置控件用于为数据表选择控件选择的源数据表生成PITR特性请求,将该请求发送至计算设备集群102,以使计算机设备集群102为数据表选择控件选择的源数据表创建副本。
从当前的发展来看,目前主流的是按照预设的时间间隔不断的创建第一源数据表的副本,本发明实施例主要围绕按照预设的时间间隔不断的创建副本来说明本发明实施例提供的方法,但考虑到连续创建副本的多样性以及未来可能出现更多新的连续创建副本的方法,本发明并不限制连续创建副本的具体形式。
其中,副本可以理解为对第一源数据表的复制,可以为快照或备份。这里,副本包括副本创建时刻的源数据表的副本数据表,副本数据表包括副本数据和检索副本数据的索引树,副本数据为副本的创建时刻下第一源数据表的所有数据。从当前的发展来看,目前主流的副本为快照,本发明实施例主要围绕快照来说明本发明实施例提供的方法,但考虑到创建副本的多样性以及未来可能出现更多新的创建副本的方法,本发明并不限制副本的具体类型。快照是第一源数据表在某一时间点的视图,提供第一源数据表在创建快照时的只读、静态视图。
下面以第一时间间隔为10分钟为例对创建快照的过程进行详细说明。
计算设备集群102以10min为间隔创建第一表名的第一源数据表的快照,对于每次创建快照,记录为该第一源数据表在快照的创建时刻的副本数据。
步骤320、获取客户端发送的数据恢复请求;其中,数据恢复请求包括恢复时刻和第一表名。
示例地,客户端比如上述终端设备101提供第二页面,该页面具有数据表选择控件、和恢复时刻输入控件,数据表选择控件可以选择非关系型数据库比如计算设备集群102中具有PITR特性的源数据表的表名,恢复时刻输入控件可以输入恢复时刻;进一步的,该页面还包括数据恢复控件,当客户端比如上述终端设备101检测到作用于数据恢复控件的点击操作时,根据数据表选择控件和恢复时刻输入控件的数据,生成数据恢复请求,并将数据恢复请求上传至计算设备集群102。这里,数据恢复控件可以为原地回滚按钮。
需要指出,恢复时刻下第一表名对应的第一源数据表存在用户误操作,因此需要进行数据恢复。
步骤330、响应数据恢复请求,从已经创建的第一源数据表对应的副本中确定第一副本;其中,第一副本的创建时刻早于恢复时刻。
可选地,可以将恢复时刻转化为内部时间戳,基于内部时间戳和第一源数据表的副本的创建时刻,可以找到早于恢复时刻的创建的第一副本。
这里,第一副本可以为已经创建的第一源数据表对应的副本中距离恢复时刻最近的副本。示例地,在实际应用中,基于内部时间戳和副本的创建时刻,可以找到距离恢复时刻最近的第一表名对应的快照标识,基于快照标识和快照的索引树,找到第一表名对应的快照。
步骤340、确定第一预写日志;其中,第一预写日志包括第一副本的创建时刻至恢复时刻这一时段的针对第一源数据表的第一操作记录。
其中,第一预写日志以文件的方式存储,记录了所有对第一源数据表中数据的最原始的更改操作,一般包括插入操作(insert)、更新操作(update)、删除操作(delete)等操作,每个更改操作都以一条操作记录的形式写入预写日志比如二进制日志文件。
则第一预写日志包括若干条操作记录,每条操作记录中都包含了当前记录更新的时间戳(即操作时刻)、该记录在当前二进制日志文件中的位置、该记录的日志长度、操作对应的第一表名下的数据标识、操作标识和其他相关信息。其中,数据标识用于区别不同的数据;操作时刻用于记录操作的先后顺序;操作标识可以为增加(Insert)、删除(Delete)和修改(Update)等,当操作记录中的操作标识为增加(Insert)或修改(Update)时,此时,该操作记录还可以包括数据标识对应的数据,数据可以为最终结果,比如增加(Insert)后的结果,修改(Update)后的结果,还可以为增量数据,比如修改(Update)后的数据和相对于原始数据的差值;操作记录的位置可以采用第一预写日志的初始位置+偏移量的形式标识,也可以采用全局事务标识(Global Transaction ID,GTID)在日志文件中所对应的位置点表示,在实际应用中,一般多采用“初始位置+偏移量”的形式,本发明实施例主要围绕初始位置+偏移量来说明,但考虑到位置表示的多样性以及未来可能出现更多新的位置表示的方法,本发明并不限制位置表示的具体方式。日志长度+偏移量可以标识操作记录所在日志的范围。另外,在实际应用中,第一源数据表通常会有一个或多个预写日志的文件,不同的文件可以通过文件扩展名采用不同的数字编号形式加以区分。
其中,第一操作记录指示了第一预写日志中指示创建时刻到恢复时刻之间的时段的针对第一源数据表的所有操作记录,包括若干条操作记录。在实际应用中,可以确定相对第一预写日志初始位置的偏移范围,将第一预写日志中偏移范围下的所有操作记录作为第一操作记录。这里,偏移范围表示起始的位置点和结束的位置点形成的范围,起始的位置点为第一预写日志中创建时刻下的操作记录的偏移量表示的位置,结束位置点为第一预写日志中恢复时刻下的操作记录(对应的操作时刻为小于等于恢复时刻中距离恢复时刻最近的操作时刻)的偏移量+日志长度后的偏移量表示的位置。这里,若创建时刻下没有操作记录,则将大于创建时刻中距离创建时刻最近的操作时刻的操作记录的偏移量表示的位置作为初始的位置点;若恢复时刻下没有操作记录,则将小于恢复时刻中距离恢复时刻最近的操作时刻的操作记录的偏移量表示的位置作为结束的位置点。
从当前的发展来看,目前主流的非关系型数据库的存储形式为键-值即key-value。本发明实施例主要围绕key-value来说明本发明实施例提供的方法,但考虑到存储形式的多样性以及未来可能出现更多新的存储形式的方法,本发明并不限制key-value的具体类型。具体来说,操作记录中的数据标识作为key,数据作为value。
示例地,第一操作记录如下表1所示:
操作记录的编号 key value 操作标识 操作时刻
1 user1 存款:10000 Insert T1
2 user1 存款:+100 Update T2
3 user1 存款:+200 Update T3
4 user2 存款:+1000 Update T2
5 user2 存款:+2000 Update T3
6 user3 名称:A Update T3
7 user3 名称:B Update T4
表1
其中,T1<T2<T3<T4,每行的记录表示一条操作记录。对于编号为1的操作记录,key为user1、操作标识为Insert、操作时刻为T1、value为存款:10000;对于编号为2的操作记录,key为user1、操作标识为Insert、操作时刻为T2、value存款:+100(为增量数据);对于编号为3至7的操作记录类同,不再赘述。
根据一种可行的实现方式,本发明实施例在连续创建第一源数据表的副本时,对于任一副本,该副本中除了有第一源数据表的副本数据表,还可以包括预写日志,预写日志指示了该副本的创建时刻前第一时段针对副本数据表的若干个操作记录。这里,第一时段的时长大于等于该副本的创建时刻和上一副本的创建时刻之间的时长。对应的,第一预写日志为第一副本之后创建的若干个副本中的预写日志。采用上述方案可以避免副本中的预写日志过大,从而便于读出和处理副本中的预写日志,提高数据处理效率。
下面以第一时间间隔为10分钟为例对创建快照的过程进行详细说明。
计算设备集群102以10min为间隔创建第一源数据表的快照,对于每次创建快照,记录该第一源数据表在快照的创建时刻的副本数据,并且触发预写日志的复制clone,保留自身时间点及前10min的预写日志,考虑到预写日志记录了前10分钟的操作记录,因此,在副本数据的基础上,通过回放预写日志可以得到前10分钟的任一时刻的第一源数据表。
可选地,第一副本为已经创建的第一源数据表的副本中创建时刻距离恢复时刻最近的副本,对应的,第一预写日志为第一副本之后的下一副本中的预写日志。
步骤350、基于第一预写日志中的第一操作记录和第一副本,将恢复时刻的恢复数据还原到第一表名对应的当前的第一源数据表;其中,恢复数据为第一副本中的第一副本数据经过第一操作记录处理后的数据,第一副本数据为第一副本的创建时刻下的第一源数据表中的数据。
本方案中,基于第一操作记录和第一副本直接更新第一表名下的第一源数据表,使得更新后的第一源数据表反映出恢复时刻的第一源数据表的真实情况,从而无需新的数据表中,无需将应用程序重定向到新的数据表,避免用户对应用程序的修改,提高用户体验。需要说明的是,第一源数据表是实时更新的,即需要根据客户端那边的实际情况不断的写入删除数据,确保最新的数据。
其中,恢复数据为第一源数据表在恢复时刻下的所有数据,为第一副本中的副本数据(为了便于描述和区别,称为第一副本数据)经过第一操作记录处理后的数据;第一副本数据为第一副本的创建时刻下的第一源数据表中的所有数据。具体地,恢复数据包括第一副本数据和第一操作记录中多个key在恢复时刻的value。
具体地,对于第一副本数据和第一操作记录中的所有key中的目标key(所有key中的任一),具体可通过如下方式确定其在恢复时刻的value。
方式1:第一副本数据包括该目标key及其对应的value,第一操作记录不包括该目标key,即不存在对该目标key的操作记录。则该目标key在第一副本数据中的value作为恢复时刻的value。
方式2:若第一操作记录包括该目标key,且最晚操作记录中的操作标识为Delete。则该目标key在恢复时刻不存在value;其中,最晚操作记录为第一操作记录中,包括该目标key且操作时刻最晚的操作记录。
方式3:若第一操作记录包括该目标key,且最晚操作记录中的操作标识不是Delete,最晚操作记录中目标key对应的value为最终结果。则将最晚操作记录中目标key对应的value作为恢复时刻的value。比如,对于上述表1,假设目标key为user3,最晚操作记录为编号为7的操作记录,该操作记录中的操作标识为Update,则恢复时刻的数据为:名称:D。
方式4:若第一操作记录包括该目标key,且最晚操作记录中的操作标识不是Delete,且所有包括该目标key的操作记录中目标key对应的value均表示增量数据。则所有包括该目标key的操作记录中的目标key对应的value相加后作为恢复时刻的增量数据,对增量数据和第一副本数据中该目标key对应的value相加,得到的结果作为恢复时刻的value。比如,对于上述表1,假设目标key为user2,包含ueser2的操作记录有2条,分别为编号为4和5的操作记录,编号为5的操作记录(最晚操作记录)中的操作标识为Update,编号4和5的操作记录中的value均标识增量数据,则恢复时刻的增量数据为编号为4和5的操作记录的value之和:+3000,假设第一副本数据中user2的value为1000,则恢复时刻的value为4000=3000+1000。
方式5:若第一操作记录包括该目标key,且最晚操作记录中的操作标识不是Delete,最早操作记录中的操作标识为Insert或Update,最早操作记录中该目标key对应的value为最终结果,最早操作记录之后的操作记录中目标key对应的value均表示增量数据。其中,最早操作记录为第一操作记录中,包括该目标key、包含的该目标key对应的value表示最终结果、同时操作时刻最早的操作记录。则最早操作记录和其之后的操作记录中目标key对应的value相加后作为恢复时刻的value。比如,对于上述表1,假设目标key为user1,包含ueser1的操作记录有3条,分别为编号为1、2和3的操作记录,编号为1的操作记录(最早操作记录)中的操作标识为Insert,编号为3的操作记录(最晚操作记录)中的操作标识为Update,编号为2和编号3中目标key对应的value均表示增量数据,则恢复时刻的value为编号为1、2、3的操作记录中value之和:10300。
然后,在所有的value分别作为目标key处理完成后,得到的所有恢复时刻的value作为恢复数据。
本方案中,用户无需设置新表名,直接将源数据表的恢复数据直接恢复到和之前对接用户的源数据表,无需将应用程序重定向到新的数据表,避免用户对应用程序的修改,提高用户体验。
需要注意的是,本发明实施提供的方法需要保持与用户对接的第一源数据表的第一表名不变,而对于用户来说,只有第一表名是用户可以感知到的,第一表名下的第一源数据表为用户访问的表,可以认为是在线业务表,而用户无法访问的表可以认为是离线业务表。基于此,本发明实施例提出了两种实现保持第一表名不变的情况下实现第一源数据表的在线回滚的方法,也即实现步骤350的两种实现方式。下面对两种可行的实现方式进行说明。
实现方式1:直接对第一表名下的在线业务表(当前的第一源数据表)中的数据进行更新,实现原地回滚。
实现方式2:在内部新增一个离线业务表,即一个新表,在离线业务表上实现数据恢复,然后,交换表名,将离线业务表更改为在线业务表(当前的第一源数据表),实现对第一表名下的第一源数据表的更新。
接下来,对本发明实施例中示出了步骤305的实现方式1进行详细说明。
如图4所示,在上述图3所示实施例的基础上,本发明实施例中提供了步骤350的实现方式1的具体流程,步骤350,具体可以包括如下步骤:
步骤3511、确定第一表名对应的当前的第一源数据表中的当前数据。
需要说明的是,第一源数据表存储key的最新的value。因此,当前数据可以理解为第一表名下最新的业务数据。
步骤3512、确定恢复数据。
具体可通过如下3种实现方式确定恢复数据。
实现方式1,可以创建第一操作记录的临时索引树,基于临时索引树和第一副本中的第一副本数据中的第一索引信息进行检索,得到恢复数据。
下面结合图5对该实现方式进行详细说明,图7为本发明实施例提供的步骤3512的流程示意图一。如图5所示,步骤3512,具体可以包括如下步骤:
步骤35121、确定第一操作记录对应的临时索引树。
可选地,可以对第一操作记录中相同的key的操作记录进行合并,得到合并后的日志数据;基于合并后的日志数据创建临时索引树。这里,临时索引树可以检索到合并后的日志数据中的key-value。其中,合并后的日志数据包括若干条操作记录(为了便于描述和区别,称为合并后操作记录),操作记录参见上文,不再赘述。
需要说明的是,由于数据是变化的,涉及到增加、删除和修改等操作,考虑只有先增加数据才有可能被修改或删除,因此根据操作时刻对相同的key的操作记录进行处理,得到合并后的日志数据。
假设目标key(第一操作记录中的任一key)具有N(大于等于2)个操作记录,具体可通过如下3种方式确定目标key的合并后操作记录中的操作标识。
方式1:N个操作记录中最早出现的操作标识为Insert,最后出现的操作标识不是Delete,则合并后操作记录中的操作标识为Insert。
方式2:N个操作记录中最早出现的操作标识为Update,则说明该目标key之前就存在,则合并后操作记录中的操作标识为Update。
方式3,N个操作记录中最后出现的操作标识是Delete,则合并后操作记录中的操作标识为Delete。
进一步的,具体可通过如下3种方式确定目标key的合并后操作记录中的value。
方式1:若N个操作记录中的value均表示增量,则合并后的操作记录中的value为N个操作记录中中的value之和。
方式2:若N个操作记录中的value均表示最终结果,则合并后的操作记录中的value为N个操作记录中最晚出现的value。
方式3:若N个操作记录中的value中存在表示最终结果的value和表示增量数据的value,则合并后操作记录中的value为N个操作记录中最早出现的表示最终结果的value和之后出现的各value之和。
对于上述所述表1,合并后的日志数据可以通过表格表示,一行表示一个操作记录,具体如下表2所示。
操作记录编号 key value 操作标识
1 user1 存款:10300 Insert
2 user2 存款:+3000 Update
3 user3 名称:B Update
表2
这里,对于user1,考虑到最早出现的操作标识为Insert,最后出现的操作标识为Update,则合并后操作记录中的操作标识为Insert,合并后操作记录中的value为10300,为最早出现的表示最终结果的value:10000,加上之后出现的2个value:+100、+200。对于user2,考虑到最早出现的操作标识为Update,最后出现的操作标识为Update,则合并后操作记录中的操作标识为Update,合并后操作记录中的value为:+3000,为2个value:+1000、+2000之和;对于user3,考虑到最早出现的操作标识为Update,最后出现的操作标识为Update,则则合并后操作记录中的操作标识为Update,合并后操作记录中的value为B。
图6为本发明实施例提供的临时索引树的示意图。如图6所示,临时索引树包括跟节点、子节点和叶子节点,叶子节点存储数据key-value,跟节点和叶子节点存储主键key的索引,在需要检索key=10的value时,以10作为索引项,检索临时索引树,没有检索到数据。需要指出,这里,图8仅仅作为示例,并不构成具体限定,比如,临时索引树可以为二级索引,对应的,临时索引树包括多个索引树,索引树中的叶子节点可以存储主键key和索引,也可以存储主键key的索引和key-value;再比如,临时索引树是根据key的哈希值构建的,对应的,跟节点和子节点可以为哈希值,或者,跟节点和子节点可以为哈希值中的一个字符。值得注意的是,在实际应用中,通过临时索引树一般可以检索到数据的存储地址,进一步的,基于存储地址读取数据;当然在一些可能的实现方式,若数据的存储空间较小,比如,小于存储地址,则可以通过临时索引树直接存储数据,无需基于存储地址读取数据。
步骤35122、基于第一副本中的第一索引树和临时索引树,确定恢复数据;其中,第一索引树用于检索第一副本数据。
需要说明的是,第一副本中的第一副本数据包括第一索引信息,第一索引信息用于检索第一源数据表在第一副本的创建时刻下的数据,即第一副本数据。从当前的发展来看,目前主流的索引信息为索引树,本发明实施例主要围绕索引树来说明本发明实施例提供的方法,但考虑到索引信息的多样性以及未来可能出现更多新的索引的方法,本发明并不限制索引信息的具体类型。示例地,第一索引信息为第一索引树,图6为本发明实施例提供的第一索引树的示意图。如图7所示,第一索引树包括跟节点、子节点和叶子节点,叶子节点存储数据key-value,跟节点和叶子节点存储主键key的索引,在需要检索key=10的value时,以10作为索引项,检索第一索引树,得到key=10的value=xcb。需要指出,这里,图4仅仅作为示例,并不构成具体限定,比如,第一索引树可以为二级索引,对应的,第一索引树包括多个索引树,索引树中的叶子节点可以存储主键key和索引,也可以存储主键key的索引和数据key-value;再比如,第一索引树是根据key的哈希值构建的,对应的,跟节点和子节点可以为哈希值,或者,跟节点和子节点可以为哈希值中的一个字符。值得注意的是,在实际应用中,通过第一索引树一般可以检索到数据的存储地址,进一步的,基于存储地址读取数据;对应的,第一副本包括第一索引树和第一副本数据;当然在一些可能的实现方式,若数据的存储空间较小,比如,小于存储地址,则可以通过第一索引树直接存储数据,无需基于存储地址读取数据;对应的,第一副本可以仅仅包括第一索引树,无需包括第一副本数据。
根据一种可行的实现方式,具体可通过如下实现方式确定恢复数据。
获取所有的key;对于目标key(所有key中的任一),通过第一索引树和临时索引树进行检索,确定目标key在恢复时刻的数据;将所有的key分别作为目标数据标识key处理,在完成所有的key的检索后,将所有key和其在恢复时刻的数据作为恢复数据。
在检索过程中,若临时索引树没有检索到value,且第一操作记录中存在目标key,则说明目标key的value被删除了,在恢复时刻的没有该目标key和其对应value;若临时索引树检索到value,判断临时索引树的检索到的value是否表示最终结果,如果是,则将临时索引树的检索到value作为目标key在恢复时刻的value,如果否,则说明临时索引树检索到的value表示增量,则基于临时索引树检索到的value对第一索引树检索到的value进行相加处理,得到目标key在恢复时刻的数据。在实际应用中,首先检索临时索引树,若检索到value,在该value表示最终结果,则将该value作为目标key在恢复时刻的value;在该数据表示增量,则检索第一索引树,确定检索出的value,并基于临时索引树检索出的value对第一检索树检索出的value进行求和处理,得到目标key在恢复时刻的value。若没有检索到value,同时第一操作记录中是否存在目标key,则在恢复时刻的没有该key和其对应value。
下面结合图6和图7说明如何确定key在恢复时刻的value。
首先确定所有的key,key=1、10、11、15、20、25、28、30、35、45。
对于key=1,图7示出的第一索引树检索出的value=abc,图6示出的临时索引树检索出的value=ccc,由于临时索引树的value是最新的数据,value=ccc相对于value=abc来说是更新Update,是最新的数据,为key=1在恢复时刻的value。
对于key=10、15、28、30、35、45,图6示出的临时索引树中无法检索到value,且第一操作记录中也不存在key=10、15、28、30、35、45,此时,将图6检索出的value作为恢复时间的value。
对于key=11,图7示出的第一索引树没有检索到数据,图6示出的临时索引树检索出的value=aaa,由于临时索引树的value是最新的数据,value=aaa来说是新增Insert,是最新的数据,为key=11在恢复时刻的value。
对于key=20,图7示出的第一索引树检索出的value=xsb,图6示出的临时索引树检索出的value=iii,由于临时索引树的value是最新的数据,value=iii相对于value=xsb来说是更新Update,是最新的数据,为key=20在恢复时刻的value。
对于key=25,图7示出的第一索引树检索出的value=asc,图6示出的临时索引树检索出的value=xxx,由于临时索引树的value是最新的数据,value=xxx相对于value=asc来说是更新Update,是最新的数据,为key=25在恢复时刻的value。
则基于图7示出的临时索引树和图6示出的第一索引树检索后,最后得到的恢复数据如下表3所示:
key 1 10 11 15 20 25 28 30 35 45
value ccc xcb aaa cas iii xxx asb xxx aaa qaq
表3
实现方式2,可以按照第一操作记录中操作记录所记录的操作时刻的早晚,选择操作记录,将第一操作记录中的每个操作记录顺次写入第一副本数据。
具体地,按照第一操作记录中操作记录所记录的操作时刻的早晚,选择操作记录,基于选择操作记录处理第一副本中的第一副本数据,得到更新后的第一副本数据;然后,按照操作时刻的顺序,选择没有被选择过的操作记录,基于选择的操作记录处理更新后的第一副本数据,如此循环,在处理完第一操作记录中的所有的操作记录后,最终得到的更新后的第一副本数据为恢复数据。
其中,选择的操作记录处理副本数据具体表现为基于选择的操作记录,删除第二表名下的数据表中的key-value、插入key-value,或者更新key-value中的value。比如,选择的操作记录中的操作标识为Delete,则删除副本数据中选择的操作记录中的key-value;选择的操作记录中的操作标识为Insert,则在副本数据中插入选择操作记录中的key-value;若选择的操作记录中的操作标识为Update,则将副本数据中选择的操作记录中的key所对应的value,更新为选择的操作记录中该key对应的value。
实现方式3,可以对第一操作记录中的相同key的操作记录进行合并,得到合并后的日志数据;基于合并后的日志数据对第一副本数据进行处理,得到恢复数据。
合并后的日志数据的详细内容参见上文,不再赘述。由于合并后操作记录是基于操作时刻处理后得到的最终的结果,因此无需关系操作时刻;则在确定恢复数据时,从合并后的日志数据中选择一个合并后操作记录,基于选择的合并后操作记录处理第一副本中的第一副本数据,得到更新后的第一副本数据;然后,选择一个没有被选择过的合并后操作记录,基于选择的合并后操作记录处理更新后的第一副本数据,如此循环,在处理完合并后的日志数据所有的合并后操作记录后,最终得到的更新后的第一副本数据为恢复数据。合并后操作记录处理副本数据的详细内容参见基于选择的操作记录处理副本数据,不再赘述。
步骤3513、确定恢复数据和当前数据之间的差异数据。
其中,差异数据指示了恢复数据和当前数据之间的差异,以操作记录的形式表现,可以包括若干条操作记录(为了便于描述和区别,称为差异操作记录)。
举例来说,对于目标key(恢复数据和当前数据所有的key中的任一),若该目标key在当前数据和恢复数据中的value相同,则不存在差异;若目标key在当前数据和恢复数据中的value不同,则存在差异,增加一个差异操作记录,该差异操作记录包括目标key、其在恢复数据中的value和操作标识Update。若该key在当前数据中存在value,在恢复数据中不存在value,则增加一个差异操作记录,该差异操作记录包括目标key、操作标识Delete;若该目标key在当前数据中不存在value,在恢复数据中存在value,则增加一个差异操作记录,该操作记录包括目标key、其在恢复数据中的value和操作标识Insert。然后,在恢复数据和当前数据所有的key分别作为目标key处理完成后,将得到的所有差异操作记录作为差异数据。
举例来说,假设当前的第一源数据表中的当前数据如下表4所示:
key 1 10 12 15 20 25 28 30 35 45
value ccc xcb xxx ccc iii xxx asb xxx aaa qaq
表4
表4和上述表3比较,得到的差异数据包括3条操作记录,则3条操作记录通过表格标识,每行表示一个操作记录,具体如下表5所示:
表5
步骤3514、将差异数据写入第一表名对应的当前的第一源数据表。
具体地,将差异数据写入当前的第一源数据表的索引树,从而通过更新后的第一源数据表中的索引树检索到第一源数据表在恢复时刻的恢复数据。
在实际写入数据的时候,需要在数据中加入写入时刻,因此,上述步骤3514具体包括如下内容:
在差异数据中加上写入时刻(为了便于描述和区别,称为第一写入时刻),将加入第一写入时刻的差异数据写入第一源数据表中,更新第一表名对应的第一源数据表。
在实际应用中,第一写入时刻指示了差异数据开始写入的时刻,也即恢复时刻,通常为当前时刻。具体来说,差异数据中的每条操作记录加上的第一写入时刻是相同的。举例来说,在上述表5中加入第一写入时刻,假设第一写入时刻ver为200,得到的表6如下所示:
操作记录编号 操作标识 key valve ver
1 Delete 12 200
2 Insert 11 aaa 200
3 Update 15 cas 200
表6
对应的,在写入表6示出的数据时。
可选地,以key和ver构建不同的叶子节点;则对于操作记录1,删除第一源数据表中第一索引树中的key=12的叶子节点;对于操作记录2,可以在第一源数据表中的第一索引树下新增一个叶子节点,该节点存储key=12、ver=200、value=aaa;对于操作记录3,可以在第一源数据表中的第一索引树下新增一个叶子节点,该节点存储key=15、ver=200、value=cas,不同ver存在在不同的叶子节点内。
可选地,key建立有二级索引树,二级索引树以ver构建,示例地,二级索引树可以为字典树,字典树中的子节点为ver中的一个字符,字典树中连接在一起的多个子节点形成的路径表示ver,不同的路径表示不同的ver,通常路径中位于末位的子节点存储该路径表示的ver下的value,下面以字典树为例进行描述;则对于操作记录1,删除第一源数据表中第一索引树中的key=12的叶子节点;对于操作记录2,可以在第一源数据表中的第一索引树下新增一个叶子节点,该节点存储key=12,并建立key=12的字典树,若字典树中存在表示ver=200的路径,则在字典树中表示ver=200的路径中位于末位的子节点中存储value=aaa,否则,在字典树中新增子节点,得到表示ver=200的路径,在该路径的末位的子节点存储value=aaa;这里,key=12、ver=200作为索引,可以检索到value=aaa;对于操作记录3,若key=15的字典树中存在表示ver=200的路径,将value=cas存储在该路径中位于末位的子节点中,否则,新增子节点,得到表示ver=200的路径,该在路径的末位的子节点存储value=cas。
本发明实施例基于恢复时刻的第一源数据表和当前的第一源数据表的差异,更新当前的第一源数据表原地恢复到恢复时刻的第一源数据表,用户无需设置新表名,无需将应用程序重定向到新的数据表,避免用户对应用程序的修改,提高用户体验。
进一步地,在差异数据写入当前的第一源数据表的过程中,支持最新的业务数据的写入当前的第一源数据表。考虑到在实际写入数据的时候,需要在数据中加入写入时刻,因此,本发明实施例通过不同的写入时刻区别数据的新旧,对应的,在差异数据中加入写入时刻(指示恢复时刻)后写入当前的第一源数据表,在写入的过程中,若需要写入最新的业务数据,则需要在最新的业务数据中加上写入时刻(晚于恢复时刻)后写到第一源数据表中,写入时刻越晚则说明数据越新。
进一步的,如图6所示,本发明实施例中,在差异数据写入第一表名对应的当前的第一源数据表的过程中,至少还包括如下步骤:
步骤3515、将第一表名下的待写入的业务数据写入当前的第一源数据表中;其中,差异数据和业务数据写入当前的第一源数据表的时刻不同,以区别恢复数据和新写入的业务数据。
其中,待写入的业务数据包括操作标识、key,当操作标识为Update或Insert,该业务数据还包括key对应的value。这里,业务数据为客户端发送的。在实际应用中,若客户端发送的业务数据的数据量较大,同时其他客户端的业务数据的数据量也较大,此时,会先缓存客户端发送的业务数据,随后将业务数据写入第一源数据表。待写入的业务数据可以是最新的业务数据。
具体地,在待写入的业务数据中加上第二写入时刻,将加入第二写入时刻的业务数据写入当前的第一源数据表中,更新第一表名对应的当前的第一源数据表。在实际应用中,第二写入时刻指示了业务数据开始写入的时刻,通常为当前时刻。由于差异数据和业务数据的写入时刻有先后顺序,因此基于写入时刻的不同,可以区别恢复数据和最新的业务数据。后续,在用户访问第一表名下的第一源数据表时,若一个key下存在多个value,选择写入时刻最晚的value作为最新的数据反馈给用户即可。若一个key下存在一个value,则该value为最新的数据反馈给用户即可。
示例地,业务数据中的操作信息为Update、key=15、value=zzz、ver=201,则在表6示出的操作记录写入表4示出的当前数据的第一源数据表的过程中,增加key=15、value=zzz、ver=201这一信息,在表6示出的操作记录完成写入后,可以查询到的数据如下表7所示:
key 1 10 12 15.200 15.201 25 28 30 35 45
value ccc xcb xxx ccc iii xxx asb xxx aaa qaq
表7
具体地,由于201大于200,说明201下的value为最新的value,用户最终看到的数据如下8表所示:
key 1 10 12 15 25 28 30 35 45
value ccc xcb xxx iii xxx asb xxx aaa qaq
表8
需要说明的是,第一源数据表会不断覆盖老数据,只保留新数据,因此,若一个key下有不同写入时刻的value,在后续需要删除该key,则该key下不同写入时刻的value均删除,若后续需要更新该key的value,则删除不同写入时刻的value,写入更新后的value。比如,表7中key=15下有2个写入时刻的value,为了便于描述,可以表示为200-value和201-value,若后续,key=15的value需要更新为ccc,此时,删除200-value和201-value,得到key=15的value=ccc。
需要指出,第一源数据表在写入业务数据时均会加上写入时刻,因此,在恢复数据写入第一源数据表的过程中,恢复数据和新写入的业务数据可以通过写入时刻实现区别,具体地,恢复数据中的每个操作记录中加入的写入时刻相同均表示恢复时刻,且恢复数据的写入时刻早于新的业务数据的写入时刻,从而实现区别。值得注意的是,写入时刻可以为实际的时刻,也可以为一个逻辑时刻,本发明实施例对此不做具体限定,但是无论是什么时刻,均需要随着时间的流逝需要不断的递增。
进一步的,如图6所示,本发明实施例中,在差异数据写入第一源数据表后,至少还包括如下步骤:
步骤3516、删除临时索引树。
图8为图4示出的方案的场景示意图。如图8所示,假设计算设备集群102以10min为间隔不断的创建第一表名对应的第一源数据表的副本,得到副本1、副本2;假设用户对第一表名的第一源数据表在时间点12:15:00的数据进行了误操作,用户想要恢复在时间点12:15:00的第一源数据表,此时,终端设备101可以生成一个数据恢复请求,将该数据恢复请求上传至计算设备集群102。其中,该请求包括恢复时刻和第一表名。计算设备集群102将恢复时刻转换为内部时间戳,从而理解用户指定的恢复时刻;然后,查找该内部时间戳之前的最近的第一源数据表名下的副本1(第一副本),以及,12:10:00至12:15:00这一时段的操作记录(第一操作记录);这里,副本1(第一副本)包括第一索引树和第一副本数据;接着,通过构建12:10:00至12:15:00这一时段的第一操作记录的临时索引树,结合副本1(第一副本)中的第一索引树确定恢复数据,然后,确定所述第一表名对应的当前的第一源数据表中的当前数据和恢复数据之间的差异数据;之后,将差异数据写入到第一表名下的当前的第一源数据表,在将差异数据写入当前的第一源数据表的过程,可以写入最新的业务数据。
综上,对于实现方式1,本发明实施例通过基于恢复时刻的第一源数据表和当前的第一源数据表的差异,更新当前的第一源数据表原地恢复到恢复时刻,用户无需设置新表名,无需将应用程序重定向到新的数据表,避免用户对应用程序的修改,提高用户体验。进一步地,在原地恢复的过程中,写入数据的恢复时刻,另外,若有新数据需要写入源数据表时,写入新数据的写入时刻,从而区别恢复时刻的数据和新写入的数据。
如图9所示,在上述图3所示实施例的基础上,本发明实施例中提供了步骤350的实现方式2的具体流程,如图9所示,步骤350具体可以包括如下步骤:
步骤3521、基于所述第一预写日志中的第一操作记录和所述第一副本,确定第二表名下的数据表;其中,数据表中的数据为恢复数据。
可选地,具体可通过如下两种实现方式确定第二表名的数据表。
实现方式1:将第一副本中的第一副本数据写入第二表名的数据表中;将第一操作记录写入第二表名的数据表,得到最终的第二表名的数据表。
在实际应用中,第二表名的数据表具有存储空间,将副本数据存储在第二表名的数据表的存储空间,即可认为将第一副本的副本数据写入第二表名的数据表中。
实现方式2:将第一副本中的第一副本数据写入第二表名的数据表中;将第一操作记录合并后,得到合并后的日志数据,将合并后的日志数据写入第二表名的数据表,得到最终的第二表名的数据表。
在具体实现时,可以对第一操作记录中相同key的操作记录进行合并,得到合并后的日志数据,将合并后的日志数据写入第二表名的数据表中。这里,合并后的日志数据参见上文步骤35121中的关于合并后的日志数据的描述;将合并后的日志数据写入第二表名的数据表的详细内容参见上文对步骤3512中的实现方式3的描述,区别仅仅在于第一副本数据替换为第二表名下的数据表的索引树,将第一操作记录替换为第二操作记录。
实现方式3:确定第一副本中的全量数据经过第一操作记录处理后的恢复数据,将恢复数据写入第二表名的数据表中。
在一个例子中,基于参加上文步骤3512的描述的方式确定恢复数据,不再赘述。
在实现方式3中,将恢复数据写入第二表名的数据表中,需要创建恢复数据的索引树。
值得注意的是,第二表名的数据表包括索引树,索引树可以检索到恢复数据。
步骤3525、将第二表名替换为第一表名,以使第二表名的数据表作为第一表名对应的当前的源数据表。
这里,将第二表名替换为第一表名,之后,第二表名下的数据表作为第一表名对应的当前的源数据表,记录最新数据。
本发明实施例通过将恢复时刻的第一源数据表的数据写入到新的表名的数据表中,然后交换表名,使得新的数据表作为当前的第一源数据表对接用户,用户无需设置新表名,无需将应用程序重定向到新的数据表,避免用户对应用程序的修改,提高用户体验。
在图3所示的步骤310至步骤350的基础上、图9所示步骤3521的基础上,如图9所示,本发明实施例中,在步骤3525之前,至少还包括如下步骤:
步骤3522、确定当前的第一源数据表为只读状态。
这里,设置第一源数据表为只读状态使得第一表名下的第一源数据表不能写入数据,只能读取数据。
步骤3523、确定第一表名下的第二预写日志;其中,第二预写日志包括恢复时刻到当前时刻这一时段的针对恢复时刻的第一源数据表的第二操作记录。
这里,第二预写日志记录了恢复时刻到当前时刻针对恢复时刻的第一源数据表的第二操作记录。第二操作记录包括若干个操作记录,关于操作记录的详细内容参见上文对步骤340描述的操作记录,不再赘述。
步骤3524、将第二预写日志中的第二操作记录写入第二表名的数据表中。
这里,将第二预写日志指示的第二操作记录写入第二表名的数据表中,使得写入第二操作记录的数据表和第一表名下的当前的第一源数据表保持一致。
将第二操作记录写入第二表名下的数据表中,可选地,可以按照第二操作记录中操作记录所记录的操作时刻的早晚,将第二操作记录中的每个操作记录顺次写入第二表名的数据表,具体地,可以基于操作记录删除第二表名下的数据表中的key-value、插入key-value,或者更新key-value中的value。详细内容参见上文对步骤3512中的实现方式2的描述,区别仅仅在于第一副本数据替换为第二表名下的数据表,将第一操作记录替换为第二操作记录。可选地,可以对第二操作记录中相同key的操作记录进行合并,得到合并后的日志数据,将合并后的日志数据写入第二表名的数据表中。这里,第二操作记录的合并的方式参见上文步骤35121中的对合并的日志数据的描述;将合并后的日志数据写入第二表名的数据表的详细内容参见上文对步骤3512中的实现方式3的描述,区别仅仅在于第一副本数据替换为第二表名下的数据表的索引树,将第一操作记录替换为第二操作记录。
值得注意的是,写入第二操作记录的第二表名的数据表包括索引树,该索引树可以检索到当前时刻的第一源数据表中的所有数据。
进一步的,如图9所示,本发明实施例中,在交换表名后,至少还包括如下步骤:
步骤3526、删除第二表名对应的标记为只读状态的当前的第一源数据表。
图10为图9示出的方案的场景示意图。如图10所示,假设计算设备集群102以10min为间隔不断的创建第一表名对应的第一源数据表的副本,得到副本1、副本2;假设用户对第一表名的第一源数据表在时间点12:15:00的数据进行了误操作,用户想要恢复在时间点12:15:00的第一源数据表,此时,终端设备101可以生成一个数据恢复请求,将该数据恢复请求上传至计算设备集群102。其中,该请求包括恢复时刻和第一表名。计算设备集群102将恢复时刻转换为内部时间戳,从而理解用户指定的恢复时刻;然后,查找该内部时间戳之前的最近的第一源数据表名下的副本1(第一副本),以及,12:10:00至12:15:00这一时段的操作记录(第一操作记录);这里,副本1(第一副本)包括第一索引树和第一副本数据;接着,将副本1(第一副本)中的第一索引树和第一副本数据写入第二表名的数据表,进一步,将12:10:00至12:15:00这一时段的第一操作记录写入第二表名的数据表;暂停当前的第一源数据表的在线读写,将最新日志(第二预写日志)中的操作记录写入第二表名的数据表;最后,将第二表名更改为第一表名,删除之前的源数据表,将当前的源数据表变更为第二表名的数据表。
综上,对于实现方式2,本发明实施例通过将恢复时刻的第一源数据表的数据写入到新的表名的数据表中,然后交换表名,使得新的数据表作为当前的第一源数据表对接用户,用户无需设置新表名,无需将应用程序重定向到新的数据表,避免用户对应用程序的修改,提高用户体验。另外,在交换表名之前,可以中断当前的第一源数据表的写操作,仅仅可以读出数据,然后,将恢复时刻至当前这一时段的操作记录写入到新的数据表中,使得新的数据表和当前的第一源数据表相同,之后,交换表名,确保表名交换后不会影响用户的正常使用。
【装置实施例】
本发明还提供一种非关系型数据库的数据恢复装置,所述非关系型数据库包括第一表名对应的第一源数据表,所述第一源数据表用于记录客户端发送的业务数据,如图11所示,包括:
副本创建模块1101,用于创建所述第一表名对应的第一源数据表的副本;
请求获取模块1102,用于获取客户端发送的数据恢复请求;其中,所述数据恢复请求包括恢复时刻和所述第一表名;
响应模块1103,用于响应所述数据恢复请求,从已经创建的第一源数据表对应的副本中确定第一副本;其中,所述第一副本的创建时刻早于所述恢复时刻;
日志确定模块1104,用于确定第一预写日志;其中,所述第一预写日志包括所述第一副本的创建时刻至所述恢复时刻这一时段的针对所述第一副本表示的第一源数据表的第一操作记录;
更新模块1105,用于基于所述第一预写日志中的第一操作记录和所述第一副本,将所述恢复时刻的恢复数据还原到所述第一表名对应的当前的第一源数据表;其中,所述恢复数据为所述第一副本中的第一副本数据经过所述第一操作记录处理后的数据,所述第一副本数据为所述第一副本的创建时刻下的第一源数据表中的数据。
其中,副本创建模块1101、请求获取模块1102、响应模块1103、日志确定模块1104、更新模块1105均可以通过软件实现,或者可以通过硬件实现。示例性的,接下来以副本创建模块1101为例,介绍副本创建模块1101的实现方式。类似的,请求获取模块1102、响应模块1103、日志确定模块1104、更新模块1105的实现方式可以参考副本创建模块1101的实现方式。
模块作为软件功能单元的一种举例,副本创建模块1101可以包括运行在计算实例上的代码。其中,计算实例可以包括物理主机(计算设备)、虚拟机、容器中的至少一种。进一步地,上述计算实例可以是一台或者多台。例如,A模块可以包括运行在多个主机/虚拟机/容器上的代码。需要说明的是,用于运行该代码的多个主机/虚拟机/容器可以分布在相同的区域(region)中,也可以分布在不同的region中。进一步地,用于运行该代码的多个主机/虚拟机/容器可以分布在相同的可用区(availability zone,AZ)中,也可以分布在不同的AZ中,每个AZ包括一个数据中心或多个地理位置相近的数据中心。其中,通常一个region可以包括多个AZ。
同样,用于运行该代码的多个主机/虚拟机/容器可以分布在同一个虚拟私有云(virtual private cloud,VPC)中,也可以分布在多个VPC中。其中,通常一个VPC设置在一个region内,同一region内两个VPC之间,以及不同region的VPC之间跨区通信需在每个VPC内设置通信网关,经通信网关实现VPC之间的互连。
模块作为硬件功能单元的一种举例,副本创建模块1101可以包括至少一个计算设备,如服务器等。或者,副本创建模块1101也可以是利用专用集成电路(application-specific integrated circuit,ASIC)实现、或可编程逻辑器件(programmable logicdevice,PLD)实现的设备等。其中,上述PLD可以是复杂程序逻辑器件(complexprogrammable logical device,CPLD)、现场可编程门阵列(field-programmable gatearray,FPGA)、通用阵列逻辑(generic array logic,GAL)或其任意组合实现。
副本创建模块1101包括的多个计算设备可以分布在相同的region中,也可以分布在不同的region中。副本创建模块1101包括的多个计算设备可以分布在相同的AZ中,也可以分布在不同的AZ中。同样,副本创建模块1101包括的多个计算设备可以分布在同一个VPC中,也可以分布在多个VPC中。其中,所述多个计算设备可以是服务器、ASIC、PLD、CPLD、FPGA和GAL等计算设备的任意组合。
需要说明的是,在其他实施例中,副本创建模块1101可以用于执行非关系型数据库的数据恢复方法中的任意步骤,请求获取模块1102、响应模块1103、日志确定模块1104、更新模块1105类同,均可以用于执行非关系型数据库的数据恢复方法中的任意步骤,副本创建模块1101、请求获取模块1102、响应模块1103、日志确定模块1104、更新模块1105负责实现的步骤可根据需要指定,通过副本创建模块1101、请求获取模块1102、响应模块1103、日志确定模块1104、更新模块1105分别实现非关系型数据库的数据恢复方法中不同的步骤来实现数据恢复装置的全部功能。
【计算设备/计算设备集群】
本发明还提供一种计算设备100。如图12所示,计算设备100包括:总线102、处理器104、存储器106和通信接口108。处理器104、存储器106和通信接口108之间通过总线102通信。计算设备100可以是服务器或终端设备。应理解,本发明不限定计算设备100中的处理器、存储器的个数。
总线102可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图12中仅用一条线表示,但并不表示仅有一根总线或一种类型的总线。总线102可包括在计算设备100各个部件(例如,存储器106、处理器104、通信接口108)之间传送信息的通路。
处理器104可以是中央处理单元(Central Processing Unit,CPU),还可以是其它通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
存储器106可以是易失性存储器(volatile memory)或非易失性存储器(non-volatile memory),或可包括易失性存储器(volatile memory)或非易失性存储器(non-volatile memory)两者。其中,非易失性存储器(non-volatile memory)可以是只读存储器(read-only memory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasable PROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)、快闪存储器,机械硬盘(hard disk drive,HDD)或固态硬盘(solid state drive,SSD)或者本领域熟知的任何其它形式的存储器。易失性存储器(volatile memory)可以是随机存取存储器(random access memory,RAM),其用作外部高速缓存,或者本领域熟知的任何其它形式的存储器。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(static RAM,SRAM)、动态随机存取存储器(DRAM)、同步动态随机存取存储器(synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(double data dateSDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(directrambus RAM,DR RAM)。
存储器106中存储有可执行的程序代码,处理器104执行该可执行的程序代码以分别实现前述副本创建模块1101、请求获取模块1102、响应模块1103、日志确定模块1104、更新模块1105的功能,从而实现非关系型数据库的数据恢复方法。也即,存储器106上存有用于执行非关系型数据库的数据恢复方法的指令。
通信接口108使用例如但不限于网络接口卡、收发器一类的收发模块,来实现计算设备100与其他设备或通信网络之间的通信。
当然,为了简化,图12中仅示出了该计算设备100中与本发明有关的组件中的一些,省略了诸如输入/输出接口等等的组件。除此之外,根据具体应用情况,计算设备100还可以包括任何其他适当的组件。本领域技术人员可以理解,图12仅仅是计算设备100的示例,并不构成对计算设备100的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述计算设备100还可以包括输入设备、输出设备等。示例地,该输入设备可以是麦克风阵列、还可以包括例如键盘、鼠标等等。示例地,该输出设备可以向外部输出各种信息,可以包括例如显示器、扬声器、打印机、以及通信网络及其所连接的远程输出设备等等。
本发明实施例还提供了一种计算设备集群102。该计算设备集群102包括至少一台计算设备。该计算设备可以是服务器,例如是中心服务器、边缘服务器,或者是本地数据中心中的本地服务器。在一些实施例中,计算设备也可以是台式机、笔记本电脑或者智能手机等终端设备。
如图13所示,所述计算设备集群包括至少一个计算设备100。计算设备集群中的一个或多个计算设备100中的存储器106中可以存有相同的用于执行非关系型数据库的数据恢复方法的指令。
在一些可能的实现方式中,该计算设备集群中的一个或多个计算设备100的存储器106中也可以分别存有用于执行非关系型数据库的数据恢复方法的部分指令。换言之,一个或多个计算设备100的组合可以共同执行用于执行非关系型数据库的数据恢复方法的指令。
需要说明的是,计算设备集群中的不同的计算设备100中的存储器106可以存储不同的指令,分别用于执行数据恢复装置的部分功能。也即,不同的计算设备100中的存储器106存储的指令可以实现副本创建模块1101、请求获取模块1102、响应模块1103、日志确定模块1104、更新模块1105中的一个或多个模块的功能。
在一些可能的实现方式中,计算设备集群中的一个或多个计算设备可以通过网络连接。其中,所述网络参见上文对终端设备101与计算设备集群102之间的网络描述,示例地,可以是广域网或局域网等等。
图14a示出了一种可能的实现方式。如图14a所示,计算设备集群102包括计算设备100A和计算设备100B,两个计算设备100A和100B之间通过网络进行连接。具体地,通过各个计算设备中的通信接口与所述网络进行连接。在这一类可能的实现方式中,计算设备100A中的存储器106中存有执行请求获取模块1102的功能的指令。同时,计算设备100B中的存储器106中存有执行副本创建模块1101、响应模块1103、日志确定模块1104、更新模块1105的功能的指令。
这里,计算设备A用于将数据恢复请求发送到计算设备B;计算设备B用于存储并管理源数据表。这里,管理可以理解为创建副本、创建源数据表、读取源数据表的索引树和数据、更新源数据表的索引树和数据。这里,计算设备100B的功能由一个计算设备100完成。
在具体实现本发明实施例提供的非关系型数据库的数据恢复方法时,第一表名对应的第一源数据表所在的计算设备100B创建第一源数据表、以及、第一源数据表的副本;进一步地,终端设备101可以将数据恢复请求发送到计算设备100A,计算设备100A解析数据恢复请求,得到第一表名,基于第一表名将数据恢复请求发送到第一表名对应的第一源数据表所在的计算设备100B,以使计算设备100B执行步骤303至步骤305。
综上,考虑到本发明提供的非关系型数据库的数据恢复方法中的数据恢复请求的转发这一功能可以单独放置,因此考虑将请求获取模块1102实现的功能交由计算设备100A执行。考虑到本发明提供的非关系型数据库的数据恢复方法中的源数据表、副本和针对源数据表的处理可以放置在同一个设备,因此考虑将副本创建模块1101、响应模块1103、日志确定模块1104、更新模块1105实现的功能交由存储源数据表和副本的计算设备100B执行。
应理解,计算设备100A的功能可以由一个计算设备100完成,也可以由多个计算设备100完成。
图14b示出了一种可能的实现方式。如图14b所示,计算设备集群102包括3个计算设备100A、100B、100C,3个计算设备100A、100B、100C之间通过网络进行连接。具体地,通过各个计算设备中的通信接口与所述网络进行连接。在这一类可能的实现方式中,计算设备100A中的存储器106中存有执行请求获取模块1102的功能的指令。同时,计算设备100B中存储有源数据表和源数据表的多个副本。同时,计算设备100C中的存储器106中存有执行副本创建模块1101、响应模块1103、日志确定模块1104、更新模块1105的功能的指令。
这里,计算设备100C用于管理计算设备100B中的源数据表,管理的详细内容参见上文计算设备B管理源数据表的描述,不再赘述。
这里,计算设备100B的功能由多个计算设备100实现,即源数据表和源数据表对应的副本存储在多个计算设备100中。即采用分布式存储的方式存储源数据表以及源数据表的副本,因此需要计算设备100C管理分布式存储的源数据表和源数据表的副本。
示例地,源数据表中的数据所在的计算设备100不同。
示例地,源数据表和源数据表的副本所在的计算设备100不同。
示例地,源数据表中的索引树和数据所在的计算设备100不同。
示例地,源数据表的多个副本和多个副本的索引树(用于检索副本)所在的计算设备100不同。
在具体实现本发明实施例提供的非关系型数据库的数据恢复方法时,计算设备100C可以控制第一表名对应的第一源数据表所在的计算设备100B创建第一源数据表,以及,创建第一源数据表的副本;进一步地,终端设备101可以将数据恢复请求发送到计算设备100A,计算设备100A解析数据恢复请求,得到第一表名,基于第一表名将数据恢复请求发送到管理第一表名的源数据表的计算设备100C,以使计算设备100C执行步骤303至步骤305。这里,在具体执行步骤305时,计算设备100C可以向其管理的计算设备100B下发指令,计算设备B执行指令,比如读出计算设备B存储的第一源数据表中的第一索引树,以及,副本中的第一预写日志和第一副本数据,从而对读出的第一索引树和第一副本数据进行处理,之后,将处理后的结果反馈给计算设备B,计算设备B更新第一源数据表。
综上,考虑到本发明提供的非关系型数据库的数据恢复方法中的数据恢复请求的转发这一功能可以单独放置,因此考虑将请求获取模块1102实现的功能交由计算设备100A执行。考虑到本发明提供的非关系型数据库的数据恢复方法中的源数据表、副本和针对源数据表的处理可以放置在不同设备,因此考虑将副本创建模块1101、响应模块1103、日志确定模块1104、更新模块1105实现的功能交由存储源数据表和副本的计算设备B之外的计算设备100C执行。
应理解,图14b中示出的计算设备100A的功能也可以由多个计算设备100完成。同样,计算设备100C的功能也可以由多个计算设备100完成。
数据查询和数据恢复类似,将上述数据恢复请求替换为数据查询请求皆可,不再赘述。
【计算机程序产品】
本发明实施例还提供了一种包含指令的计算机程序产品。所述计算机程序产品可以是包含指令的,能够运行在计算设备上或被储存在任何可用介质中的软件或程序产品。当所述计算机程序产品在至少一个计算设备上运行时,使得至少一个计算设备执行非关系型数据库的数据恢复方法。其中,所述计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本发明实施例操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如Java、C++等,还包括常规的过程式程序设计语言,诸如“C”语言或类似的程序设计语言。其中,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。计算机程序代码可以完全地在用户计算设备上执行、部分地在用户计算设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。
【计算机可读存储介质】
本发明实施例还提供了一种计算机可读存储介质。所述计算机可读存储介质包括指令,所述指令指示计算设备执行非关系型数据库的数据恢复方法。该计算机可读存储介质可以是计算设备能够存储的任何可用介质或者是包含一个或多个可用介质的数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘)等。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
以上结合具体实施例描述了本发明的基本原理,但是,需要指出的是,在本发明中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势、效果等是本发明的各个实施例必须具备的。另外,上述实施例的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本公开为必须采用上述具体的细节来实现。
本发明中涉及的器件、装置、设备、系统的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、系统。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。
还需要指出的是,在本发明的装置、设备和方法中,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本公开的等效方案。
为了例示和描述的目的已经给出了以上描述。此外,此描述不意图将本发明实施例限制到在此公开的形式。尽管以上已经讨论了多个示例方面和实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。
可以理解的是,在本发明的实施例中涉及的各种数字编号仅为描述方便进行的区分,并不用来限制本发明的实施例的范围。

Claims (10)

1.一种非关系型数据库的数据恢复方法,其特征在于,所述非关系型数据库包括第一表名对应的第一源数据表,所述第一源数据表用于记录客户端发送的业务数据,所述方法包括:
创建所述第一表名对应的第一源数据表的副本;
获取客户端发送的数据恢复请求;其中,所述数据恢复请求包括恢复时刻和所述第一表名;
响应所述数据恢复请求,从已经创建的第一源数据表对应的副本中确定第一副本;其中,所述第一副本的创建时刻早于所述恢复时刻;
确定第一预写日志;其中,所述第一预写日志包括所述第一副本的创建时刻至所述恢复时刻这一时段的针对所述第一副本表示的第一源数据表的第一操作记录;
基于所述第一预写日志中的第一操作记录和所述第一副本,将所述恢复时刻的恢复数据还原到所述第一表名对应的当前的第一源数据表;其中,所述恢复数据为所述第一副本中的第一副本数据经过所述第一操作记录处理后的数据,所述第一副本数据为所述第一副本的创建时刻下的第一源数据表中的数据。
2.根据权利要求1所示的源数据表恢复方法,其特征在于,所述基于所述第一预写日志中的第一操作记录和所述第一副本,将所述恢复时刻的恢复数据还原到所述第一表名对应的当前的第一源数据表,包括:
确定所述第一表名对应的当前的第一源数据表中的当前数据;
确定所述恢复数据;
确定所述恢复数据和所述当前数据之间的差异数据;
将所述差异数据写入所述第一表名对应的当前的第一源数据表中。
3.根据权利要求2所示的源数据表恢复方法,其特征在于,所述将所述差异数据写入当前的第一源数据表的过程中,所述方法还包括:
将所述第一表名下的待写入的业务数据写入当前的第一源数据表中;其中,所述差异数据和所述业务数据写入当前的第一源数据表的时刻不同,以区别恢复数据和新写入的业务数据。
4.根据权利要求2所示的非关系型数据库的数据恢复方法,其特征在于,所述确定恢复数据,包括:
确定第一操作记录对应的临时索引树;
基于所述第一副本中的第一索引树和所述临时索引树,确定恢复数据;其中,所述第一索引树用于检索所述第一副本数据。
5.根据权利要求1所示的源数据表恢复方法,其特征在于,所述基于所述第一预写日志中的第一操作记录和所述第一副本,将所述恢复时刻的恢复数据还原到所述第一表名对应的当前的第一源数据表,包括:
基于所述第一预写日志中的第一操作记录和所述第一副本,确定第二表名下的数据表;其中,所述数据表中的数据为所述恢复数据;
将所述第二表名替换为所述第一表名,以使所述第二表名的数据表作为所述第一表名对应的当前的源数据表。
6.根据权利要求5所示的源数据表恢复方法,其特征在于,所述将所述第二表名替换为所述第一表名之前,还包括:
确定所述当前的第一源数据表为只读状态;
确定所述第一表名下的第二预写日志;其中,所述第二预写日志包括所述恢复时刻到当前时刻这一时段的针对所述恢复时刻的第一源数据表的第二操作记录;
将所述第二预写日志中的第二操作记录写入所述第二表名下的数据表中。
7.一种非关系型数据库的数据恢复装置,其特征在于,所述非关系型数据库包括第一表名对应的第一源数据表,所述第一源数据表用于记录客户端发送的业务数据,所述装置包括:
副本创建模块,用于创建所述第一表名对应的第一源数据表的副本;
请求获取模块,用于获取客户端发送的数据恢复请求;其中,所述数据恢复请求包括恢复时刻和所述第一表名;
响应模块,用于响应所述数据恢复请求,从已经创建的第一源数据表对应的副本中确定第一副本;其中,所述第一副本的创建时刻早于所述恢复时刻;
日志确定模块,用于确定第一预写日志;其中,所述第一预写日志包括所述第一副本的创建时刻至所述恢复时刻这一时段的针对所述第一副本表示的第一源数据表的第一操作记录;
更新模块,用于基于所述第一预写日志中的第一操作记录和所述第一副本,将所述恢复时刻的恢复数据还原到所述第一表名对应的当前的第一源数据表;其中,所述恢复数据为所述第一副本中的第一副本数据经过所述第一操作记录处理后的数据,所述第一副本数据为所述第一副本的创建时刻下的第一源数据表中的数据。
8.一种计算设备集群,其特征在于,包括至少一个计算设备,每个计算设备包括处理器和存储器;
所述至少一个计算设备的处理器用于执行所述至少一个计算设备的存储器中存储的指令,以使得所述计算设备集群执行如权利要求1至6任一项所述的方法。
9.一种包含指令的计算机程序产品,其特征在于,当所述指令被计算设备集群运行时,使得所述计算设备集群执行如权利要求1至6任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,包括计算机程序指令,当所述计算机程序指令由计算设备集群执行时,所述计算设备集群执行如权利要求1至6任一项所述的方法。
CN202211324203.7A 2022-10-27 2022-10-27 非关系型数据库的数据恢复方法、装置、计算设备集群 Pending CN117992274A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211324203.7A CN117992274A (zh) 2022-10-27 2022-10-27 非关系型数据库的数据恢复方法、装置、计算设备集群

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211324203.7A CN117992274A (zh) 2022-10-27 2022-10-27 非关系型数据库的数据恢复方法、装置、计算设备集群

Publications (1)

Publication Number Publication Date
CN117992274A true CN117992274A (zh) 2024-05-07

Family

ID=90894725

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211324203.7A Pending CN117992274A (zh) 2022-10-27 2022-10-27 非关系型数据库的数据恢复方法、装置、计算设备集群

Country Status (1)

Country Link
CN (1) CN117992274A (zh)

Similar Documents

Publication Publication Date Title
US11520670B2 (en) Method and apparatus for restoring data from snapshots
US11880581B2 (en) Integrated hierarchical storage management
US11481289B2 (en) Method and apparatus for reading and writing committed data
US7472254B2 (en) Systems and methods for modifying a set of data objects
CN107391758B (zh) 数据库切换方法、装置及设备
JP2019519025A (ja) 分散システムにおける範囲の分割および移動
US11853581B2 (en) Restoring a storage system using file relocation metadata
CN109885299B (zh) 模型开发中的模板处理方法、装置、计算机设备和存储介质
US11436089B2 (en) Identifying database backup copy chaining
WO2023011022A1 (zh) 基于区块链的数据处理方法、设备及计算机可读存储介质
US11822806B2 (en) Using a secondary storage system to implement a hierarchical storage management plan
CN111737227A (zh) 数据修改方法及系统
CN113157487A (zh) 数据恢复方法及其设备
CN112800066B (zh) 索引管理的方法、相关设备及存储介质
US11561864B1 (en) Creating database clones at a specified point-in-time
CN116049306A (zh) 数据同步方法、装置、电子设备以及可读存储介质
CN115858471A (zh) 业务数据变更记录方法、装置、计算机设备及介质
CN117992274A (zh) 非关系型数据库的数据恢复方法、装置、计算设备集群
US8997124B2 (en) Method for updating data in a distributed data storage system
JP2020013307A (ja) ファイル移行方法およびファイル移行システム
CN116541365B (zh) 文件存储方法、装置、存储介质及客户端
US12007969B2 (en) Automatic computer data deduplication process for application whitelisting system
KR20180113720A (ko) 유에스비 백업시스템
CN117216057A (zh) Es索引滚动更新的方法、装置、介质及设备
CN115794164A (zh) 一种云数据库升级方法、装置、设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication