CN106844089B - 一种用于恢复树形数据存储的方法与设备 - Google Patents
一种用于恢复树形数据存储的方法与设备 Download PDFInfo
- Publication number
- CN106844089B CN106844089B CN201510881371.XA CN201510881371A CN106844089B CN 106844089 B CN106844089 B CN 106844089B CN 201510881371 A CN201510881371 A CN 201510881371A CN 106844089 B CN106844089 B CN 106844089B
- Authority
- CN
- China
- Prior art keywords
- data
- tree
- index
- index tree
- node
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请的目的是提供一种用于恢复树形数据存储的方法与设备。与现有技术相比,本申请按照深度优先的方式遍历数据存储对应的索引树,在遍历过程中跳过所述索引树中数据损坏的坏节点,当所述索引树中存在所述坏节点时,根据对应的遍历结果信息重建所述索引树,从而检查并尽可能地恢复树形数据存储。进一步地,本申请通过在遍历过程中记录所述坏节点的数据损坏范围,并向用户报告所述数据损坏范围,方便用户从备份中查找所述数据损坏范围对应的备份数据,简化了用户操作,提升了用户体验。
Description
技术领域
本申请涉及计算机领域,尤其涉及一种用于恢复树形数据存储的技术。
背景技术
数据库经常被用来存储、管理各类数据,当数据库中的数据文件出现损坏时,通常会给数据库运维人员造成不小的麻烦。虽然可以通过日志来保护数据库中的数据文件,但依然存在一些可能导致数据文件损坏的情况,比如:物理备份的软件漏洞会在备份的过程中造成数据页损坏;磁盘有一定的故障概率,某个磁盘坏块可能会造成这个范围内的数据损坏;用户出于性能方面的考虑,未将数据库配置成强持久化,导致宕机丢失数据。
对于采用B-tree(B树,多路搜索树)、B-树、B+树等数据结构存储的数据,由于在磁盘上具有严格的存储结构,当某个关键节点出现损坏时,可能导致存储的数据无法被访问。在MySQL数据库场景下,则表现为只要访问到损坏数据,数据库就会不断崩溃重启。通常运维人员无法发现哪些数据损坏了,唯一的办法就是将整个数据库实例重做,从而影响了数据库的可用性。
发明内容
本申请的一个目的是提供一种用于恢复树形数据存储的方法与设备,以解决恢复树形数据存储的问题。
根据本申请的一个方面,提供了一种用于恢复树形数据存储的方法,其中,该方法包括:
深度优先遍历数据存储对应的索引树,其中,所述索引树中的上层节点描述了对应下层节点的数据范围,在遍历过程中跳过所述索引树中数据损坏的坏节点;
当所述索引树中存在所述坏节点时,根据对应的遍历结果信息重建所述索引树。
根据本申请的另一个方面,提供了一种用于恢复树形数据存储的设备,其中,该设备包括:
索引树遍历装置,用于深度优先遍历数据存储对应的索引树,其中,所述索引树中的上层节点描述了对应下层节点的数据范围,在遍历过程中跳过所述索引树中数据损坏的坏节点;
索引树重建装置,用于当所述索引树中存在所述坏节点时,根据对应的遍历结果信息重建所述索引树。
与现有技术相比,本申请按照深度优先的方式遍历数据存储对应的索引树,在遍历过程中跳过所述索引树中数据损坏的坏节点,当所述索引树中存在所述坏节点时,根据对应的遍历结果信息重建所述索引树,从而检查并尽可能地恢复树形数据存储。进一步地,本申请通过在遍历过程中记录所述坏节点的数据损坏范围,并向用户报告所述数据损坏范围,方便用户从备份中查找所述数据损坏范围对应的备份数据,简化了用户操作,提升了用户体验。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1示出根据本申请一个方面的一种用于恢复树形数据存储的方法流程图;
图2示出根据本申请一个优选实施例的一种用于恢复树形数据存储的方法流程图;
图3示出根据本申请另一个优选实施例的一种用于恢复树形数据存储的方法流程图;
图4示出根据本申请另一个方面的一种用于恢复树形数据存储的设备示意图;
图5示出根据本申请一个优选实施例的一种用于恢复树形数据存储的设备示意图;
图6示出根据本申请又一个优选实施例的一种用于恢复树形数据存储的设备示意图;
图7示出根据本申请一个实施例的一种B树结构示意图;
图8示出根据本申请另一个实施例的一种构建B树的过程示意图。
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本申请作进一步详细描述。
在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
图1示出根据本申请一个方面的一种用于恢复树形数据存储的方法流程图。
该方法包括步骤S11和步骤S12。具体地,在步骤S11中,设备1深度优先遍历数据存储对应的索引树,其中,所述索引树中的上层节点描述了对应下层节点的数据范围,在遍历过程中跳过所述索引树中数据损坏的坏节点;在步骤S12中,设备1当所述索引树中存在所述坏节点时,根据对应的遍历结果信息重建所述索引树。
在此,所述设备1包括但不限于用户设备、网络设备、或用户设备与网络设备通过网络相集成所构成的设备。所述用户设备其包括但不限于任何一种可与用户通过触摸板进行人机交互的移动电子产品,例如智能手机、平板电脑等,所述移动电子产品可以采用任意操作系统,如android操作系统、iOS操作系统等。其中,所述网络设备包括一种能够按照事先设定或存储的指令,自动进行数值计算和信息处理的电子设备,其硬件包括但不限于微处理器、专用集成电路(ASIC)、可编程门阵列(FPGA)、数字处理器(DSP)、嵌入式设备等。所述网络设备其包括但不限于计算机、网络主机、单个网络服务器、多个网络服务器集或多个服务器构成的云;在此,云由基于云计算(Cloud Computing)的大量计算机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个虚拟超级计算机。所述网络包括但不限于互联网、广域网、城域网、局域网、VPN网络、无线自组织网络(Ad Hoc网络)等。优选地,设备1还可以是运行于所述用户设备、网络设备、或用户设备与网络设备、网络设备、触摸终端或网络设备与触摸终端通过网络相集成所构成的设备上的脚本程序。当然,本领域技术人员应能理解上述设备1仅为举例,其他现有的或今后可能出现的设备1如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
设备1的各个步骤之间是持续不断工作的。具体地,在步骤S11中,设备1持续深度优先遍历数据存储对应的索引树;在步骤S12中,设备1持续当所述索引树中存在所述坏节点时,根据对应的遍历结果信息重建所述索引树;直至所述设备1停止工作。
在步骤S11中,设备1深度优先遍历数据存储对应的索引树,其中,所述索引树中的上层节点描述了对应下层节点的数据范围,在遍历过程中跳过所述索引树中数据损坏的坏节点。
优选地,所述索引树包括B树、B-树或B+树。其中,B树(B-tree,多路搜索树)是一种常用的数据库数据组织结构,它是MySQL数据库最常用的索引结构,MySQL数据库的存储引擎InnoDB支持B-tree索引。在本实施例中,主要以B-tree为例进行详细说明。
当然,本领域技术人员应能理解上述树形结构仅为举例,其他现有的或今后可能出现的树形结构如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
例如,参照图7,以B-tree结构存储的每个索引树都具有一个根节点,图7中的Level 0(第0层)就是该索引树的根节点。根节点向下又衍生出子节点,Level 1(第1层)是Level 0的子节点,叶子节点Level 2(第2层)是Level 1的子节点。方框中的50、25等数字表示对应的键值,所述索引树中的上层节点描述了对应下层节点的数据范围,在图7中,根节点Level 0的键值为50,其左指针指向键值小于等于50的数据,右指针指向键值大于50的数据。如果非叶子节点损坏了,就无法从该节点寻路到其指向的子节点。假设Level 1的左节点(25,45)丢失,那么就无法检索到键值小于等于50的数据。在此,非叶子节点只记录键值范围,叶子节点记录全数据。
在此,可以采用递归算法深度优先遍历所述索引树。
例如,假设采用的递归函数名为f(Level,page),其中,Level的初始值设为0,page指针初始时指向root(根)页(例如图7中的page 0),从根节点开始按照深度优先的方式递归调度检查。如果图7所示的B-tree结构的索引树没有损坏,那么用所述递归算法对其进行遍历的顺序为page 0、page 1、page 3、page 4、page 5、page 2、page 6、page 7。如果所述索引树出现损坏,在遍历过程中跳过所述索引树中数据损坏的坏节点。用所述递归算法对图7所示的B-tree结构的索引树进行遍历,假设page 0损坏,即根节点损坏,那么不再向下层遍历所述索引树;假设page 1损坏,无法访问其子节点page3、page 4、page 5,那么对所述索引树进行遍历的顺序为page 0、page 1、page 2、page 6、page 7;假设page 4损坏,那么对所述索引树进行遍历的顺序为page 0、page 1、page 3、page 4、page 5、page 2、page6、page 7。
优选地,所述索引树包括聚集索引。
在此,所述聚集索引是根据聚集索引键构建的索引树。相应地,二级索引是根据二级索引键构建的索引树。
优选地,在步骤S11中,设备1当接收到用户修复数据存储的指令信息,深度优先遍历所述数据存储对应的索引树,其中,所述索引树中的上层节点描述了对应下层节点的数据范围,在遍历过程中跳过所述索引树中数据损坏的坏节点。
例如,所示指令信息可以是SQL语句“REPAIR TABLE tbname”,其中,tbname指的是待修复数据的表名。
与现有技术相比,在本申请中,仅需要通过用户发出的简单的指令信息,就可以按照深度优先遍历所述数据存储对应的索引树。为用户提供了简单方便的操作方式,提升了用户体验。
在步骤S12中,设备1当所述索引树中存在所述坏节点时,根据对应的遍历结果信息重建所述索引树。
例如,参照图7,假设在遍历过程中发现page 4损坏,那么在遍历结束后根据page3、page 5、page 6、page 7记录的数据重建所述索引树;假设在遍历过程中发现page 1损坏,无法访问其子节点page 3、page 4、page5,那么在遍历结束后根据page 5、page 6记录的数据重建所述索引树;假设在遍历过程中发现page 1和page 5损坏,那么在遍历结束后根据page 6记录的数据重建所述索引树;假设在遍历过程中发现page 0损坏,即根节点损坏,那么认为无法恢复所述索引树,不再向下层遍历所述索引树,而是直接重建所述索引树。在此,均通过已有的B-tree构建算法重建所述索引树。例如,参照图8,假设在构建B树的过程中依次插入键值分别为1、3、6、4、9、11、12的数据,其中,每个叶子节点可以存储2条数据,然后根据叶子节点确定对应的非叶子节点的键值范围,图8简单地示出该B树的构建过程。
然而,针对数据损坏场景,现有的数据恢复工具通常是根据表结构,离线从ibd文件(MySQL数据库的数据文件、索引文件)中提取有效数据,并生成数据集文件,用户再重建表并导入数据。在恢复损坏数据之前,数据库实例处于离线状态,无法提供服务。
与现有技术相比,当所述索引树中存在所述坏节点时,本申请根据对应的遍历结果信息重建所述索引树,仅让损坏数据离线,重建后的所述索引树依然可以为用户提供服务。
图2示出根据本申请一个优选实施例的一种用于恢复树形数据存储的方法流程图。
该方法包括步骤S21、步骤S22、步骤S23和步骤S24。具体地,在步骤S21中,设备1深度优先遍历数据存储对应的索引树,在遍历过程中记录所述坏节点的数据损坏范围,报告所述数据损坏范围,其中,所述索引树中的上层节点描述了对应下层节点的数据范围,在遍历过程中跳过所述索引树中数据损坏的坏节点;在步骤S22中,设备1当所述索引树中存在所述坏节点时,根据对应的遍历结果信息重建所述索引树;在步骤S23中,设备1接收所述数据损坏范围对应的备份数据;在步骤S24中,设备1根据所述备份数据更新重建后的所述索引树。
在此,所述步骤S22与图1中步骤S12的内容相同或基本相同。
相比图1中步骤S11,步骤S21中设备1在遍历过程中还记录所述坏节点的数据损坏范围,报告所述数据损坏范围。
例如,用所述递归算法对图7所示的B-tree结构的索引树进行遍历,在遍历过程中跳过所述索引树中数据损坏的坏节点。假设page 0损坏,即根节点损坏,那么不再向下层遍历所述索引树,并记录page 0涉及的数据范围,即所述数据损坏范围包括所述索引树中的全部数据;假设page 1损坏,无法访问其子节点page 3、page 4、page 5,根据图7所示的键值,那么所述数据损坏范围包括所有键值小于等于50的数据,记录所述数据损坏范围;假设page 4损坏,根据图7所示的键值,那么所述数据损坏范围可能为(25,45],记录所述数据损坏范围。在此,可以在结束遍历所述索引树之后,将遍历过程中检查到的所述数据损坏范围返回至用户设备(数据库管理员所使用的设备),报告给用户(数据库管理员);也可以在发现数据损坏时,即报告所述数据损坏范围。
优选地,在步骤S23中,设备1接收所述数据损坏范围对应的备份数据;在步骤S24中,设备1根据所述备份数据更新重建后的所述索引树。
例如,用户可以根据所述数据损坏范围,从备份或者备库实例中拉取所述数据损坏范围对应的备份数据。具体地,用户可以根据所述数据损坏范围对应的B-tree键值,从备份或者备库实例中找到对应的备份数据。在接收到用户设备发送的所述数据损坏范围对应的备份数据之后,通过已有的B-tree算法将所述数据损坏范围对应的备份数据插入重建后的聚集索引(所述索引树)中,以更新重建后的所述索引树。
与现有技术相比,本申请向用户报告所述数据损坏范围,指导用户从备份或者备库实例中拉取所述数据损坏范围对应的备份数据,便于用户操作,提升了用户体验。
图3示出根据本申请另一个优选实施例的一种用于恢复树形数据存储的方法流程图。
该方法包括步骤S31、步骤S32、步骤S35、步骤S36、步骤S33和步骤S34。在此,所述步骤S31、步骤S32、步骤S33、步骤S34与图2中步骤S21、步骤S22、步骤S23、步骤S24的内容相同或基本相同,为简明起见,不再赘述。
具体地,在步骤S35中,设备1深度优先遍历所述数据存储对应的二级索引,其中,所述二级索引中的上层节点描述了对应下层节点的数据范围;在步骤S36中,设备1在遍历过程中,若发现所述二级索引中存在数据损坏的节点,根据所述索引树或重建后的所述索引树重建所述二级索引。
在此,所述二级索引是根据二级索引键构建的索引树。在具体的实施例中,在深度优先遍历所述数据存储对应的根据聚集索引键构建的索引树(即聚集索引)之后,再深度优先遍历所述数据存储对应的根据二级索引键构建的索引树(即二级索引)。优选地,所述根据二级索引键构建的索引树包括B树、B-树或B+树。只要在遍历二级索引的过程中发现数据损坏的节点,不再继续遍历,根据所述聚集索引重建所述二级索引。
例如,聚集索引包含了行的全部数据,假设表t1上包含列(c1,c2,c3,c4),将c1定义为聚集索引键,c2、c3定义为二级索引键。聚集索引包含列为(c1,c2,c3,c4),也即全部数据;二级索引包含(c2,c3,c1),包含二级索引键值和聚集索引键值,其中,聚集索引键值用于快速定位到全部数据记录。假设查询条件包含c2、c3,但想得到的数据是c4,就可以通过c2、c3查询二级索引,找到对应的聚集索引键值c1,再通过c1查询聚集索引,找到c4的值。那么在根据所述聚集索引重建所述二级索引时,因为聚集索引包含了全行的数据,所以可以读取聚集索引中包含的二级索引键值列,然后通过已有的B-tree算法(参照图8)重建所述二级索引。
图4示出根据本申请另一个方面的一种用于恢复树形数据存储的设备1,其中,设备1包括索引树遍历装置11和索引树重建装置12。
具体地,所述索引树遍历装置11深度优先遍历数据存储对应的索引树,其中,所述索引树中的上层节点描述了对应下层节点的数据范围,在遍历过程中跳过所述索引树中数据损坏的坏节点;所述索引树重建装置12当所述索引树中存在所述坏节点时,根据对应的遍历结果信息重建所述索引树。
在此,所述设备1包括但不限于用户设备、网络设备、或用户设备与网络设备通过网络相集成所构成的设备。所述用户设备其包括但不限于任何一种可与用户通过触摸板进行人机交互的移动电子产品,例如智能手机、平板电脑等,所述移动电子产品可以采用任意操作系统,如android操作系统、iOS操作系统等。其中,所述网络设备包括一种能够按照事先设定或存储的指令,自动进行数值计算和信息处理的电子设备,其硬件包括但不限于微处理器、专用集成电路(ASIC)、可编程门阵列(FPGA)、数字处理器(DSP)、嵌入式设备等。所述网络设备其包括但不限于计算机、网络主机、单个网络服务器、多个网络服务器集或多个服务器构成的云;在此,云由基于云计算(Cloud Computing)的大量计算机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个虚拟超级计算机。所述网络包括但不限于互联网、广域网、城域网、局域网、VPN网络、无线自组织网络(Ad Hoc网络)等。优选地,设备1还可以是运行于所述用户设备、网络设备、或用户设备与网络设备、网络设备、触摸终端或网络设备与触摸终端通过网络相集成所构成的设备上的脚本程序。当然,本领域技术人员应能理解上述设备1仅为举例,其他现有的或今后可能出现的设备1如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
上述各装置之间是持续不断工作的,在此,本领域技术人员应理解“持续”是指上述各装置分别实时地或者按照设定的或实时调整的工作模式要求,例如所述索引树遍历装置11持续深度优先遍历数据存储对应的索引树;所述索引树重建装置12持续当所述索引树中存在所述坏节点时,根据对应的遍历结果信息重建所述索引树;直至所述设备1停止工作。
所述索引树遍历装置11深度优先遍历数据存储对应的索引树,其中,所述索引树中的上层节点描述了对应下层节点的数据范围,在遍历过程中跳过所述索引树中数据损坏的坏节点。
优选地,所述索引树包括B树、B-树或B+树。其中,B树(B-tree,多路搜索树)是一种常用的数据库数据组织结构,它是MySQL数据库最常用的索引结构,MySQL数据库的存储引擎InnoDB支持B-tree索引。在本实施例中,主要以B-tree为例进行详细说明。
当然,本领域技术人员应能理解上述树形结构仅为举例,其他现有的或今后可能出现的树形结构如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
例如,参照图7,以B-tree结构存储的每个索引树都具有一个根节点,图7中的Level 0(第0层)就是该索引树的根节点。根节点向下又衍生出子节点,Level 1(第1层)是Level 0的子节点,叶子节点Level 2(第2层)是Level 1的子节点。方框中的50、25等数字表示对应的键值,所述索引树中的上层节点描述了对应下层节点的数据范围,在图7中,根节点Level 0的键值为50,其左指针指向键值小于等于50的数据,右指针指向键值大于50的数据。如果非叶子节点损坏了,就无法从该节点寻路到其指向的子节点。假设Level 1的左节点(25,45)丢失,那么就无法检索到键值小于等于50的数据。在此,非叶子节点只记录键值范围,叶子节点记录全数据。
在此,可以采用递归算法深度优先遍历所述索引树。
例如,假设采用的递归函数名为f(Level,page),其中,Level的初始值设为0,page指针初始时指向root(根)页(例如图7中的page 0),从根节点开始按照深度优先的方式递归调度检查。如果图7所示的B-tree结构的索引树没有损坏,那么用所述递归算法对其进行遍历的顺序为page 0、page 1、page 3、page 4、page 5、page 2、page 6、page 7。如果所述索引树出现损坏,在遍历过程中跳过所述索引树中数据损坏的坏节点。用所述递归算法对图7所示的B-tree结构的索引树进行遍历,假设page 0损坏,即根节点损坏,那么不再向下层遍历所述索引树;假设page 1损坏,无法访问其子节点page3、page 4、page 5,那么对所述索引树进行遍历的顺序为page 0、page 1、page 2、page 6、page 7;假设page 4损坏,那么对所述索引树进行遍历的顺序为page 0、page 1、page 3、page 4、page 5、page 2、page6、page 7。
优选地,所述索引树包括聚集索引。
在此,所述聚集索引是根据聚集索引键构建的索引树。相应地,二级索引是根据二级索引键构建的索引树。
优选地,所述索引树遍历装置11当接收到用户修复数据存储的指令信息,深度优先遍历所述数据存储对应的索引树,其中,所述索引树中的上层节点描述了对应下层节点的数据范围,在遍历过程中跳过所述索引树中数据损坏的坏节点。
例如,所示指令信息可以是SQL语句“REPAIR TABLE tbname”,其中,tbname指的是待修复数据的表名。
与现有技术相比,在本申请中,仅需要通过用户发出的简单的指令信息,就可以按照深度优先遍历所述数据存储对应的索引树。为用户提供了简单方便的操作方式,提升了用户体验。
所述索引树重建装置12当所述索引树中存在所述坏节点时,根据对应的遍历结果信息重建所述索引树。
例如,参照图7,假设在遍历过程中发现page 4损坏,那么在遍历结束后根据page3、page 5、page 6、page 7记录的数据重建所述索引树;假设在遍历过程中发现page 1损坏,无法访问其子节点page 3、page 4、page5,那么在遍历结束后根据page 5、page 6记录的数据重建所述索引树;假设在遍历过程中发现page 1和page 5损坏,那么在遍历结束后根据page 6记录的数据重建所述索引树;假设在遍历过程中发现page 0损坏,即根节点损坏,那么认为无法恢复所述索引树,不再向下层遍历所述索引树,而是直接重建所述索引树。在此,均通过已有的B-tree构建算法重建所述索引树。例如,参照图8,假设在构建B树的过程中依次插入键值分别为1、3、6、4、9、11、12的数据,其中,每个叶子节点可以存储2条数据,然后根据叶子节点确定对应的非叶子节点的键值范围,图8简单地示出该B树的构建过程。
然而,针对数据损坏场景,现有的数据恢复工具通常是根据表结构,离线从ibd文件(MySQL数据库的数据文件、索引文件)中提取有效数据,并生成数据集文件,用户再重建表并导入数据。在恢复损坏数据之前,数据库实例处于离线状态,无法提供服务。
与现有技术相比,当所述索引树中存在所述坏节点时,本申请根据对应的遍历结果信息重建所述索引树,仅让损坏数据离线,重建后的所述索引树依然可以为用户提供服务。
图5示出根据本申请一个优选实施例的一种用于恢复树形数据存储的设备1,其中,设备1包括索引树遍历装置11’、索引树重建装置12’、备份数据接收装置13’和更新装置14’。
具体地,所述索引树遍历装置11’深度优先遍历数据存储对应的索引树,在遍历过程中记录所述坏节点的数据损坏范围,报告所述数据损坏范围,其中,所述索引树中的上层节点描述了对应下层节点的数据范围,在遍历过程中跳过所述索引树中数据损坏的坏节点;所述索引树重建装置12’当所述索引树中存在所述坏节点时,根据对应的遍历结果信息重建所述索引树;所述备份数据接收装置13’接收所述数据损坏范围对应的备份数据;所述更新装置14’根据所述备份数据更新重建后的所述索引树。
在此,所述索引树重建装置12’与图4中索引树重建装置12的内容相同或基本相同。
相比图4中索引树遍历装置11,所述索引树遍历装置11’在遍历过程中还记录所述坏节点的数据损坏范围,报告所述数据损坏范围。
例如,用所述递归算法对图7所示的B-tree结构的索引树进行遍历,在遍历过程中跳过所述索引树中数据损坏的坏节点。假设page 0损坏,即根节点损坏,那么不再向下层遍历所述索引树,并记录page 0涉及的数据范围,即所述数据损坏范围包括所述索引树中的全部数据;假设page 1损坏,无法访问其子节点page 3、page 4、page 5,根据图7所示的键值,那么所述数据损坏范围包括所有键值小于等于50的数据,记录所述数据损坏范围;假设page 4损坏,根据图7所示的键值,那么所述数据损坏范围可能为(25,45],记录所述数据损坏范围。在此,可以在结束遍历所述索引树之后,将遍历过程中检查到的所述数据损坏范围返回至用户设备(数据库管理员所使用的设备),报告给用户(数据库管理员);也可以在发现数据损坏时,即报告所述数据损坏范围。
优选地,所述备份数据接收装置13’接收所述数据损坏范围对应的备份数据;所述更新装置14’根据所述备份数据更新重建后的所述索引树。
例如,用户可以根据所述数据损坏范围,从备份或者备库实例中拉取所述数据损坏范围对应的备份数据。具体地,用户可以根据所述数据损坏范围对应的B-tree键值,从备份或者备库实例中找到对应的备份数据。在接收到用户设备发送的所述数据损坏范围对应的备份数据之后,通过已有的B-tree算法将所述数据损坏范围对应的备份数据插入重建后的聚集索引(所述索引树)中,以更新重建后的所述索引树。
与现有技术相比,本申请向用户报告所述数据损坏范围,指导用户从备份或者备库实例中拉取所述数据损坏范围对应的备份数据,便于用户操作,提升了用户体验。
图6示出根据本申请另一个优选实施例的一种用于恢复树形数据存储的设备1,其中,设备1包括索引树遍历装置11”、索引树重建装置12”、二级索引遍历装置15”、二级索引重建装置16”、备份数据接收装置13”和更新装置14”。
在此,所述索引树遍历装置11”、索引树重建装置12”、备份数据接收装置13”、更新装置14”与图5中索引树遍历装置11’、索引树重建装置12’、备份数据接收装置13’、更新装置14’的内容相同或基本相同,为简明起见,不再赘述。
具体地,所述二级索引遍历装置15”深度优先遍历所述数据存储对应的二级索引,其中,所述二级索引中的上层节点描述了对应下层节点的数据范围;所述二级索引重建装置16”在遍历过程中,若发现所述二级索引中存在数据损坏的节点,根据所述索引树或重建后的所述索引树重建所述二级索引。
在此,所述二级索引是根据二级索引键构建的索引树。在具体的实施例中,在深度优先遍历所述数据存储对应的根据聚集索引键构建的索引树(即聚集索引)之后,再深度优先遍历所述数据存储对应的根据二级索引键构建的索引树(即二级索引)。优选地,所述根据二级索引键构建的索引树包括B树、B-树或B+树。只要在遍历二级索引的过程中发现数据损坏的节点,不再继续遍历,根据所述聚集索引重建所述二级索引。
例如,聚集索引包含了行的全部数据,假设表t1上包含列(c1,c2,c3,c4),将c1定义为聚集索引键,c2、c3定义为二级索引键。聚集索引包含列为(c1,c2,c3,c4),也即全部数据;二级索引包含(c2,c3,c1),包含二级索引键值和聚集索引键值,其中,聚集索引键值用于快速定位到全部数据记录。假设查询条件包含c2、c3,但想得到的数据是c4,就可以通过c2、c3查询二级索引,找到对应的聚集索引键值c1,再通过c1查询聚集索引,找到c4的值。那么在根据所述聚集索引重建所述二级索引时,因为聚集索引包含了全行的数据,所以可以读取聚集索引中包含的二级索引键值列,然后通过已有的B-tree算法(参照图8)重建所述二级索引。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
Claims (10)
1.一种用于恢复树形数据存储的方法,其中,该方法包括:
深度优先遍历数据存储对应的索引树,其中,所述索引树中的上层节点描述了对应下层节点的数据范围,在遍历过程中跳过所述索引树中数据损坏的坏节点;
当所述索引树中存在所述坏节点时,根据对应的遍历结果信息重建所述索引树;
深度优先遍历所述数据存储对应的二级索引,其中,所述二级索引中的上层节点描述了对应下层节点的数据范围;
在遍历过程中,若发现所述二级索引中存在数据损坏的节点,根据所述索引树或重建后的所述索引树重建所述二级索引。
2.根据权利要求1所述的方法,其中,所述深度优先遍历数据存储对应的索引树还包括:
在遍历过程中记录所述坏节点的数据损坏范围;
报告所述数据损坏范围。
3.根据权利要求2所述的方法,其中,所述方法还包括:
接收所述数据损坏范围对应的备份数据;
根据所述备份数据更新重建后的所述索引树。
4.根据权利要求1所述的方法,其中,所述索引树包括B树、B-树或B+树。
5.根据权利要求1所述的方法,其中,所述深度优先遍历数据存储对应的索引树包括:
当接收到用户修复数据存储的指令信息,深度优先遍历所述数据存储对应的索引树,其中,所述索引树中的上层节点描述了对应下层节点的数据范围,在遍历过程中跳过所述索引树中数据损坏的坏节点。
6.一种用于恢复树形数据存储的设备,其中,该设备包括:
索引树遍历装置,用于深度优先遍历数据存储对应的索引树,其中,所述索引树中的上层节点描述了对应下层节点的数据范围,在遍历过程中跳过所述索引树中数据损坏的坏节点;
索引树重建装置,用于当所述索引树中存在所述坏节点时,根据对应的遍历结果信息重建所述索引树;
二级索引遍历装置,用于深度优先遍历所述数据存储对应的二级索引,其中,所述二级索引中的上层节点描述了对应下层节点的数据范围;
二级索引重建装置,用于在遍历过程中,若发现所述二级索引中存在数据损坏的节点,根据所述索引树或重建后的所述索引树重建所述二级索引。
7.根据权利要求6所述的设备,其中,所述索引树遍历装置还用于:
在遍历过程中记录所述坏节点的数据损坏范围;
报告所述数据损坏范围。
8.根据权利要求7所述的设备,其中,所述设备还包括:
备份数据接收装置,用于接收所述数据损坏范围对应的备份数据;
更新装置,用于根据所述备份数据更新重建后的所述索引树。
9.根据权利要求6所述的设备,其中,所述索引树包括B树、B-树或B+树。
10.根据权利要求6所述的设备,其中,所述索引树遍历装置用于:
当接收到用户修复数据存储的指令信息,深度优先遍历所述数据存储对应的索引树,其中,所述索引树中的上层节点描述了对应下层节点的数据范围,在遍历过程中跳过所述索引树中数据损坏的坏节点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510881371.XA CN106844089B (zh) | 2015-12-03 | 2015-12-03 | 一种用于恢复树形数据存储的方法与设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510881371.XA CN106844089B (zh) | 2015-12-03 | 2015-12-03 | 一种用于恢复树形数据存储的方法与设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106844089A CN106844089A (zh) | 2017-06-13 |
CN106844089B true CN106844089B (zh) | 2021-01-01 |
Family
ID=59149020
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510881371.XA Active CN106844089B (zh) | 2015-12-03 | 2015-12-03 | 一种用于恢复树形数据存储的方法与设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106844089B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11835990B2 (en) * | 2021-11-16 | 2023-12-05 | Netapp, Inc. | Use of cluster-level redundancy within a cluster of a distributed storage management system to address node-level errors |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108062358B (zh) * | 2017-11-28 | 2020-12-29 | 厦门市美亚柏科信息股份有限公司 | innodb引擎删除记录的离线恢复方法、存储介质 |
CN108446187B (zh) * | 2018-03-07 | 2021-02-09 | 上海达梦数据库有限公司 | 数据备份方法及数据还原方法 |
CN110058969B (zh) * | 2019-04-18 | 2023-02-28 | 腾讯科技(深圳)有限公司 | 一种数据恢复方法及装置 |
CN110569147B (zh) * | 2019-09-05 | 2022-06-07 | 厦门市美亚柏科信息股份有限公司 | 一种基于索引的删除文件恢复方法、终端设备及存储介质 |
CN111143130B (zh) * | 2019-12-25 | 2021-05-25 | 腾讯科技(深圳)有限公司 | 数据恢复方法、装置、计算机可读存储介质和计算机设备 |
CN112579612B (zh) * | 2020-12-31 | 2023-05-16 | 厦门市美亚柏科信息股份有限公司 | 数据库索引表记录分析方法、装置、计算设备及存储介质 |
CN113192166B (zh) * | 2021-05-24 | 2022-08-30 | 上海曼恒数字技术股份有限公司 | 一种骨骼树还原方法及系统 |
CN115454720B (zh) * | 2022-09-20 | 2024-04-02 | 中电云计算技术有限公司 | 基于daos分布式存储系统中数据增量重构系统和方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102012851A (zh) * | 2010-12-20 | 2011-04-13 | 浪潮(北京)电子信息产业有限公司 | 一种持续数据保护方法及服务器 |
CN103902699A (zh) * | 2014-03-31 | 2014-07-02 | 哈尔滨工程大学 | 一种用于大数据环境下可支持多格式特性的数据空间检索方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7334002B2 (en) * | 2004-02-27 | 2008-02-19 | Microsoft Corporation | System and method for recovery units in databases |
CN102289526B (zh) * | 2011-09-29 | 2013-07-31 | 深圳万兴信息科技股份有限公司 | 一种hfs+文件系统数据恢复方法及装置 |
CN104937556A (zh) * | 2013-01-30 | 2015-09-23 | 惠普发展公司,有限责任合伙企业 | 恢复数据库的页面 |
CN105045676B (zh) * | 2015-07-02 | 2018-05-04 | 四川效率源信息安全技术股份有限公司 | 一种基于SQLite数据库的丢失数据的恢复方法 |
-
2015
- 2015-12-03 CN CN201510881371.XA patent/CN106844089B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102012851A (zh) * | 2010-12-20 | 2011-04-13 | 浪潮(北京)电子信息产业有限公司 | 一种持续数据保护方法及服务器 |
CN103902699A (zh) * | 2014-03-31 | 2014-07-02 | 哈尔滨工程大学 | 一种用于大数据环境下可支持多格式特性的数据空间检索方法 |
Non-Patent Citations (1)
Title |
---|
SQL Server 2000数据库中如何重建索引;中国站长站;《https://www.chinaz.com/program/2007/0523/9126.shtml》;20070523;第1页 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11835990B2 (en) * | 2021-11-16 | 2023-12-05 | Netapp, Inc. | Use of cluster-level redundancy within a cluster of a distributed storage management system to address node-level errors |
Also Published As
Publication number | Publication date |
---|---|
CN106844089A (zh) | 2017-06-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106844089B (zh) | 一种用于恢复树形数据存储的方法与设备 | |
US10788998B2 (en) | Logging changes to data stored in distributed data storage system | |
US10146643B2 (en) | Database recovery and index rebuilds | |
US8635187B2 (en) | Method and system of performing incremental SQL server database backups | |
US9183268B2 (en) | Partition level backup and restore of a massively parallel processing database | |
US8938430B2 (en) | Intelligent data archiving | |
US9542279B2 (en) | Shadow paging based log segment directory | |
US10970173B2 (en) | Logging process in a data storage system | |
CN106021031B (zh) | 一种btrfs文件系统的删除数据恢复方法和装置 | |
CN107209704A (zh) | 检测丢失的写入 | |
US20130159339A1 (en) | Data Container Access in a Database System | |
Kleppmann | Designing data-intensive applications | |
CN106776795B (zh) | 基于Hbase数据库的数据写入方法及装置 | |
CN106897338A (zh) | 一种针对数据库的数据修改请求处理方法及装置 | |
CN114924914B (zh) | 磁盘分区表信息备份、恢复方法及系统 | |
US20170075934A1 (en) | Method and system for handling binary large objects | |
CN106155832A (zh) | 一种数据恢复的方法、装置及Android设备 | |
US11853284B2 (en) | In-place updates with concurrent reads in a decomposed state | |
US9489398B2 (en) | Columnwise range K-nearest neighbors search queries | |
CN107894942A (zh) | 数据表访问量的监控方法和装置 | |
US9588996B2 (en) | Point in time recovery support for pending schema definition changes | |
CN110765201A (zh) | 构建PostgreSQL数据库下处理时序数据的方法和系统 | |
Toups | A study of three paradigms for storing geospatial data: distributed-cloud model, relational database, and indexed flat file | |
US8615632B2 (en) | Co-storage of data storage page linkage, size, and mapping | |
US10521314B2 (en) | Cross-referenced irregular field storage in databases |
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 |