CN111581206A - B+树操作装置及其方法 - Google Patents
B+树操作装置及其方法 Download PDFInfo
- Publication number
- CN111581206A CN111581206A CN201910198543.1A CN201910198543A CN111581206A CN 111581206 A CN111581206 A CN 111581206A CN 201910198543 A CN201910198543 A CN 201910198543A CN 111581206 A CN111581206 A CN 111581206A
- Authority
- CN
- China
- Prior art keywords
- node
- key
- tree
- search
- present application
- 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.)
- Granted
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及信息处理技术,特别地,涉及B+树的操作装置及其方法,其中,B+树操作装置,包括:节点加载单元、节点搜索单元和通过多个端口耦合至节点搜索单元的节点存储器;其中,节点加载单元根据节点索引获取节点的一个或多个关键字的地址字;节点存储器根据节点加载单元指示的地址将一个或多个关键字作为比较关键字提供给节点搜索单元;节点搜索单元将比较关键字与搜索关键字进行比较,并输出搜索结果。本申请用硬件电路来实现B+树操作,发挥了硬件电路特点的操作B+树,更快的实现了B+树操作。
Description
技术领域
本申请涉及信息处理技术,特别地,涉及利用集成电路硬件提供B+树操作装置以及使用该装置操作B+树的方法。
背景技术
B+树是一种数据结构,在文件系统、数据库等常使用B+树存储索引。图1展示了B+树。B+树包括一个根节点、多个中间节点以及多个叶节点。节点120是根节点。节点130、节点132与节点134是中间节点,中间节点是既非根节点也非叶节点的节点。节点(140、142、144……150、152、154)是叶节点。
B+树的中间节点包括不超过m个元素,将m称为B+树的阶。B+树的根节点与中间节点的每个元素,记录了关键字(Key)与指向下级节点的指针。例如,节点130包括3个元素,第一个元素的关键字为5,其指针指向节点140,第二个元素的关键字为10,其指针指向节点142,第三个元素的关键字为20,其指针指向节点144。节点的各个元素按关键字排序。
在一些实施方式中,根节点与中间节点的每个元素记录了指向下级节点的指针,但并非每个元素都包括关键字,而是根节点与中间节点包括的关键字数量比其包括的元素少一个。例如,在节点120中,可以不包括关键字“K:5”,以及在搜索节点120时,对于小于关键字“K:28”的关键字,在搜索结果中指示下级节点130,而对于不小于关键字“K:28”且小于关键字“K:65”的关键字,在搜索结果中指示下级节点134。
B+树的叶节点包括不超过m个元素。叶节点的每个元素记录了关键字(Key)与同关键字对应的值(Value)。叶节点的各个元素按关键字排序。从而B+树的所有关键字都在叶节点中有记录,并且只有从叶节点中才能获得同关键字对应的值。
现有技术中,由软件在内存中构建并操作B+树,采用例如二分法在B+树中查找关键字。二分法是软件所能获得的性能几乎最好的查找算法,但在大数据时代,数据项数量的增长,使得软件操作B+树的查找算法的性能以不能满足要求。
发明内容
需要更快的实现B+树操作。需要用硬件电路来实现B+树操作。需要能发挥硬件电路特点的操作B+树的方法。
根据本申请的第一方面,提供了根据本申请第一方面的第一B+树操作装置,包括:节点加载单元、节点搜索单元和通过多个端口耦合至节点搜索单元的节点存储器;其中,节点加载单元根据节点索引获取节点的一个或多个关键字的地址;节点存储器根据节点加载单元指示的地址将一个或多个关键字作为比较关键字提供给节点搜索单元;节点搜索单元将比较关键字与搜索关键字进行比较,并输出搜索结果。
根据本申请的第一方面的第一B+树操作装置,提供了根据本申请第一方面的第二B+树操作装置,其中,节点搜索单元将接收的搜索关键字同节点存储器提供的每一个比较关键字进行比较。
根据本申请的第一方面的第一或第二B+树操作装置,提供了根据本申请第一方面的第三B+树操作装置,其中,若提供与搜索关键字比较命中的比较关键字的节点是非叶节点,则节点搜索单元输出的搜索结果指示下级节点索引,并且节点搜索单元将下级节点索引提供给节点加载单元。
根据本申请的第一方面的第一至第三B+树操作装置之一,提供了根据本申请第一方面的第四B+树操作装置,其中,若提供与搜索关键字比较命中的比较关键字的节点是叶节点,则节点搜索单元输出的搜索结果指示被命中的比较关键字的值对应的索引。
根据本申请的第一方面的第一至第三B+树操作装置之一,提供了根据本申请第一方面的第五B+树操作装置,其中,若提供与搜索关键字比较命中的比较关键字的节点是叶节点,则节点搜索单元输出的搜索结果指示同搜索关键字对应的值。
根据本申请的第一方面的第一至第三B+树操作装置之一,提供了根据本申请第一方面的第六B+树操作装置,其中,若提供与搜索关键字比较命中的比较关键字的节点是叶节点,则节点搜索单元输出的搜索结果指示叶节点索引,以使CPU根据所述叶节点索引从外部存储器中的叶节点获取被命中的比较关键字对应的值。
根据本申请的第一方面的第三或第六B+树操作装置,提供了根据本申请第一方面的第七B+树操作装置,其中,节点存储器向节点存储单元提供被搜索关键字命中的比较关键字的端口的序号或位置指示了下级节点索引。
根据本申请的第一方面的第四B+树操作装置,提供了根据本申请第一方面的第八B+树操作装置,其中,节点存储器向节点存储单元提供被搜索关键字命中的比较关键字的端口的序号或位置指示了同所述比较关键字对应的值的索引。
根据本申请的第一方面的第四至第八B+树操作装置之一,提供了根据本申请第一方面的第九B+树操作装置,其中,获取同搜索关键字对应的值,并指示搜索完成。
根据本申请的第一方面的第三至第九B+树操作装置之一,提供了根据本申请第一方面的第十B+树操作装置,其中,若搜索关键字同比较关键字之一相同,则节点搜索单元识别出命中与搜索关键字相同的比较关键字。
根据本申请的第一方面的第三至第九B+树操作装置之一,提供了根据本申请第一方面的第十一B+树操作装置,其中,若搜索关键字排序位于相邻的第一比较关键字与第二比较关键字之间,则节点搜索单元识别出命中第一比较关键字或第二比较关键字。
根据本申请的第一方面的第一或第二B+树操作装置,提供了根据本申请第一方面的第十二B+树操作装置,其中,比较关键字与搜索关键字比较,若搜索关键字排序位于多个比较关键字所形成的区间之外,节点搜索单元输出指示未命中或查找失败的信息,作为搜索结果。
根据本申请的第一方面的第一至第十二B+树操作装置之一,提供了根据本申请第一方面的第十三B+树操作装置,其中,节点存储器中存储的每个节点占据相同大小的存储空间,所述存储空间能容纳B+树的阶数或B+树的阶数-1个关键字。
根据本申请的第一方面的第十三B+树操作装置,提供了根据本申请第一方面的第十四B+树操作装置,其中,节点存储器容纳B+树的阶数个关键字的存储空间提供B+树的阶数个或B+树的阶数+1个节点单元,每个节点单元存储节点的一个关键字。
根据本申请的第一方面的第十三B+树操作装置,提供了根据本申请第一方面的第十五B+树操作装置,其中,节点存储器容纳B+树的阶数-1个关键字的存储空间提供B+树的阶数-1个或B+树的阶数个节点单元,每个节点单元存储节点的一个关键字。
根据本申请的第一方面的第十四或第十五B+树操作装置,提供了根据本申请第一方面的第十六B+树操作装置,其中,节点存储器的存储各节点的存储空间中从起始位置的节点单元开始依次存储关键字。
根据本申请的第一方面的第十三至第十六B+树操作装置之一,提供了根据本申请第一方面的第十七B+树操作装置,其中,节点存储器中的各节点无需顺序排列。
根据本申请的第一方面的第十至第十三B+树操作装置之一,提供了根据本申请第一方面的第十八B+树操作装置,其中,节点存储器包括一个或多个可被分配以容纳节点的空闲存储空间。
根据本申请的第一方面的第一至第十八B+树操作装置之一,提供了根据本申请第一方面的第十九B+树操作装置,其中,节点存储器的端口数量等于B+树的阶数或小于B+树的阶数。
根据本申请的第一方面的第一至第十九B+树操作装置之一,提供了根据本申请第一方面的第二十B+树操作装置,其中,节点加载单元生成选出的比较关键字在节点存储器中的地址,用所述地址访问节点存储器,以使得节点存储器向节点搜索单元提供比较关键字。
根据本申请的第一方面的第一至第二十B+树操作装置之一,提供了根据本申请第一方面的第二十一B+树操作装置,其中,若节点的关键字数量大于节点搜索单元的端口数量,则节点加载单元将节点的关键字分为数量与节点搜索单元的端口数量相等的多组,并且从每组关键字中选择排序在前的第一个关键字作为比较关键字,进行多轮关键字搜索。
根据本申请的第一方面的第二十一B+树操作装置,提供了根据本申请第一方面的第二十二B+树操作装置,其中,若提供与搜索关键字比较命中的比较关键字的关键字组中的关键字数量大于节点搜索单元的端口数量,节点搜索单元输出的搜索结果指示被命中的关键字组的索引;节点加载单元根据关键字组索引对所述关键字组再次分组,并进行下一轮关键字搜索。
根据本申请的第一方面的第二十二B+树操作装置,提供了根据本申请第一方面的第二十三B+树操作装置,其中,在下一轮关键字搜索中无须向节点搜索单元提供上一轮中被命中的关键字组中被选择提供给节点搜索单元的比较关键字。
根据本申请的第一方面的第二十一B+树操作装置,提供了根据本申请第一方面的第二十四B+树操作装置,其中,若提供与搜索关键字比较命中的比较关键字的关键字组中的关键字数量小于或等于节点搜索单元的端口数量,节点搜索单元输出的搜索结果指示下层节点索引。
根据本申请的第一方面的第二十一至第二十四B+树操作装置之一,提供了根据本申请第一方面的第二十五B+树操作装置,其中,节点搜索单元将待搜索的关键字按顺序分入数量等于节点搜索单元的端口数量的组中。
根据本申请的第一方面的第二十一至第二十五B+树操作装置之一,提供了根据本申请第一方面的第二十六B+树操作装置,其中,若待搜索的关键字不能被节点搜索单元的端口数量等分,则最后一组中的关键字数量是待搜索关键字除以端口数量所得的余数。
根据本申请的第一方面的第二十一至第二十六B+树操作装置之一,提供了根据本申请第一方面的第二十七B+树操作装置,其中,通过识别节点已经进行搜索的轮数是否达到LogN(k),若搜索的轮数超过LogN(k)仍未找到被命中的关键字,则指示搜索失败。
根据本申请的第一方面的第一至第二十七B+树操作装置之一,提供了根据本申请第一方面的第二十八B+树操作装置,其中,节点搜索单元包括:多个关键字寄存器和多个比较器;每个关键字寄存器存储节点存储器提供的比较关键字之一,每个比较器将接收的搜索关键字同关键字寄存器中存储的比较关键字进行比较,并输出比较结果。
根据本申请的第一方面的第一至第二十八B+树操作装置之一,提供了根据本申请第一方面的第二十九B+树操作装置,其中,节点加载单元包括:地址计算单元;地址计算单元根据节点的起始地址和关键字数量,计算选出的一个或多个比较关键字在节点存储器中的地址,并提供给节点存储器。
根据本申请的第一方面的第二十九B+树操作装置,提供了根据本申请第一方面的第三十B+树操作装置,其中,提供给节点存储器的第i个比较关键字的地址=起始地址+i*关键字数量/N,N为端口数量。
根据本申请的第一方面的第三十B+树操作装置,提供了根据本申请第一方面的第三十一B+树操作装置,其中,节点存储器根据选出的第i个比较关键字的地址,将第i个比较关键字加载到节点搜索单元的第i个关键字寄存器。
根据本申请的第一方面的第一至第三十一B+树操作装置之一,提供了根据本申请第一方面的第三十二B+树操作装置,还包括节点索引寄存器堆;节点索引寄存器堆存储节点在节点存储器中的地址。
根据本申请的第一方面的第三十二B+树操作装置,提供了根据本申请第一方面的第三十三B+树操作装置,其中,节点加载单元根据节点索引从节点索引寄存器堆中获取节点索引所指示的节点在节点存储器中地址。
根据本申请的第一方面的第三十三B+树操作装置,提供了根据本申请第一方面的第三十四B+树操作装置,其中,若向B+树添加的待添加关键字的节点包括B+树的阶数个关键字,还分裂待添加关键字的节点。
根据本申请的第一方面的第三十四B+树操作装置,提供了根据本申请第一方面的第三十五B+树操作装置,其中,在节点存储器中分配存储空间容纳新节点,所述新节点中记录由待添加关键字的节点分裂出的部分关键字;关键字搬移单元将待添加的关键字添加到所述节点或所述新节点;以及节点索引寄存器堆中记录新节点的地址。
根据本申请的第一方面的第三十五B+树操作装置,提供了根据本申请第一方面的第三十六B+树操作装置,其中,在节点存储器容纳的新节点中按顺序从起始地址开始存放被搬移的关键字。
根据本申请的第一方面的第三十五或第三十六B+树操作装置,提供了根据本申请第一方面的第三十七B+树操作装置,其中,在节点存储器容纳的待添加关键字的节点中删除被分裂出的部分关键字。
根据本申请的第一方面的第三十五至第三十七B+树操作装置之一,提供了根据本申请第一方面的第三十八B+树操作装置,其中,根据待添加的关键字在待添加关键字的节点的关键字被分裂前的所有关键字中的排序位置,确定将被添加的关键字添加到所述节点或所述新节点。
根据本申请的第一方面的第三十五至第三十八B+树操作装置之一,提供了根据本申请第一方面的第三十九B+树操作装置,其中,在待添加关键字的节点的父节点中添加同新节点关联的关键字。
根据本申请的第一方面的第三十五至第三十九B+树操作装置之一,提供了根据本申请第一方面的第四十B+树操作装置,其中,节点索引寄存器堆记录新节点的地址。
根据本申请的第一方面的第三十二至第四十B+树操作装置之一,提供了根据本申请第一方面的第四十一B+树操作装置,其中,在节点索引寄存器堆中按节点在B+树中的顺序记录节点的地址。
根据本申请的第一方面的第四十一B+树操作装置,提供了根据本申请第一方面的第四十二B+树操作装置,其中,节点索引寄存器堆中记录新插入的节点地址,并且节点索引寄存器堆中记录的、排序在被插入节点之后的所有节点的地址依次后移。
根据本申请的第一方面的第三十四至第四十二B+树操作装置之一,提供了根据本申请第一方面的第四十三B+树操作装置,其中,若待添加关键字的节点的关键字数量小于B+树的阶数,关键字搬移单元将待添加关键字添加到待添加关键字的节点。
根据本申请的第一方面的第三十三至第四十三B+树操作装置之一,提供了根据本申请第一方面的第四十四B+树操作装置,其中,响应于合并第一节点与第二节点,计算单元将第二节点的所有关键字搬移到第一节点,被搬移的关键字按顺序放置在第一节点原有的关键字之后。
根据本申请的第一方面的第四十四B+树操作装置,提供了根据本申请第一方面的第四十五B+树操作装置,其中,节点索引寄存器堆将记录的被删除节点的地址被移除,将排序在被删除节点之后的所有节点的地址被依次前移。
根据本申请的第一方面的第三十二至第四十五B+树操作装置之一,提供了根据本申请第一方面的第四十六B+树操作装置,其中,节点索引寄存器堆为多组寄存器,每组寄存器记录B+树每一层次的节点地址。
根据本申请的第二方面,提供了根据本申请第二方面的第一B+树操作方法,包括如下步骤:根据节点的索引获取节点的存储地址和节点的关键字数量;根据存储地址和关键字数量从所述节点的关键字中选出一个或多个关键字作为比较关键字;将选出的一个或多个比较关键字与搜索关键字进行比较,并输出搜索结果。
根据本申请的第二方面的第一B+树操作方法,提供了根据本申请第二方面的第二B+树操作方法,其中,将搜索关键字同每一个比较关键字进行比较。
根据本申请的第二方面的第一或第二B+树操作方法,提供了根据本申请第二方面的第三B+树操作方法,其中,若提供与搜索关键字比较命中的比较关键字的节点是非叶节点,则输出的搜索结果指示下级节点索引。
根据本申请的第二方面的第一至第三B+树操作方法之一,提供了根据本申请第二方面的第四B+树操作方法,其中,若提供与搜索关键字比较命中的比较关键字的节点是叶节点,并且节点存储器存储B+树的全部节点;则输出的搜索结果指示被命中的比较关键字的值对应的索引,以使CPU根据所述索引获取同搜索关键字对应的值。
根据本申请的第二方面的第一至第三B+树操作方法之一,提供了根据本申请第二方面的第五B+树操作方法,其中,若提供与搜索关键字比较命中的比较关键字的节点是叶节点,并且节点存储器存储B+树的全部节点;则输出的搜索结果指示同搜索关键字对应的值。
根据本申请的第二方面的第一至第三B+树操作方法之一,提供了根据本申请第二方面的第六B+树操作方法,其中,若提供与搜索关键字比较命中的比较关键字的节点是叶节点,并且节点存储器存储根节点与中间节点;则输出的搜索结果指示叶节点索引,以使CPU根据所述叶节点索引从外部存储器中的叶节点获取被命中的比较关键字对应的值。
根据本申请的第二方面的第三至第六B+树操作方法之一,提供了根据本申请第二方面的第七B+树操作方法,其中,若搜索关键字同比较关键字之一相同,则命中与搜索关键字相同的比较关键字。
根据本申请的第二方面的第三至第六B+树操作方法之一,提供了根据本申请第二方面的第八B+树操作方法,其中,若搜索关键字排序位于相邻的第一比较关键字与第二比较关键字之间,则命中第一比较关键字或第二比较关键字。
根据本申请的第二方面的第一或第二B+树操作方法,提供了根据本申请第二方面的第九B+树操作方法,其中,比较关键字与搜索关键字比较,若搜索关键字排序位于多个比较关键字所形成的区间之外,输出指示未命中或查找失败的信息,作为搜索结果。
根据本申请的第二方面的第一至第九B+树操作方法之一,提供了根据本申请第二方面的第十B+树操作方法,其中,生成选出的比较关键字在节点存储器中的地址,用所述地址访问节点存储器,以使得节点存储器提供比较关键字。
根据本申请的第二方面的第一至第十B+树操作方法之一,提供了根据本申请第二方面的第十一B+树操作方法,其中,若节点的关键字数量大于节点存储器的端口数量,则将节点的关键字分为数量与节点搜索单元的端口数量相等的多组,并且从每组关键字中选择排序在前的第一个关键字作为比较关键字,进行多轮关键字搜索。
根据本申请的第二方面的第十一B+树操作方法,提供了根据本申请第二方面的第十二B+树操作方法,其中,若提供与搜索关键字比较命中的比较关键字的关键字组中的关键字数量大于节点搜索单元的端口数量,输出的搜索结果指示被命中的关键字组的索引;根据关键字组索引对所述关键字组再次分组,并进行下一轮关键字搜索。
根据本申请的第二方面的第十二B+树操作方法,提供了根据本申请第二方面的第十三B+树操作方法,其中,在下一轮关键字搜索中无须提供上一轮中被命中的关键字组中被选择处的比较关键字。
根据本申请的第二方面的第十一B+树操作方法,提供了根据本申请第二方面的第十四B+树操作方法,其中,若提供与搜索关键字比较命中的比较关键字的关键字组中的关键字数量小于或等于节点搜索单元的端口数量,输出的搜索结果指示下层节点索引。
根据本申请的第二方面的第十一至第十四B+树操作方法之一,提供了根据本申请第二方面的第十五B+树操作方法,其中,将待搜索的关键字按顺序分入数量等于节点搜索单元的端口数量的组中。
根据本申请的第二方面的第十一至第十五B+树操作方法之一,提供了根据本申请第二方面的第十六B+树操作方法,其中,若待搜索的关键字不能被节点搜索单元的端口数量等分,则最后一组中的关键字数量是待搜索关键字除以端口数量所得的余数。
根据本申请的第二方面的第十一至第十六B+树操作方法之一,提供了根据本申请第二方面的第十七B+树操作方法,其中,通过识别节点已经进行搜索的轮数是否达到LogN(k),若搜索的轮数超过LogN(k)仍未找到被命中的关键字,则指示搜索失败。
根据本申请的第二方面的第一至第十七B+树操作方法之一,提供了根据本申请第二方面的第十八B+树操作方法,其中,从节点索引寄存器堆获取节点在节点存储器中的存储地址。
根据本申请的第二方面的第十八B+树操作方法,提供了根据本申请第二方面的第十九B+树操作方法,其中,根据节点索引从节点索引寄存器堆中获取节点索引所指示的节点在节点存储器中地址。
根据本申请的第二方面的第十九B+树操作方法,提供了根据本申请第二方面的第二十B+树操作方法,其中,响应于向B+树添加关键字,若待添加关键字的节点包括B+树的阶数个关键字,还分裂待添加关键字的节点。
根据本申请的第二方面的第二十B+树操作方法,提供了根据本申请第二方面的第二十一B+树操作方法,还包括以下步骤:在节点存储器中分配存储空间容纳新节点;在所述新节点中记录由待添加关键字的节点分裂出的部分关键字;将待添加的关键字添加到所述节点或所述新节点;并且向节点索引寄存器堆中记录新节点的地址。
根据本申请的第二方面的第二十一B+树操作方法,提供了根据本申请第二方面的第二十二B+树操作方法,其中,从起始地址开始按顺序在新节点中存放被搬移的关键字。
根据本申请的第二方面的第二十一或第二十二B+树操作方法,提供了根据本申请第二方面的第二十三B+树操作方法,其中,在所述待添加关键字的节点中删除被分裂出的部分关键字。
根据本申请的第二方面的第二十一至第二十三B+树操作方法之一,提供了根据本申请第二方面的第二十四B+树操作方法,其中,根据待添加的关键字在待添加关键字的节点的关键字被分裂前的所有关键字中的排序位置,确定将被添加的关键字添加到所述节点或所述新节点。
根据本申请的第二方面的第二十一至第二十四B+树操作方法之一,提供了根据本申请第二方面的第二十五B+树操作方法,其中,在待添加关键字的节点的父节点中添加同新节点关联的关键字。
根据本申请的第二方面的第二十一至第二十五B+树操作方法之一,提供了根据本申请第二方面的第二十六B+树操作方法,其中,更新节点索引寄存器堆,在节点索引寄存器堆中记录新节点的地址。
根据本申请的第二方面的第十八至第二十六B+树操作方法之一,提供了根据本申请第二方面的第二十七B+树操作方法,其中,在节点索引寄存器堆中按节点在B+树中的顺序记录节点的地址。
根据本申请的第二方面的第二十七B+树操作方法,提供了根据本申请第二方面的第二十八B+树操作方法,其中,响应于接收到指示被插入节点的索引,节点索引寄存器堆中记录的、排序在被插入节点之后的所有节点的地址被依次后移,并在节点索引寄存器堆中记录新插入的节点地址以顺序记录节点的地址。
根据本申请的第二方面的第二十至第二十八B+树操作方法之一,提供了根据本申请第二方面的第二十九B+树操作方法,其中,若待添加关键字的节点的关键字数量小于B+树的阶数,则将待添加关键字添加到待添加关键字的节点。
根据本申请的第二方面的第十九至第二十九B+树操作方法之一,提供了根据本申请第二方面的第三十B+树操作方法,其中,响应于合并第一节点与第二节点,将第二节点的所有关键字搬移到第一节点,被搬移的关键字按顺序放置在第一节点原有的关键字之后。
根据本申请的第二方面的第三十B+树操作方法,提供了根据本申请第二方面的第三十一B+树操作方法,其中,响应于接收到指示被删除节点的索引,节点索引寄存器堆中记录的被删除节点的地址被移除,排序在被删除节点之后的所有节点的地址被依次前移。
根据本申请的第二方面的第十八至第三十一B+树操作方法之一,提供了根据本申请第二方面的第三十二B+树操作方法,其中,将节点索引寄存器堆分为多组寄存器,每组寄存器记录B+树每一层次的节点地址。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1展示了B+树;
图2A展示了根据本申请实施例的B+树操作装置的框图;
图2B展示了节点存储器中的数据组织;
图2C展示了节点存储器中的节点的数据组织;
图3展示了根据本申请实施例搜索B+树的流程图;
图4A展示了根据本申请又一实施例的B+树操作装置的框图;
图4B展示了根据本申请又一实施例搜索B+树的流程图;
图5A展示了根据本申请再一实施例在节点中搜索关键字的示意图;
图5B展示了根据本申请再一实施例搜索B+树的流程图;
图6展示了根据本申请依然又一实施例的节点搜索的示意图;
图7A与7B展示了根据本申请实施例的B+树插入关键字的过程的示意图;
图7C与7D展示了根据本申请实施例的B+树插入过程的示意图;
图8展示了根据本申请依然再一实施例的B+树操作装置的框图;
图9展示了根据本申请依然另一实施例的向B+树添加关键字的流程图。
具体实施方式
下面结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图2A展示了根据本申请实施例的B+树操作装置的框图。
根据本申请实施例的B+树操作装置包括节点存储器210、节点搜索单元240与节点加载单元270。例如CPU 200的外部单元操作B+树操作装置来完成对B+树操作的加速。例如,CPU 200向B+树操作装置提供被搜索的关键字(Key),B+树操作装置向CPU 200返回B+树中是否包括该关键字以及记录该关键字的节点(元素)和/或同关键字对应的值。
节点存储器210存储B+树的部分或全部节点。例如,节点存储器210存储B+树的根节点与所有非根节点。节点存储器210包括多个端口,各端口耦合到节点搜索单元240,以向节点搜索单元240提供待搜索的节点的一个或多个元素(关键字)。作为举例,节点存储器210仅向节点搜索单元240提供关键字,而不提供B+树节点中记录的同关键字对应的指向子节点的指针或索引。
节点搜索单元240将例如CPU 200提供的关键字(称为搜索关键字)同节点存储器210提供的多个关键字(称为比较关键字)的每个进行比较,以识别搜索关键字同比较关键字是否一致。例如,节点搜索单元240将搜索关键字并行地同每个比较关键字进行比较。作为举例,若搜索关键字同比较关键字之一相同,节点搜索单元240获取该比较关键字在节点存储器210提供的多个关键字之中的位置或序号(称为节点索引),作为搜索结果。依然作为举例,若搜索关键字排序位于相邻的第一比较关键字与第二比较关键字之间,节点搜索单元240获取该第一或第二比较关键字在节点存储器210提供的多个关键字之中的位置或序号,作为搜索结果(称为节点索引)。依然作为举例,若搜索关键字排序位于多个比较关键字所形成的区间之外,节点搜索单元输出指示未命中或查找失败的信息,作为搜索结果。
节点搜索单元240的搜索结果被提供给节点加载单元270。节点加载单元270根据从节点搜索单元240获取的节点索引,计算该节点索引对应的节点(或节点的一个或多个比较关键字)在节点存储器210中的地址,并将计算的地址提供给节点存储器210,以指示节点存储器210将对应的一个或多个比较关键字提供给节点搜索单元240。
在一个实施例中,节点存储器210存储根节点与中间节点,但不存储叶节点。若节点搜索单元240给出的搜索结果为指示叶节点的节点索引,B+树操作装置指示搜索完成,并将节点索引提供给例如CPU 200。在又一个例子中,节点存储器210存储根节点、中间节点与叶节点。若节点搜索单元240给出的搜索结果为指示叶节点的节点索引,节点加载单元270还将叶节点中的一个或多个关键字提供给节点搜索单元240。节点搜索单元240再根据叶节点的关键字给出搜索结果,并指示搜索完成。可选地,节点搜索单元240还在搜索结果中指示叶节点的关键字所对应的值。
图2B展示了节点存储器中的数据组织。
节点存储器210存储多个节点。对于特定的B+树,节点所包括的关键字的数量不超过B+树的阶数m。从而节点存储器210中的每个节点,占据相同大小的存储空间,每个节点所占据的存储空间能容纳m个关键字。对于所包括的关键字数量小于m的节点,其在节点存储器210中也占据能容纳m个关键字的存储空间。
在可选的实施方式中,m阶B+树的根节点或中间节点所包括的关键字数量不超过m-1,从而每个节点所占据的存储空间能容纳m-1个关键字。
节点存储器210中的各节点是无序的。从而,B+树的下层节点,在节点存储器210中不是必然被存储在上层节点之后。属于相同层级的节点,也不必按其关键字的顺序排列于节点存储器210中。
节点存储器210还可包括一个或多个空闲存储空间。空闲存储空间可被分配以容纳节点。节点存储器210中的一个或多个节点也可被删除。
图2C展示了节点存储器中的节点的数据组织。
根据本申请的一个实施方式,m阶B+树的根节点或中间节点所包括的关键字数量为m,相应地,节点存储器210中,为存储m阶B+树的节点而提供m个或m+1个节点单元,每个节点单元存储节点的一个元素(例如,关键字)。作为举例,一中间节点具有k个元素(k<m),在节点存储器210中,这k个元素中的关键字被存储在用于该节点的存储空间的前k个节点单元中(例如,节点单元0、节点单元1……节点单元k-1)。依然作为举例,第一中间节点具有k1个元素,第二中间节点具有k2个元素,k1不等于k2,节点存储器210中,为第一中间节点与第二中间节点分配相同大小的存储空间,以及在为第一中间节点分配的存储空间中,从起始位置开始的k1个节点单元存储k1个元素,而节点单元k1到节点单元m空闲;在为第二中间节点分配的存储空间中,从起始位置开始的k2个节点单元存储k2个元素,而节点单元k2到节点单元m空闲。
节点存储器210的每个端口,将节点单元之一的关键字提供给节点搜索单元240。作为举例,节点存储器210的端口数量等于B+树的阶数m。作为又一个例子,节点存储器210的端口数量小于B+树的阶数m。
根据本申请的又一个实施方式,m阶B+树的根节点或中间节点所包括的关键字数量为m-1,相应地,节点存储器210中,为存储m阶B+树的节点而提供m-1个或m个节点单元。
图3展示了根据本申请实施例搜索B+树的流程图。
诸如CPU 200(也参看图2A)的外部装置向B+树操作装置提供搜索关键字,并请求在B+树中寻找该搜索关键字。
B+树操作装置记录了B+树的节点在节点存储器210中的存储位置,以及节点中所包括的关键字数量。节点加载单元270获取根节点(也将当前正在被搜索的节点称为当前节点)的索引(310),根据根节点索引得到根节点在节点存储器210中的存储位置。节点加载单元270还获取根节点的关键字数量(320)。作为举例,B+树的阶数m大于节点存储器210到节点搜索单元240的端口数量。节点加载单元270根据根节点在节点存储器210中的存储位置与根节点的关键字数量,生成根节点的一个或多个关键字在节点存储器210中的地址,用这些地址访问节点存储器210,以使得节点存储器210向节点搜索单元240提供根节点的一个或多个关键字(330)。
节点搜索单元240将节点存储器210提供的一个或多个关键字同搜索关键字进行比较,并输出搜索结果。提供被搜索关键字命中的关键字的端口具有在多个端口中的序号或位置,该序号或位置指示了下级节点或同关键字对应的值的索引。例如,也参看图1,若搜索关键字命中了节点130的关键字“K:5”,而关键字“K:5”是节点130的第一个关键字,因而对应的下级节点是节点130的所有子节点中排序在第一(最前)的子节点140。节点搜索单元240输出的搜索结果,指示了下级节点或同关键字对应的值的索引。在又一个例子中,若搜索关键字小于节点的第一个关键字,则对应的下级节点是该节点的所有子节点的排序在第一(最前)的子节点;若搜索关键字不小于节点的第一个关键字且小于该节点的第二个关键字,则对应的下级节点是该节点的所有子节点的排序在第二的子节点。
根据下层节点是叶节点还是非叶节点,节点搜索单元240将搜索结果提供给CPU200或节点加载单元270(340)。
若当前节点是叶节点,节点搜索单元240输出的搜索结果指示例如同被命中的关键字的值对应的索引(380),CPU 200根据该索引获取同搜索关键字对应的值。可选地,节点搜索单元240输出的搜索结果指示同搜索关键字对应的值本身。
若当前节点不是叶节点,节点搜索单元240输出的搜索结果指示下层节点的索引(350)。例如,若搜索关键字命中了节点130的关键字“K:5”,节点搜索单元240输出的搜索结果指示下层节点140的索引。下层节点的索引被提供给节点加载单元270。节点加载单元270根据接收的下层节点的索引,获取该下层节点在节点存储器210中的存储地址以及该下层节点所包括的关键字的数量(360)。节点加载单元270根据该下层节点在节点存储器210中的存储位置与该节点的关键字数量,生成该节点的一个或多个关键字在节点存储器210中的地址,用这些地址访问节点存储器210,以使得节点存储器210向节点搜索单元240提供该节点的多个或所有关键字(370)。
以及节点存储器210将关键字提供给节点搜索单元240,返回图3的步骤340,节点搜索单元240将节点存储器210提供的关键字同搜索关键字进行比较,并输出搜索结果。
图4A展示了根据本申请又一实施例的B+树操作装置的框图。
根据图4A的实施例的B+树操作装置包括节点存储器410、节点搜索单元440与节点加载单元470。例如CPU 400的外部单元操作B+树操作装置来完成对B+树操作的加速。
节点存储器410存储B+树的根节点与所有非根节点。DRAM 480存储包括叶节点的B+树的所有节点。
例如CPU 400向节点搜索单元440提供搜索关键字。节点搜索单元440根据搜索关键字查找B+树,并将命中的叶节点的索引作为搜索结果提供给CPU 400。可选地或进一步地,在搜索关键字未命中B+树的任何关键字时,节点搜索单元440向CPU 400指示搜索失败。
CPU 400根据节点搜索单元440提供的叶节点索引,从DRAM 480获取叶节点的多个关键字,并进一步从叶节点中获取被命中的关键字以及同该关键字对应的值。
图4B展示了根据本申请又一实施例搜索B+树的流程图。
诸如CPU400(也参看图4A)的外部装置向B+树操作装置提供搜索关键字,并请求在B+树中寻找该搜索关键字。
节点加载单元470获取根节点(也将当前正在被搜索的节点称为当前节点)的索引(420),根据根节点索引得到根节点在节点存储器410中的存储位置。节点加载单元470还获取根节点的关键字数量(422)。节点加载单元470根据根节点在节点存储器410中的存储位置与根节点的关键字数量,生成根节点的一个或多个关键字在节点存储器410中的地址,用这些地址访问节点存储器410,以使得节点存储器410向节点搜索单元440提供根节点的多个或所有关键字(424)。
节点搜索单元440将节点存储器410提供的一个或多个关键字同搜索关键字进行比较,并输出搜索结果,搜索结果指示了下层节点的索引(426)。
根据下层节点是叶节点还是非叶节点,节点搜索单元440将搜索结果提供给CPU400或节点加载单元470(428)。若搜索结果指示的下层节点是叶节点,节点搜索单元440将搜索结果提供给CPU 400。若搜索结果指示的下层节点是非叶节点,节点搜索单元440将搜索结果提供给节点加载单元470。
CPU 400响应于收到搜索结果,根据搜索结果指示的叶节点的索引生成叶节点在DRAM480中的存储地址,访问DRAM 480以得到叶节点中的关键字与对应的值,将搜索关键字命中的叶节点关键字对应的值作为搜索结果(430)。
节点加载单元470响应于收到节点搜索单元440提供的搜索结果,节点加载单元470根据接收的下层节点的索引,获取该下层节点在节点存储器410中的存储地址以及该下层节点所包括的关键字的数量(432)。节点加载单元470根据该下层节点在节点存储器410中的存储位置与该节点的关键字数量,生成该节点的一个或多个关键字在节点存储器410中的地址,用这些地址访问节点存储器410,以使得节点存储器410向节点搜索单元440提供该节点的多个或所有关键字(434)。
以及节点存储器410将关键字提供给节点搜索单元440,返回图4B的步骤426,节点搜索单元440将节点存储器410提供的关键字同搜索关键字进行比较,并输出搜索结果。
图5A展示了根据本申请再一实施例在节点中搜索关键字的示意图。
根据图5A的实施例,B+树的阶数m较大,从而B+树的节点可包括数量较多的关键字。在m大于节点存储器的端口数量的情况下,节点搜索单元需要多次迭代来完成对一个节点的所有关键字的搜索。
参看图5A,B+树的阶数m为512,而节点存储器到节点搜索单元的端口数量为8,即节点存储器每次向节点搜索单元最多提供8个关键字。
根据图5A的实施例,将待搜索的当前节点的元素分为多组。组的数量等于例如节点存储器的端口数量。从而,节点存储器的每个端口将来自一组的关键字提供给节点搜索单元。在图5A的例子中,同一节点的512个关键字被分为8组(等于节点存储器的端口数量),第一组包括前64(512/8)个的关键字,第二组包括第65到第127个关键字,以此类推。而搜索关键字为例如“12”。
对一节点的关键字的搜索通过3轮完成。第一轮中,从每组关键字中选择各组的排序在前的第一个关键字。例如,从第一组选择第1个关键字(“0”),从第二组选择第1个关键字(“64”),以此类推,从第8组选择第1个关键字(“448”)。在第一轮中,节点存储器将所选择的8个关键字提供给节点搜索单元。节点搜索单元输出命中的关键字组(例如第一组(包含关键字0~63))。节点搜索单元根据图2A或图4A的节点搜索单元的相同方式输出命中的关键字组,从而可使用节点搜索单元270或节点搜索单元470。
继续参看图5A,在第一轮中,节点搜索单元指示命中了第一组关键字(包含关键字0~63)。在第二轮中,将包含关键字0~63的第一组关键字的元素分为多组。作为举例,组的数量依然等于节点存储器的端口数量。关键字0~63的第一组关键字包括64个元素,被进一步等分为8组。以及在第二轮中再次从每组关键字中选择各组的排序在前的第一个关键字。例如,从第一组(关键字0~7)选择第1个关键字(“0”),从第二组(关键字8~15)选择第1个关键字(“8”),以此类推,从第8组(关键字56~63)选择第1个关键字(“56”)。在第二轮中,节点存储器将所选择的8个关键字提供给节点搜索单元。节点搜索单元输出命中的关键字组(例如,包含关键字8~15的第二组)。可选地,由于包含关键字0~7的第一组的第1个关键字(“0”)在上一轮中已经被提供给节点搜索单元,在第二轮中无须再次提供包含关键字0~7的第一组的第1个关键字(“0”),一般地,在下一轮中无须向节点搜索单元提供的关键字是上一轮中被命中的组中被选择提供给节点搜索单元的关键字。或者,在下一轮中无须向节点搜索单元提供的关键字是下一轮中由第一组提供的关键字,或者下一轮的所有关键字的排序第一的关键字。
第二轮的关键字搜索中,命中了第二组。第二组包括8个关键字,其关键字数量已不大于节点存储器的端口数量。从而在第三轮中,将这8个关键字都提供给节点搜索单元,并完成对节点的搜索。由于第二轮命中了第二组,在第三轮关键字搜索中,无须向节点搜索单元提供该第二组的第一个关键字(“8”)。
在每一轮关键字搜索完成后,响应于节点搜索单元指示的搜索结果,节点加载单元将从搜索结果指示的索引(或序号)识别为关键字组的索引(或序号),并确定所命中的关键字组中的关键字数量。在所命中的关键字组中的关键字数量大于节点存储器的端口数量的情况下,节点加载单元将所命中的关键字组中的关键字进一步分为多组(组的数量等于节点存储器的端口数量),并确定每组的第一个关键字在节点存储器中的地址,以指示节点存储器将每组的第一个关键字提供给节点搜索单元,以进行下一轮的关键字搜索。在所命中的关键字组中的关键字数量不大于节点存储器的端口数量的情况下,节点加载单元将所命中的关键字组中的关键字都提供给节点搜索单元,以进行最后一轮的关键字搜索。
节点加载单元知晓当前搜索是否是最后一轮的关键字搜索。对于最后一轮关键字搜索的结果,节点加载单元将搜索结果指示的索引(或序号)识别为下层节点的索引。
图5B展示了根据本申请再一实施例搜索B+树的流程图。
图5B展示的流程图,同图5A展示的示意图相对应。诸如CPU的外部装置向B+树操作装置提供搜索关键字,并请求在B+树中寻找该搜索关键字。
节点加载单元获取根节点(也将当前正在被搜索的节点称为当前节点)的索引,根据根节点索引得到根节点在节点存储器中的存储位置(地址),节点加载单元还获取根节点的关键字数量(510)。节点加载单元根据根节点在节点存储器中的存储位置与根节点的关键字数量,生成根节点的一个或多个关键字在节点存储器中的地址,用这些地址访问节点存储器,以使得节点存储器向节点搜索单元提供根节点的多个关键字,并通过一轮或多轮关键字搜索,使得节点搜索单元输出下层节点的索引(512)。
根据下层节点是叶节点还是非叶节点,节点搜索单元将搜索结果提供给CPU或节点加载单元(514)。若搜索结果指示的下层节点是叶节点,节点搜索单元将搜索结果提供给CPU(516)。若搜索结果指示的下层节点是非叶节点,节点搜索单元将搜索结果提供给节点加载单元。
CPU响应于收到搜索结果,根据搜索结果访问DRAM以得到叶节点中的关键字与对应的值,将搜索关键字命中的叶节点关键字对应的值作为搜索结果。
节点加载单元响应于收到节点搜索单元提供的搜索结果,节点加载单元根据接收的下层节点的索引,得到该下层节点在节点存储器中的存储位置(地址),节点加载单元还获取该下层节点的关键字数量(517)。节点加载单元根据该下层节点在节点存储器中的存储位置与根节点的关键字数量,生成该下层节点的一个或多个关键字在节点存储器中的地址,用这些地址访问节点存储器,以使得节点存储器向节点搜索单元提供该下层节点的多个关键字,并通过一轮或多轮关键字搜索,使得节点搜索单元输出该下层节点的进一步的下层节点的索引(518)。
节点加载单元与节点搜索单元协同完成步骤512与步骤518。图5B中的步骤540到步骤554展示了步骤512/步骤518的具体操作过程。
响应于获得了待搜索节点的索引,节点加载单元获得待搜索节点的地址与待搜索的关键字数量(540)。若待搜索的关键字数量大于节点搜索单元的并行度(542),需要通过多轮关键字搜索来完成对当前节点的搜索。节点搜索单元的并行度,指节点搜索单元能同时将搜索关键字与其比较的比较关键字的数量,也即节点存储器耦合到节点搜索单元的端口数量。若待搜索的关键字数量不大于节点搜索单元的并行度,节点加载单元指示节点存储器将所有待搜索的关键字提供给节点搜索单元,节点搜索单元输出包括下层节点索引的搜索结果(552)。
可选地,在步骤542,对于阶数m与节点搜索单元的并行度N已知的实施例,为待搜索节点进行搜索的轮数的最大值是已知的(LogN(m))。而若已知待搜索节点的关键字数量k与节点搜索单元的并行度N,为待搜索节点进行搜索的轮数为(LogN(k)向上取整)。从而在步骤542无须比较待搜索的关键字数量与节点搜索单元的并行度,而只需识别为该节点已经进行搜索的轮数是否达到了(LogN(k)向上取整)。若为该节点已经进行搜索的轮数已经达到了(LogN(k)向上取整),则转向步骤552,否则转向步骤544。
若待搜索的关键字数量大于节点搜索单元的并行度(542),节点加载单元将待搜索的关键字分为多组(544)。作为举例,节点搜索单元将待搜索的关键字按顺序分入等于节点搜索单元的并行度的数量的组,每组中具有基本相同的关键字。若待搜索的关键字不能被节点搜索单元的并行度等分,则最后一组中包括的关键字数量是待搜索关键字除以节点搜索单元并行度所得的余数。
从每组中选择排序在最前的关键字提供给节点搜索单元。根据待搜索节点的地址,与各组中关键字的数量,得到所选出的各关键字所在的节点单元的地址(546)。将所选出的各关键字所在的节点单元的地址提供给节点存储器,使得节点存储器将所选择的各关键字提供给节点搜索单元(548)。
节点搜索单元比较搜索关键字与节点存储器提供的各所选择的关键字,并输出同搜索关键字一致的比较关键字所在的关键字组(554)。节点搜索单元将关键字组输出给节点加载单元。节点加载单元获取该关键字组中的待搜索的关键字数量,并返回步骤542继续处理。
图6展示了根据本申请依然又一实施例的节点搜索的示意图。
节点加载单元670向节点存储器610提供多个关键字的地址,节点存储器610根据节点加载单元670提供的地址,将多个关键字提供给节点搜索单元640。节点搜索单元640包括多个关键字寄存器(652、654、656……65N),每个关键字寄存器存储节点存储器610提供的关键字之一。
节点搜索单元640还接收搜索关键字,通过多个比较器(642、644、646……64N)将搜索关键字同各个关键字寄存器中存储的比较关键字进行比较。根据各比较器的比较结果,输出搜索结果,搜索结果中指示了关键字寄存器之一的索引。例如,比较器642指示关键字652的值小于搜索关键字,而比较器644指示关键字寄存器654的值大于搜索关键字,那么搜索结果指示关键字寄存器652的索引,关键字寄存器652所记录的关键字所对应的下级节点或关键字组被搜索结果指示。
节点加载单元670根据收到的下级节点的索引获取待搜索节点的起始地址与待搜索节点的关键字数量。或者节点加载单元670根据关键字组的索引获取待搜索的关键字组的起始地址与关键字组的关键字数量。节点加载单元670识别节点搜索单元640提供的搜索结果指示下级节点的索引还是关键字组的索引。
节点加载单元670的地址计算单元,根据起始地址与关键字数量,计算一个或多个关键字在节点存储器610中的地址,并提供给节点存储器。作为举例,将“起始地址+i*关键字数量/N”作为提供给节点存储器610的第i个关键字的地址,其中N为节点搜索单元的并行度。以及根据第i个关键字的地址获取的关键字,被加载到节点搜索单元640的第i个关键字寄存器。
图7A与7B展示了根据本申请实施例的B+树插入关键字的过程的示意图。
图7A展示了阶数为8的B+树。节点700是根节点,节点710-节点715是二级节点,其中节点711中记录了8个关键字(对应未示出的8个下级节点)。
图7B展示了向图7A的B+树中加入关键字K38后得到的新B+树。根据关键字K38在B+树的关键字中的排序,将关键字K38添加到二级节点711中。记录关键字K38的叶子节点与可能存在的节点711的其他下级节点未示出。
由于图7A中,节点711已包括8个关键字(同B+树的阶数m相同),已不能再容纳更多关键字。为将关键字K38添加到节点711,节点711分裂为节点711’(参看图7B)与节点716。节点711’中记录了节点711的关键字K28、K30、K35、K50与新添加的节点K38,以及为了满足B+树的关键字排序的要求,新添加的节点K38被排序在节点K50之前。节点716记录了节点711的关键字K52、K58、K60与K64。与各关键字对应的下级节点的指针同关键字相关联地被记录在节点711’或节点716。
由于节点711分裂为节点711’与节点716,还修改节点700,在节点700中添加指示节点716的指针与关键字。图7B的节点700的关键字K52指示了新添加的节点716,以及为满足关键字排序要求,节点700的关键字K52被添加到关键字K28与关键字K65之间。
图7C与7D展示了根据本申请实施例的B+树插入过程的示意图。
根据本申请的实施例,节点存储器仅存储节点的关键字,而不存储同关键字对应的指针。
B+树的节点与节点内的关键字,在逻辑上是按关键字排序的。从而对B+树的插入/删除操作,将引起对节点/节点内关键字的重排序,并导致性能下降。根据本申请的实施例,还提供了节点索引寄存器堆,用于存储对B+树的各节点的地址,从而消除了对节点存储器的节点的重排序过程。
图7C展示了存储同图7A对应的B+树的示意图。节点索引寄存器堆750存储B+树各节点在节点存储器中的地址。节点索引寄存器堆750中存储的各节点的地址是排序的,按节点的关键字的顺序排序。图7C中,节点索引寄存器堆750仅展示了B+树的二级节点的地址,可以理解地,在节点索引寄存器750也存储B+树的根节点的地址,与其他非叶节点的地址。在可选地的实施例中,节点存储器存储了B+树的所有节点(包括叶节点),而对应的节点索引寄存器750中也记录了B+树的所有节点(包括叶节点)的地址。
图7D展示了存储同图7B对应的B+树的示意图。由于向二级节点711插入了关键字K38,并引起节点711分裂为节点711’和节点716。新的节点711’占据节点存储器中为节点711提供的存储空间,从而节点索引寄存器堆750中记录的指示节点711’的地址无须改变。新的节点716被写入节点存储器的空闲空间。图7D中,展示为二级节点2’(716),其还指示节点716为该B+树的二级节点中排序在第3的节点(节点711排序在第二,节点710排序在第一)。可见,虽然节点716排序在节点711之后与节点712之前,但在节点存储器中,节点716并不需存储在节点712之前,而是可占据节点存储器的任意的空闲空间。
为了记录B+树的节点的顺序,参看图7D,在节点索引寄存器750中,按顺序记录B+树的各节点。从而,在节点索引寄存器750中,节点716的地址被记录在节点711的地址之后,而节点712-节点715的地址被依次后移。
所属领域技术人员可以理解地,对于m阶B+树的根节点或中间节点所包括的关键字最大数量为m-1的情形,向其中插入关键字的过程同图7A-图7D展示的过程类似。
图8展示了根据本申请依然再一实施例的B+树操作装置的框图。
根据图8的实施例的B+树操作装置包括节点存储器810、节点搜索单元840、节点加载单元870、节点索引寄存器堆860与关键字搬移单元820。例如CPU 800的外部单元操作B+树操作装置来完成对B+树操作的加速。
节点存储器810存储B+树的根节点与所有非根节点。DRAM 880存储包括叶节点的B+树的所有节点。
节点搜索单元840向节点加载单元870提供指示了节点索引的搜索结果。搜索结果指示例如下级节点是当前搜索节点的第i个子节点。节点加载单元870根据节点索引,访问节点索引寄存器堆860,从中获得节点索引所指示的节点在节点存储器810中的地址,并提供给节点加载单元870,节点加载单元870根据节点的地址获得节点中每个关键字的地址。
在B+树的节点被插入时,例如CPU 800向节点索引寄存器堆860指示被插入节点的索引。节点索引寄存器堆860中记录的、排序在被插入节点之后的所有节点的地址被依次后移,并在节点索引寄存器堆860中记录新插入的节点的地址。
可选地,节点索引寄存器堆860被分组,例如第一组包括单一的寄存器,用于记录根节点的地址,第二组包括m个(m为B+树的阶数)寄存器,用于记录二级节点的地址,第三组包括m*m个寄存器,用于记录三级节点的地址。从而在B+树的节点被插入时,仅移动被插入的节点所属的组中的寄存器。
在B+树的节点被删除时,例如CPU 800向节点索引寄存器堆860指示被删除节点的索引。节点索引寄存器堆860中记录的被删除节点的地址被移除,排序在被删除节点之后的所有节点的地址被依次前移。
关键字搬移单元820在节点分裂/合并时,将节点的一个或多个关键字搬移到另一节点。例如CPU 800向关键字搬移单元820指示要搬移的节点和/或关键字。例如,响应于节点711分裂,将节点711的后一半关键字搬移到新节点716(也参看图7A-图7D),并按顺序放置在新节点716的从起始地址开始的各节点单元中。又例如,响应于合并第一节点与第二节点,将第二节点的所有关键字,搬移到第一节点,被搬移的关键字按顺序放置在第一节点原有的关键字之后。可以理解地,若B+树中,关键字按降序排列,节点分裂或合并时,有不同的节点搬移方式。
图9展示了根据本申请依然另一实施例的向B+树添加关键字的流程图。
令待添加的关键字为K。为添加关键字K,在B+树中搜索关键字K,并得到要容纳关键字K的叶节点。
在一个例子中,节点存储器记录了叶节点的关键字,通过步骤910开始的流程处理向叶节点添加关键字的过程。
在另一个例子中,节点存储器仅记录非叶节点而不记录叶节点的关键字,那么由CPU访问要容纳关键字K的叶节点,向其中插入关键字K。CPU识别被插入了关键字K的叶节点是否需要分裂。对于需要分裂的叶节点,CPU获取该叶节点的父节点,并通过步骤910开始的流程处理向该父节点加入指示与分裂出的新叶节点的对应的关键字的过程。
将要被添加关键字的节点称为当前节点。识别当前节点包括的关键字数量是否小于m,其中m是被操作的B+树的阶数。若当前节点已经包括m个关键字,向其添加新的关键字将引起当前节点的分裂,则通过步骤916开始的流程进行处理。若当前节点已经包括的关键字数量小于m,向其添加新的关键字不会引起当前节点的分裂,而仅将新的关键字添加到当前节点(918)。以及新加入关键字后,使当前节点的多个关键字在节点存储器中依然是排序的。
在步骤916,创建新节点,将当前节点的部分关键字搬移到新节点。在节点存储器分配空闲存储空间容纳新节点。例如,将当前节点的排序在后的一半关键字搬移到新节点,在新节点中,从起始地址开始按顺序存放被搬移的这些关键字,以及在当前节点中删除被搬移的关键字。也参看图8,关键字搬移单元820实施从当前节点到新节点的节点搬移。
在步骤920,将要被添加的关键字添加到当前节点或新节点。根据要被添加的关键字在当前节点的关键字被搬移前的所有关键字中的排序位置,确定将被添加的关键字添加到当前节点还是新节点。
在步骤924,更新节点索引寄存器堆,在节点索引寄存器堆中记录新节点的地址,以及使得在节点索引寄存器堆中各节点的地址被顺序的记录。
由于向B+树添加了新节点,还要在新节点的父节点中记录同新节点关联的关键字。获取当前节点的父节点(作为待插入关键字的节点)与同新节点关联的关键字,并返回步骤910,并通过步骤910开始的流程处理向当前节点的父节点加入同新节点关联的关键字关键字。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (10)
1.一种B+树操作装置,包括:节点加载单元、节点搜索单元和通过多个端口耦合至节点搜索单元的节点存储器;其中,节点加载单元根据节点索引获取节点的一个或多个关键字的地址;节点存储器根据节点加载单元指示的地址将一个或多个关键字作为比较关键字提供给节点搜索单元;节点搜索单元将比较关键字与搜索关键字进行比较,并输出搜索结果。
2.根据权利要求1所述的B+树操作装置,其中,节点搜索单元将接收的搜索关键字同节点存储器提供的每一个比较关键字进行比较。
3.根据权利要求1或2所述的B+树操作装置,其中,若提供与搜索关键字比较命中的比较关键字的节点是非叶节点,则节点搜索单元输出的搜索结果指示下级节点索引,并且节点搜索单元将下级节点索引提供给节点加载单元。
4.根据权利要求1或2所述的B+树操作装置,其中,节点存储器中存储的每个节点占据相同大小的存储空间,所述存储空间能容纳B+树的阶数或B+树的阶数-1个关键字。
5.根据权利要求1或2所述的B+树操作装置,其中,节点加载单元生成选出的比较关键字在节点存储器中的地址,用所述地址访问节点存储器,以使得节点存储器向节点搜索单元提供比较关键字。
6.根据权利要求1或2所述的B+树操作装置,其中,若节点的关键字数量大于节点搜索单元的端口数量,则节点加载单元将节点的关键字分为数量与节点搜索单元的端口数量相等的多组,并且从每组关键字中选择排序在前的第一个关键字作为比较关键字,进行多轮关键字搜索。
7.根据权利要求6所述的B+树操作装置,其中,通过识别节点已经进行搜索的轮数是否达到LogN(k),若搜索的轮数超过LogN(k)仍未找到被命中的关键字,则指示搜索失败。
8.根据权利要求1或2所述的B+树操作装置,其中,节点搜索单元包括:多个关键字寄存器和多个比较器;每个关键字寄存器存储节点存储器提供的比较关键字之一,每个比较器将接收的搜索关键字同关键字寄存器中存储的比较关键字进行比较,并输出比较结果。
9.一种B+树操作方法,包括如下步骤:
根据节点的索引获取节点的存储地址和节点的关键字数量;
根据存储地址和关键字数量从所述节点的关键字中选出一个或多个关键字作为比较关键字;
将选出的一个或多个比较关键字与搜索关键字进行比较,并输出搜索结果。
10.根据权利要求9所述的B+树操作方法,其中,若节点的关键字数量大于节点存储器的端口数量,则将节点的关键字分为数量与节点搜索单元的端口数量相等的多组,并且从每组关键字中选择排序在前的第一个关键字作为比较关键字,进行多轮关键字搜索。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910198543.1A CN111581206B (zh) | 2019-03-15 | 2019-03-15 | B+树操作装置及其方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910198543.1A CN111581206B (zh) | 2019-03-15 | 2019-03-15 | B+树操作装置及其方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111581206A true CN111581206A (zh) | 2020-08-25 |
CN111581206B CN111581206B (zh) | 2021-06-15 |
Family
ID=72113258
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910198543.1A Active CN111581206B (zh) | 2019-03-15 | 2019-03-15 | B+树操作装置及其方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111581206B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022206170A1 (zh) * | 2021-03-29 | 2022-10-06 | 华为技术有限公司 | 一种数据处理方法、服务端及系统 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120221538A1 (en) * | 2011-02-28 | 2012-08-30 | International Business Machines Corporation | Optimistic, version number based concurrency control for index structures with atomic, non-versioned pointer updates |
CN102915340A (zh) * | 2012-02-29 | 2013-02-06 | 浙江工商大学 | 一种扩展的基于b+树对象文件系统 |
CN102968498A (zh) * | 2012-12-05 | 2013-03-13 | 华为技术有限公司 | 数据处理方法及装置 |
CN103765381A (zh) * | 2011-08-29 | 2014-04-30 | 英特尔公司 | 对b+树的并行操作 |
CN103810223A (zh) * | 2012-11-15 | 2014-05-21 | 中国科学院软件研究所 | 一种基于数据分组的内存数据组织查询方法 |
CN104331497A (zh) * | 2014-11-19 | 2015-02-04 | 中国科学院自动化研究所 | 一种利用向量指令并行处理文件索引的方法及装置 |
CN105930345A (zh) * | 2016-04-05 | 2016-09-07 | 国网浙江省电力公司湖州供电公司 | 基于分布式实时数据库的层次索引方法 |
-
2019
- 2019-03-15 CN CN201910198543.1A patent/CN111581206B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120221538A1 (en) * | 2011-02-28 | 2012-08-30 | International Business Machines Corporation | Optimistic, version number based concurrency control for index structures with atomic, non-versioned pointer updates |
CN103765381A (zh) * | 2011-08-29 | 2014-04-30 | 英特尔公司 | 对b+树的并行操作 |
CN102915340A (zh) * | 2012-02-29 | 2013-02-06 | 浙江工商大学 | 一种扩展的基于b+树对象文件系统 |
CN103810223A (zh) * | 2012-11-15 | 2014-05-21 | 中国科学院软件研究所 | 一种基于数据分组的内存数据组织查询方法 |
CN102968498A (zh) * | 2012-12-05 | 2013-03-13 | 华为技术有限公司 | 数据处理方法及装置 |
CN104331497A (zh) * | 2014-11-19 | 2015-02-04 | 中国科学院自动化研究所 | 一种利用向量指令并行处理文件索引的方法及装置 |
CN105930345A (zh) * | 2016-04-05 | 2016-09-07 | 国网浙江省电力公司湖州供电公司 | 基于分布式实时数据库的层次索引方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022206170A1 (zh) * | 2021-03-29 | 2022-10-06 | 华为技术有限公司 | 一种数据处理方法、服务端及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN111581206B (zh) | 2021-06-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5497485A (en) | Method and apparatus for implementing Q-trees | |
KR101467589B1 (ko) | 데이터 구조를 가지는 하나 이상의 장치 판독가능 매체, 및장치 실행가능 명령어를 구비한 하나 이상의 장치 판독가능 매체 | |
US7062499B2 (en) | Enhanced multiway radix tree and related methods | |
RU2005105582A (ru) | База данных и система управления знаниями | |
TWI636372B (zh) | 用於基因定序資料的資料處理方法及系統 | |
CN105787126B (zh) | k-d树生成方法和k-d树生成装置 | |
US6687688B1 (en) | System and method for data management | |
WO2004036589A1 (en) | Virtual content addressable memory with high speed key insertion and deletion and pipelined key search | |
CN111581206B (zh) | B+树操作装置及其方法 | |
CN114840487A (zh) | 分布式文件系统的元数据管理方法和装置 | |
CN112817530B (zh) | 一种多线程安全高效读写有序数据的方法 | |
CN111581205B (zh) | 具有节点索引的b+树操作装置及其方法 | |
US7933885B1 (en) | Longest matching prefix search engine with hierarchical decoders | |
US7302377B1 (en) | Accelerated event queue for logic simulation | |
US8341153B2 (en) | Apparatus and method for heap sorting with collapsed values and selective value expansion | |
JP2001202277A (ja) | データ処理システム | |
CN111581440B (zh) | 硬件加速b+树操作装置及其方法 | |
CN108984780B (zh) | 基于支持重复键值树数据结构管理磁盘数据的方法和装置 | |
JP3370787B2 (ja) | 文字配列検索方法 | |
US11822530B2 (en) | Augmentation to the succinct trie for multi-segment keys | |
CN111581204B (zh) | 多b+树操作装置及其方法 | |
CN113779029A (zh) | 一种数据查询的方法及装置 | |
US6901396B1 (en) | Packed radix search tree implementation | |
KR100907827B1 (ko) | 포워딩 테이블 검색 장치 및 방법 | |
US10762263B1 (en) | Searching for values of a bus in digital waveform data |
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 |