用于在b树上重命名连续键的方法和系统的制作方法

文档序号:6548252阅读:217来源:国知局
专利名称:用于在b树上重命名连续键的方法和系统的制作方法
技术领域
本发明一般涉及用于存储和组织数据的计算机数据结构,尤其涉及重命名在表示分级名空间的B树数据结构中存储的键上的操作。
背景技术
B树是一种特定的多元树数据结构,它被设计用于组织数据记录以便有效的数据检索,尤其是当数据记录存储在诸如硬盘的相对较慢的存储介质上时。B树上的每个节点都存储了多个键,用于标识相应的数据记录和指向该节点子节点的指针。节点可存储的键的数量取决于B树的阶。在阶为K的B树上,每个节点应当包含K到2K的键。使用较大的K使B树对于固定的数据记录集能具有较小的高度(深度),从而减少找到需要数据记录所需的磁盘访问次数。
B树数据结构可用于组织各种类型的数据。例如,B树可用于分级名空间,其中名字在B树中被存为键。作为示例,打算使用B树用于存储文件系统的元数据。在该应用中,B树的键是每个文件的全路径名或目录。大多数文件系统操作可在这种数据结构上有效地执行。然而,一个重要例外是重命名操作。当要重命名文件系统目录时,对应于该目录中文件和子目录的B树上所有节点的键也要相应地改变。重命名操作的自然实现将涉及要重命名的目录中的每个文件或子目录,这将是非常低效的。通常,由于使用常规方法的重命名操作的低效性,一直有观点认为B树数据结构不适于管理文件系统。

发明内容
由于上述原因,本发明提供一种用于更改表示分级名空间的B树,以及在B树上重命名连续键的操作的方法。根据本发明,当要重命名存储在表示分级名空间的B树上连续键集合时,从原始B树上切除所有要重命名的键,并将其存储在独立临时的“经提取树”上。该切除将原始B树转换成“经修整树”。然后重命名经提取树中的键,且将经重命名的经提取树插入经修整树,以形成用重命名键表示分级名空间的最终B树。本发明的方法非常有效,其估计时间复杂性为O(logN),其中N是B树中的节点数。分级名空间的一个示例是文件系统,且重命名操作是要重命名文件系统中的目录,包括更改目录中文件和子目录的名称。本发明方法的效率使得使用B树数据结构来存储文件系统的元数据极为可行。
从参照附图对说明性实施例进行的以下详细描述中,本发明的附加特征和优点将变得显然。


所附权利要求书陈述了本发明的特征以及特性,而本发明及其优点则可结合附图从以下详细说明书中得到最好的理解,其中图1是根据本发明示出计算装置的示例性架构的简化示意图,该计算装置用于实现对表示分级名空间的B树中连续键进行重命名的方法;图2是示出在本发明一实施例中使用的B树的示意图,该B树用于带有要重命名的目录节点的文件系统;图3是示出在本发明一实施例方法中通过切除要重命名目录的键从原始B树产生两个中间树结构的示意图;图4是示出从在本发明一实施例方法中形成的两个中间树结构来构建最终B树的示意图;图5是示出本发明一实施例方法中用于重命名B树数据结构中目录的高级步骤的流程图;图6是示出用于创建图3中两个中间树的切除操作的流程图;以及图7是示出用于创建图4最终B树的B树插入操作的流程图。
具体实施例方式
现在将参照某些实施例描述一种方法和系统,它们用于更改B树以反映在表示诸如文件系统的分级名空间的B树上对连续键集合的重命名。技术人员将容易理解在此所述的方法和系统仅仅是示例性的,且可作变化而不背离本发明的精神和范围。
参阅附图通过以下详细描述,本发明将可得到更全面的理解。在本说明书中,相同数字标示本发明各种实施例中的类似元素。本发明被示为在适当计算环境中实现。尽管不是必须的,本发明将在计算机可执行指令的一般上下文中进行说明,诸如由个人计算机执行的过程。通常,过程包括执行具体任务或实现具体抽象数据结构的程序模块、例程、函数、程序、对象、组件、数据结构等等。此外,本领域技术人员可以理解本发明可在其它计算系统配置中实践,包括手持式装置、多处理器系统、以及基于微处理器或可编程消费电器。本发明还可在任务由经通信网络连接的远程处理设备执行的分布式计算环境中实践。在分布式计算环境中,程序模块可置于包括存储器存储设备的本地和远程计算机存储介质中。术语计算机系统可用以指诸如在分布式计算环境中可见的计算机系统。
图1示出了其中可实现本发明的适当计算系统环境100的示例。该计算系统环境100仅是适当计算环境的一个示例,并非旨在提出本发明使用或功能性范围的任何限制。计算环境100也不应被解释为对示例性操作环境100中所示的任一组件或其组合有任何依赖性或任何需求。尽管本发明的至少一个实施例包括在示例性操作环境100中示出的每个组件,但本发明的另外一个更典型的实施例不包括某些或全部非基本组件,例如网络通信所需之外的输入输出装置。
参照图1,用于实现本发明的示例性系统包括计算机110形式的通用计算装置。计算机110的组件可包括,但不限于,处理单元120、系统存储器130以及把包括系统存储器在内的各种系统组件耦合到处理单元120的系统总线121。系统总线121可能是若干总线结构类型中的任何一种,包括存储器总线或存储器控制器、外围总线、以及使用多种总线架构的任一种的本地总线。
计算机110通常包括各种计算机可读介质。计算机可读介质可以是能被计算机110访问的任何可用介质,并包括易失性和非易失性介质、可移动和不可移动介质。作为示例,而非限制,计算机可读介质可包括计算机存储介质和通信介质。计算机存储介质包括以任何方法或技术实现、用于存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息的易失性和非易失性介质、可移动和不可移动介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其它存储器技术、光盘存储、磁卡、磁带、磁盘存储或其它磁性存储设备、或任何其它可用于存储所需信息并可由计算机110访问的介质。通信介质通常包括诸如载波或其它传输机制的调制数据信号中的计算机可读指令、数据结构、程序模块、或其它数据,且包括任何信息输送介质。术语“调制数据信号”意指用在信号中编码信息的方式设置或改变其一个或多个特征的信号。作为示例,而非限制,通信介质包括诸如有线网络或直线连接的有线介质,和诸如声学、射频、红外线和其它无线介质的无线介质。以上任何介质的组合也应包括在计算机可读介质的范围中。
系统存储器130包括诸如只读存储器(ROM)131和随机存取存储器(RAM)132的易失性和/或非易失性存储器形式的计算机可读介质。作为示例,而非限制,图1示出了操作系统134、应用程序135、其它程序模块136、和程序数据137。
计算机110还可包括其它可移动/不可移动、易失性/非易失性计算机存储介质。仅作为示例,图1图示了读取和写入不可移动、非易失性磁性介质的硬盘驱动器141,读取和写入可移动、非易失性磁盘152的磁盘驱动器151,读取和写入可移动、非易失性光盘156,诸如CD-ROM的光盘驱动器155。其它也用在示例性计算环境中的计算机存储介质包括,但不限于,磁带、闪存卡、DVD、数字化视频带、固态RAM、固态ROM等等。硬盘驱动器141通常通过诸如接口140的不可移动存储器接口与系统总线121连接,而磁盘驱动器151和光盘驱动器155通常通过诸如接口150的可移动存储器接口与系统总线121连接。该计算机系统可包括用于其它类型可移动非易失性存储装置的接口。例如,计算机可具有接受USB闪存盘(UFD)154的USB端口153,或者接受SD存储卡158的SD卡插槽157。也可使用其它类型的可用于实现本发明的可移动存储介质。
如上所述并如图1所示的驱动器及其相关联的计算机存储介质为计算机110提供计算机可读指令、数据结构、程序模块、和其它数据的存储。在图1中,例如,硬盘驱动器141被示为存储操作系统144、应用程序145、其它程序模块146、和程序数据147。注意这些组件可以与操作系统134、应用程序135、其它程序模块136、和程序数据137相同或不同。在此给予操作系统144、应用程序145、其它程序模块146、和程序数据147的数字不同至少说明他们是不同的复制件。用户可通过输入装置如书写板或数字化仪164、话筒163、键盘162、和诸如鼠标、跟踪球或触摸板等定位装置161向计算机110输入命令和信息。这些和其它输入设备常常通过与系统总线耦合的用户输入接口160与处理单元120相连,但也可通过诸如并行端口、游戏端口或通用串行总线(USB)的其它接口连接。监视器191或其它类型的显示设备也可通过诸如视频接口190的接口与系统总线121相连。监视器191还可集成触摸屏面板等等。注意监视器和/或触摸屏面板可物理地与装有计算装置110的外壳相耦合,诸如书写板类型的个人计算机。另外,诸如计算装置110的计算机还可包括诸如扬声器197和打印机196的其它输出设备,它们通过输出外围接口194等等相连。
计算机110可以在使用与一台或多台远程计算机,诸如远程计算机180的逻辑连接的网络化环境中运行。远程计算机180可以是个人计算机、服务器、路由器、、对等装置或其它网络节点,而且通常包括上述与计算机110相关的某些或全部组件,尽管在图1中仅图示了存储器存储设备181。图1中所描绘的逻辑连接包括局域网(LAN)171和广域网(WAN)173,但也可包括其它网络。例如,在本发明中,计算机110可包括数据源自的源机器,而远程计算机180则可包括目标机器。然而,注意源机器和目标机器无需在开始时就由网络或以其它方式连接,相反,数据可通过任何能够由源平台写入并由目标平台读取的介质传送。例如,这种介质的一种非限制实例是便携式闪存介质,有时称为存储“钥”或存储“棒”。其它非限制示例将在下面示出。
当用于LAN网络化环境中时,计算机110通过网络接口或适配器170与局域网171连接。计算机110通常包括调制解调器172或其它用于在广域网173中建立通信的装置。可以是内置式或外置式的调制解调器172与系统总线121通过用户输入接口160或其它适当机制连接。在网络化环境中,与计算机110相关的程序模块或其一部分可存储在远程存储器存储装置中。作为示例,而非限制,图1示出了驻留于存储装置181中的远程应用程序185。应当理解,所示网络连接是示例性的,且其它用于在计算机间建立通信连接的技术也可以使用。
参看图2,本发明涉及用于在B树数据结构中重命名连续键的有效方法,该B树数据结构表示分级名空间且名空间的名称被存储为在B树节点上的键。在此使用时,术语“连续键”意思是在键值的给定范围内B树所有的键。这些键基于其值以连续顺序存储在B树上,尽管它们所存储其中的节点可在B树的不同级别上。分级名空间是计算机科学中普遍存在的。分级名空间的示例包括,例如用于在因特网上查找计算机名称的域名系统(DNS)、以及用以在公司网络上存储实体的名称和属性的活动目录(Active Directory)。活动目录是微软公司的产品。在以下描述中,本发明结合一实施例进行描述,在该实施例中分级名空间是文件系统的,且重命名操作重命名文件系统的目录,其中要更改的连续键集表示目录中文件和子目录的名称。然而,可以理解,本发明的方法不限于重命名文件系统,且可被用于广泛范围的用于在表示分级名空间的任何B树上重命名连续键的应用中。
如图2所示,B树200具有在树结构中相连的多个节点根节点210、一个或多个中间级别节点220、以及多个叶节点230。B树具有K“阶”,其中K是大于大等于1的整数。数字2K是每个节点可具有的最多子节点数量。这些键具有自然顺序(如字母顺序)从而可指向文件的键序列顺序。
在本发明的一实施例中,使用B树来存储文件系统中目录和文件的元数据可使目录和文件得以快速定位和访问。B树的键是文件系统相应文件和子目录的全路径名。例如,B树上一节点的键可以是A/MyDocuments/Letters/Letter1,其中Letter1是Letters目录中的文件,而Letters在MyDocuments的目录中,MyDocuments又在目录A中。为了优化该树以减少每次文件检索的磁盘访问次数,B树被“平衡”从而B树上的每个节点具有N个键和N+1个指针,其中K<N<2K。以p0v1p1v2p2...vNpN的形式来安排每个节点的指针和键,其中pi是第i个指针而vi是节点的第i个键。每个指针指向子节点,子节点可具有自己的键和指针(除非节点是叶节点)。应注意,文件系统的目录级别不与存储文件系统的目录路径的B树上节点级别相对应。
当重命名由B树表示的文件系统中目录时,改变目录的路径名和该目录的所有文件和子目录。在此情形中,要重命名的目录的所有文件和子目录名称形成B树上的连续键集,尽管键存储在树结构的不同级别的节点上。作为重命名目录的结果,可创建新路径名的多个新键。必须从B树移除旧路径名的现有键,而新键则必须添加到B树上的适当位置。本发明提供一种使得用于重命名连续键集的对B树的更改能有效实现的机制,它带有估计的时间复杂性O(logN),其中N是B树上的节点总数。
现在参照如图3-5所示的实施例描述本发明方法的用于重命名B树连续键的概念,其中文件系统由B树表示,且重命名操作涉及重命名文件系统中的目录。在图3中,B树(标记为T)表示对文件系统中目录进行重命名之前的文件系统。更改原始B树T以包括通过重命名目录而创建之新键的过程包括从原始B树产生两个临时数据结构。该两个临时数据结构是类似树的结构,几乎是但又不全是常规意义上的B树。具体地,通过从原始B树T切除要重命名目录的所有文件和子目录的键,来产生一临时树(标记为T’)。该临时树T’被称为“经修整树”。在图3中,为了进行说明,涂黑了包含要从原始B树上切除的键的节点部分。这些从原始B树T上切除的键被存储在被称为“经提取树”的第二树数据结构中(标记为S)。
经修整树T’和经提取树S都不符合B树的常规定义,因为它们不是满的,即每个节点都不具有至少K个键。为了本发明,阶为K的“未满B树”被定义为除了其节点包含少于K个键以外满足K阶B树所有条件的数据结构。因而,经修整树T’和经提取树S是未满B树。在更改B树T的过程中产生的临时树T’和S将被称为B树,同时理解它们在过程中的某些时候可能会未满甚或过满。
现在参看图4,当构建了经修整树T’和经提取树S之后,更改经提取树S中的键以反映目录的重命名。键的更改导致标记为S’的经更改提取树。S’中的每个键是重命名目录的相应文件或子目录的新路径名。然后将经更改提取树S’插入经修整树T’。可以理解经修整树中要插入树S’键的位置可与被切除键从原始树上切除的那些位置不相同,因为这些键的值已经改变了。树S’插入经修整树T’所导致的最终B树T”现在表示已重命名目录之后的文件系统。
现在参照图5作为示例在高概念级别上对本发明实施例的命名过程进行了归纳。为便于描述,假设名为“Y”的目录要被重命名为“Z”。B树的更改从移除B树T上以“Y/”开始的所有键开始。在此例中,假设目录组件以特定字符“/”划分。由于移除了该目录的键,原始B树T变成了新的、可能未满的B树T’,而被移除键则存储在另一新的、可能未满的B树S上(步骤510)。然后更改经提取树S中的键,使得它们有前缀“Z/”而不是“Y/”。这导致可能未满的B树S’(步骤520)。此后,经更改提取树S’被插入经修整树T’中以形成新B树T”,该T”表示具有经重命名目录的文件系统(步骤530)。图5中这三个步骤的每一个都如下进一步详述。
现在参照图6详述切除操作。首先,注意重命名目录Y影响了所有满足范围查询的键v″Y/″≤v≤″Y/∞″(1)在此符号″∞″是被定义为比用于创建键的字母符号集中所有字符都大的特定字符。要从原始B树T上切除所有满足(1)中范围查询的键并将其置入新树S。
由用于处理B树中重命名的计算机程序执行的切除过程一般如下所述。重命名程序沿原始B树T而下,查找满足范围查询的键,并在找到包含这种键的节点时(比如在级别L)停止(步骤610)。程序移除该节点上落于该范围内的所有键以及键之间的指针,并将它们置于新节点中-经提取树S的根节点,被定义为在S中的级别L上(步骤620)。然后从树T中的当前节点,程序可从两个独立路径上沿树T而下。第一路径跟随″Y/″,而第二路径跟随″Y/∞″。在所经每个节点上,切除节点上所有范围内的键并在与T中移除键的相同级别上将其置于树S的新节点中。新节点的父节点是在沿T中路径而下时在树S中前级别上所创建的节点。程序继续直到它沿两个路径的每一个抵达叶节点。此时,程序修复了两个临时树T’和S的所有未满和过满节点(步骤640)。
现在描述在一实施例中实现的用于切除操作的详细步骤。为了找到包含范围内键的最高节点,程序设定变量currentNode=T的根。currentNode的内容可表示为p0v1p1v2p2...vkpk。这表示标识为currentNode的节点包含k个键v1,v2,...,vk,且其k+1个子指针为p0,p1,p2,...,pk。跟随指针pi获取的节点可标识为f(pi)。如果currentNode中没有键满足(1)中的范围查询,程序找出i使得vi<″Y/″<″Y/∞″<vi+1,并设定currentNode=f(pi)。然后设定currentLevel=currentNode的高度。该高度从B树的叶节点(具有高度为1)算起。
一旦程序找到了原始B树T上满足范围查询的节点,它创建经提取树S的根节点。此时,它找到i使得vi<″Y/″≤vi+1,以及j使得vj<″Y/∞″<vj+1。然后它通过将其内容如下设定来从currentNode中删除范围内键p0v1p1v2p2...pi-1vipivj+1pj+1...vkpk(2)应注意,currentNode可能是未满的,因为其某些键已被移除。将在如下所述的步骤中解决这个问题。
然后程序创建新B树S(可能未满)的新节点SrootNode,并赋予它由从currentNode切除的键和指针组成的内容vi+1pi+1...pj-1vj(3)注意该组合还不是有效的B树节点,因为缺少开始和最后的子指针。通过设定开始子指针为新创建节点SleftNode的地址,并设定最后子指针为另一新创建节点SrightNode的地址,来添加这两个指针。注意SrootNode可能是未满的,但对它不采取动作,因为S在构建时可能就是未满B树。还有,除了pj,currentNode的全部原始内容可用(2)或(3)存储,这是有意如此的。当前被孤立的节点f(pj)将在后来的步骤中得到解救,并与f(pi)合并。
然后重命名程序沿着B树T的范围内节点的左右边界而下,并将在T中找到的范围内键传送给树S。此时,程序设定currentLeftNode=f(pi)和currentRightNode=f(pj)。它还设定currentLevel=currentLevel-1。currentLeftNode的内容由q0u1q1u2...ulql表示,而currentRightNode的内容由r0w1r1w2...wmrm表示。当currentLevel≥1时,程序找到i使得ui<″Y/″≤ui+1,以及j使得wj≤″Y/∞″<wj+1。然后程序从currentLeftNode和currentRightNode删除范围内键,并通过将其内容如下设定来将所有剩余的键传送到currentLeftNode中q0u1q1u2q2...qi-1uiqiwr-1rj+1...wkrk(4)如果currentLevel=1,程序在叶节点上,且所有的子指针从(4)中略去。注意currentLeftNode是合并两个被删除节点的结果,所以它现在可能是过满或未满的,但此时不采取任何方法来解决这个失去平衡的问题。
然后程序通过把SleftNode的内容如下设定来把从currentLeftNode切除的范围内键传送到SleftNodeui+1qi+1...q1-1u1(5)该组合还不是有效的B树节点,因为它没有开始子指针。这通过创建称为newSleftNode的新节点,并将开始子指针设定为其地址得以修复。程序还通过将SrightNode的内容如下设定来把从currentRightNode切除的范围内键传送到SrightNoder0w1r1w2...rj-1wj(6)该组合还不是有效的B树节点,因为它没有最后子指针。这通过创建称为newSrightNode的新节点,并将最后子指针设定为其地址得以修复。还有,SrightNode可能是未满的,但不采取动作因为允许S在构建时是未满的。注意除了rj,每个来自currentLeftNode和currentRightNode的指针和键都精确地显示为表达式(4)、(5)、和(6)之一。这是有意如此的-被孤立节点f(rj)在下次迭代产生表达式(4)的步骤上将与f(qj)合并。然后程序解除对currentRightNode的存储,因为它所有的键都存储在别的地方,并不再指向它。如果currentLevel>1,通过设定currentLeftNode=f(qi),currentRightNode=f(rj),以及currentLevel=currentLevel-1,程序下移一级别。然后程序重复以上步骤,直到while循环中止。
此时,程序修复了所有如上所述的未满和过满节点。此时,程序从currentLeftNode沿着树的每个分支往上,必要时应用标准的B树拆分或合并。在此过程中,如果程序抵达具有合法尺寸的节点它仍不停止,因为其祖先节点可能还是未满或过满的。
当产生两个中间树T’和S之后,程序重命名经提取树S的键以反映目录的经改变名称。如上所述,总体操作的目标是重命名目录“Y”为“Z”。上述的具体步骤是执行如图5所示策略的步骤1,实际上是从原始B树T上切除所有以“Y/”开始的键,并将它们置入可能未满的B树S上。高级策略的步骤2是改变S的键使得它们以“Z/”而不是“Y/”开始,以获取新树S’。
在一优选实施例中,通过使用不存储键中公共前缀的B树,S中键的更改非常简单。在这种安排中,每个节点都有包含节点中所有键的公共前缀的单独字段,而键仅存储不同的后缀。注意前缀字段不包括存储在父节点中的前缀,因此对于给定键后缀的键的全值,可通过连接查找该键所经过的所有节点(从该树的根节点开始)的前缀获取。这种B树被称为前缀B树。当树S为前缀树时,改变所有键使它们以“Z/”而不以“Y/”开始就非常容易了。这是因为树S根节点的前缀字段开始时必定以“Y/”开始,则仅通过将根节点的前缀字段改变为“Z/”就可获取所需新树S’。
现在来看把树S’插入树T’的步骤,本发明利用的一相关概念是“严格插入”。B树A对B树B的插入在A的所有键都严格位于B中两个连续键之间时是严格的。在重命名目录的情形中,S’对T’的插入是严格的。这是因为原始B树T不应包含落于由重命名目录所创建的连续键范围的键,否则重命名就是非法的(因为它与现有路径名冲突)并不应得到允许。如下所述。S’插入T’的严格性大大简化了插入操作。
树S’对树T’的插入参照图7可如下简单归纳。假设S’的高度是L。为了执行该操作,程序首先找到T’树中应当插入树S’根的节点(步骤710)。此时,程序象尝试插入来自S’的键之一似的沿着树T’往下,但在达到高度L上的节点时停止。这样,程序选择哪个来自S’的键就没关系了,因为插入是严格的,所以任何选择都将导向同一路径。然后程序将来自S’根节点的所有键插入它刚抵达的节点(步骤720)。在此处,程序继续象尝试插入来自S’的键之一似的沿着树T’往下。此时,程序将沿两条不同路径而下最左路径和最右路径,并在T’的同一高度上从适当节点粘贴适当的键(步骤730)。在每个级别上,程序与三个节点工作T’节点、左S’节点、和右S’节点。T’中节点的键分成两类比S’的键小的“小”键、以及比S’的键大的“大”键。这三个节点中的键进行如下改组删除T’节点、其小键插入左S’节点、以及其大键插入右S’节点。这在直到树的叶节点(此时插入是完全的)的每个级别上完成。改组中涉及的许多节点可能是过满或未满的,意思是该树是不平衡的。在B树S’的所有键已被插入B树T’的适当节点之后,合并树的过满和/或未满节点用标准的B树操作就可轻松修复了(步骤740)。
现在描述用于执行插入的一实现中的具体步骤。通过设定currentNode=T′的根,currentLevel=T′的高度,以及L=S′的高度,程序开始。currentNode的内容被表示为p0v1p1v2p2...vKpk。当currentLevel>L时,程序找到i使得vi<″Z/″<″Z/∞″<vi+1。然后程序设定currentNode=f(pi)和currentLevel=currentLevel-1。
然后程序把S’的根节点插入T’。S’根节点S’的内容被表示为q0u1q1u2...u1q1。首先程序找到i使得vi<″Z/″<″Z/∞″<vi+1,并通过将其内容如下设定把来自S’根节点的键插入当前节点p0v1p1...pi-1viq0u1q1u2...ulqlvi+1Pr+1...vkpk(7)此时指针pi是被孤立的,通过其指向的节点内容它可在后来的步骤中获解救。还有,currentNode会变得过满,但这会在后面步骤上得到解决。
然后程序沿着S’的最左和最右节点往下,从T’中同一高度上的适当节点粘贴适当键。这通过以下步骤实现。首先,通过设定SleftNode=f(q0),SrightNode=f(ql),和currentNode=f(pi),程序在两个树上都往下一级。此时SleftNode的内容由q0u1q1u2...ulql表示,而SrightNode的内容由r0w1r1w2...wmrm表示。然后程序重复以下三个步骤直到currentNode为叶节点。首先,程序找到i使得vi<″Z/″<″Z/∞″<vi+1。这些键v1,...,vi被称为小键,而键vi+1,...,vk被称为大键。通过将其内容如下设定,程序将小键插入SleftNodep0v1...pi-1viq0u1q1u2..ulql(8)然后通过将其内容如下设定,程序将大键插入SleftNoder0w1r1w2...wmrmvj+1pj+1...vkpk(9)如果程序已经在叶节点上,略去(8)和(9)中的指针。在这些步骤中,pi被孤立,因为它未在(8)和(9)中显现。然而,被孤立节点的内容将在产生(8)和(9)表达式的下一迭代步骤中获解救。
然后程序解除对currentNode的存储,因为所有它的键已被存储在其它地方,且不再有节点指向它。通过设定SleftNode=f(q0),SrightNode=f(rm),以及currentNode=f(pi),程序通过在T’和S’树上往下一级而继续。然后程序重复while循环直至它抵达叶节点。
当合并T’树和S’树之后,SleftNode,SrightNode及其祖先节点可能是过满或未满的。为了平衡合并树T”,程序沿着树往上,从SleftNode开始且如有必要拆分或合并每个节点。然后程序从SrightNode开始作一相似巡视。在树T”正常平衡之后,响应于对目录的重命名而更改文件系统B树的过程完成。
可以理解,一种用于执行重命名B树中目录操作的新的有效方法已在此揭示。由于本发明的原理可应用于许多可能实施例,可以理解参照附图在此所述的实施例仅是说明性的,并且不应作为本发明范围的限制。例如,本领域技术人员将理解所示实施例可在排列和细节上作更改而不背离本发明的精神。尽管本发明根据软件模块或组件描述,本领域技术人员将理解这些可由硬件组件同等替代。因此,在此所述的发明预期所有在以下权利要求书以及等效方案中出现的实施例。
权利要求
1.一种改变在多个键存储其中的原始B树上连续键的范围值的方法,其特征在于,包括从所述原始B树上切除所述连续键的范围,所述对连续键范围的切除把所述原始B树转换成经修整树;存储从所述B树切除的所述连续键范围以形成经提取树;改变所述经提取树上键的值以形成经过更改的经提取树;以及把所述经过更改的经提取树插入经修整树以形成最终的B树。
2.如权利要求1所述的方法,其特征在于,所述原始B树表示分级名空间。
3.如权利要求2所述的方法,其特征在于,所述原始B树表示文件系统的分级名空间,且所述连续键范围属于所述文件系统的目录,并且其中对连续键范围的值的改变与要重命名的目录有关。
4.如权利要求3所述的方法,其特征在于,在重命名所述目录之前所述原始B树中的每个键包含所述文件系统的文件或目录的路径名。
5.如权利要求1所述的方法,其特征在于,包括在所述插入步骤之前平衡所述经修整树的步骤。
6.如权利要求1所述的方法,其特征在于,所述插入步骤包括平衡所述最终B树。
7.如权利要求1所述的方法,其特征在于,所述改变步骤包括改变所述经修整树根节点的前缀字段。
8.如权利要求1所述的方法,其特征在于,所述把经过更改的经提取树插入所述经修整树的步骤涉及一严格插入。
9.一种具有计算机可执行指令的计算机可读介质,所述指令用于执行改变在多个键存储其中的原始B树上连续键的范围值的步骤,其特征在于,包括从所述原始B树上切除所述连续键的范围,所述对连续键范围的切除把所述原始B树转换成经修整树;存储从所述B树切除的所述连续键范围以形成经提取树;改变所述经提取树上键的值以形成经过更改的经提取树;以及把所述经过更改的经提取树插入经修整树以形成最终的B树。
10.如权利要求9所述的计算机可读介质,其特征在于,所述原始B树表示分级名空间。
11.如权利要求10所述的计算机可读介质,其特征在于,所述原始B树表示文件系统的分级名空间,且所述连续键范围属于所述文件系统的目录,并且其中对连续键范围的值的改变与要重命名的目录相连。
12.如权利要求11所述的计算机可读介质,其特征在于,在重命名所述目录之前所述原始B树中的每个键包含所述文件系统的文件或目录的路径名。
13.如权利要求9所述的计算机可读介质,其特征在于,还具有计算机可执行指令,用于所述在所述插入步骤之前执行平衡所述经修整树和经提取树的步骤。
14.如权利要求9所述的计算机可读介质,其特征在于,所述插入步骤包括平衡所述最终B树。
15.如权利要求9所述的计算机可读介质,其特征在于,所述改变步骤包括改变所述经修整树根节点的前缀字段。
16.如权利要求9所述的计算机可读介质,其特征在于,所述把经过更改的经提取树插入所述经修整树的步骤涉及一严格插入。
17.一种更改表示文件系统的B树以及重命名所述文件系统中目录的方法,其特征在于,包括从所述原始B树上切除所述目录的要重命名的键,所述对所述目录键的切除把所述B树转换成经修整树;存储从所述B树切除的所述目录的键于一经提取树;改变所述经提取树上键的值以反映所述目录的新名;以及把所述带有经改变键值的经提取树插入经修整树以形成最终的B树。
18.如权利要求17所述的方法,其特征在于,所述B树中的每个键包含所述文件系统的文件或目录的路径名。
19.如权利要求17所述的方法,其特征在于,包括在所述插入步骤之前平衡所述经修整树的步骤。
20.如权利要求17所述的方法,其特征在于,所述插入步骤包括平衡所述最终B树。
21.如权利要求17所述的方法,其特征在于,所述改变经提取树上键的值的步骤包括改变所述经修整树根节点的前缀字段。
22.一种具有计算机可执行指令的计算机可读介质,所述指令用于执行更改表示文件系统的B树以及重命名所述文件系统中目录的步骤,其特征在于,包括从所述B树上切除所述目录的要重命名的键,所述对所述目录键的切除把所述原始B树转换成经修整树;存储从所述B树切除的所述目录的键于一经提取树;改变所述经提取树上键的值以反映所述目录的新名;以及把所述带有经改变键值的经提取树插入经修整树以形成最终的B树。
23.如权利要求22所述的计算机可读介质,其特征在于,所述B树中的每个键包含所述文件系统的文件或目录的路径名。
24.如权利要求22所述的计算机可读介质,其特征在于,还具有计算机可执行指令,用于执行所述在所述插入步骤之前平衡所述经修整树和经提取树的步骤。
25.如权利要求22所述的计算机可读介质,其特征在于,所述插入步骤包括平衡所述最终B树。
26.如权利要求22所述的计算机可读介质,其特征在于,所述改变经提取树上键的值的步骤包括改变所述经提取树根节点的前缀字段。
全文摘要
一种用于重命名表示分级名空间(诸如文件系统)的B树上连续键的有效方法,具有经估计时间有效性为O(logN),其中N是B树中的节点数。要重命名的所有连续键首先从原始B树上切除以形成经修整B树,且被切除节点被存储在独立的暂时的经提取B树。然后重命名经提取B树中的节点,且将经过重命名的经提取B树插入经修整B树以形成包含经重命名键的最终B树。
文档编号G06F12/00GK1691016SQ200510066628
公开日2005年11月2日 申请日期2005年4月14日 优先权日2004年4月14日
发明者J·P·麦克康米克 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1