硬件加速B+树操作装置及其方法与流程

文档序号:21976608发布日期:2020-08-25 19:09阅读:141来源:国知局
硬件加速B+树操作装置及其方法与流程

本申请涉及信息处理技术,特别地,涉及在soc中利用软件与硬件结合方式操作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+树的每个非根节点的元素数量不少于m/2。

b+树的非根节点的各个元素按关键字排序,排序最前的元素在例如最左边,并且该元素的关键字存在于该节点的父节点中。

现有技术中,由软件在内存中构建并操作b+树,采用例如二分法在b+树中查找关键字。二分法是软件所能获得的性能几乎最好的查找算法,但在大数据时代,数据项数量的增长,使得软件操作b+树的查找算法的性能以不能满足要求。



技术实现要素:

需要更快的实现b+树操作。需要用硬件电路来协助软件完成b+树操作。将b+树操作的搜索过程由硬件完成,而由软件控制b+树搜索硬件,并完成b+树的完整操作。从而有效降低执行软件的cpu的任务负载,并提高b+树操作的执行效率。

根据本申请的第一方面,提供了根据本申请第一方面的第一存储设备,包括:cpu和b+树操作装置;cpu从操作b+树的命令中提取关键字,并用提取的关键字操作b+树操作装置对b+树进行搜索;b+树操作装置将搜索结果提供给cpu。

根据本申请的第一方面的第一存储设备,提供了根据本申请第一方面的第二存储设备,其中,b+树操作装置包括:一个或多个搜索单元;搜索单元根据接收的关键字在b+树中寻找被命中的节点。

根据本申请的第一方面的第一或第二存储设备,提供了根据本申请第一方面的第三存储设备,还包括存储器,存储器存储一个或多个b+树。

根据本申请的第一方面的第二或第三存储设备,提供了根据本申请第一方面的第四存储设备,其中,搜索单元将提取的关键字与b+树的节点的各个关键字进行比较,以搜索被命中的节点。

根据本申请的第一方面的第一至第四存储设备之一,提供了根据本申请第一方面的第五存储设备,其中,若操作b+树的命令是搜索命令,cpu则根据搜索结果得到命令处理结果,以将命令处理结果提供给发出操作b+树的命令的主机。

根据本申请的第一方面的第一至第四存储设备之一,提供了根据本申请第一方面的第六存储设备,若操作b+树的命令是插入命令或删除命令,cpu则根据操作b+树的命令和搜索结果,更新b+树。

根据本申请的第一方面的第六存储设备,提供了根据本申请第一方面的第七存储设备,其中,若操作b+树的命令是插入命令或删除命令,则搜索结果指示待插入或删除的节点,或待插入或删除的节点及其关键字。

根据本申请的第一方面的第六或第七存储设备,提供了根据本申请第一方面的第八存储设备,其中,若操作b+树的命令是插入命令,并且搜索结果指示了被命中的节点的被命中的关键字,则cpu将被命中的关键字对应的值更新为插入命令所指示的值。

根据本申请的第一方面的第六或第七存储设备,提供了根据本申请第一方面的第九存储设备,其中,若操作b+树的命令是插入命令,搜索结果指示了命中节点且未命中关键字,则cpu向被命中的节点中添加插入命令所指示的关键字或关键字连同对应的值。

根据本申请的第一方面的第九存储设备,提供了根据本申请第一方面的第十存储设备,其中,若被命中的节点所包含的关键字数量不小于阈值,则cpu将被命中的节点分裂为两个节点,将插入命令所指示的关键字或关键字连同对应的值添加两个节点之一。

根据本申请的第一方面的第十存储设备,提供了根据本申请第一方面的第十一存储设备,其中,插入命令所指示的关键字依据其值在被命中的节点中排序的位置被添加至分裂后的两个节点之一。

根据本申请的第一方面的第十或第十一存储设备,提供了根据本申请第一方面的第十二存储设备,其中,响应于被命中的节点发生节点分裂,向分裂后的两个节点的共同父节点添加索引了分裂的新节点的关键字。

根据本申请的第一方面的第十二存储设备,提供了根据本申请第一方面的第十三存储设备,其中,响应于向父节点添加了索引分裂的新节点的关键字,cpu向发出操作b+树的主机指示插入命令处理完成。

根据本申请的第一方面的第十二存储设备,提供了根据本申请第一方面的第十四存储设备,其中,若被命中的节点或分裂后的两个节点的共同父节点是根节点,并且被命中的节点或分裂后的两个节点的共同父节点所包含的关键字数量不小于阈值,则cpu向发出操作b+树的主机指示插入命令处理失败。

根据本申请的第一方面的第六或第七存储设备,提供了根据本申请第一方面的第十五存储设备,其中,若操作b+树的命令是删除命令,搜索结果指示了被命中的节点的被命中的关键字,则cpu从被命中的节点中删除被命中的关键字。

根据本申请的第一方面的第十五存储设备,提供了根据本申请第一方面的第十六存储设备,其中,响应于被命中的节点中删除被命中的关键字,cpu向发出操作b+树的命令的主机指示删除命令处理完成。

根据本申请的第一方面的第十五或第十六存储设备,提供了根据本申请第一方面的第十七存储设备,其中,若被命中的节点的关键字数量不大于第一阈值,并且被命中的节点与其右兄弟节点的关键字之和大于b+树的阶数,cpu则将右兄弟节点的排序最前的关键字搬移到被命中的节点,从被命中的节点中删除被命中的关键字。

根据本申请的第一方面的第十七存储设备,提供了根据本申请第一方面的第十八存储设备,其中,响应于将右兄弟节点的排序最前的关键字搬移到被命中的节点,更新右兄弟节点的父节点中索引右兄弟节点的关键字。

根据本申请的第一方面的第十八存储设备,提供了根据本申请第一方面的第十九存储设备,其中,响应于更新右兄弟节点的父节点中索引右兄弟节点的关键字,cpu向发出操作b+树的命令的主机指示删除命令处理完成。

根据本申请的第一方面的第十七至第十九存储设备之一,提供了根据本申请第一方面的第二十存储设备,其中,若被命中的节点与其右兄弟节点的关键字之和不大于b+树的阶数,并且被命中的节点与其左兄弟节点的关键字数量之和大于b+树的阶数,则cpu将左兄弟节点的排序最后的关键字搬移到被命中的节点,作为被命中的节点排序最前的关键字,从被命中的节点中删除被命中的关键字。

根据本申请的第一方面的第二十存储设备,提供了根据本申请第一方面的第二十一存储设备,其中,响应于将左兄弟节点的排序最后的关键字搬移到被命中的节点,作为被命中的节点排序最前的关键字,更新被命中节点的父节点中索引被命中节点的关键字。

根据本申请的第一方面的第二十存储设备,提供了根据本申请第一方面的第二十二存储设备,其中,响应于从被命中的节点中删除被命中的关键字以及更新被命中的节点的父节点中索引被命中的节点的关键字,cpu向发出操作b+树的命令的主机指示删除命令处理完成。

根据本申请的第一方面的第二十至第二十二存储设备之一,提供了根据本申请第一方面的第二十三存储设备,其中,若被命中的节点与其左兄弟节点的关键字数量之和不大于b+树的阶数,则合并被命中的节点与其兄弟节点之一。

根据本申请的第一方面的第二十三存储设备,提供了根据本申请第一方面的第二十四存储设备,其中,若合并被命中的节点与其左兄弟节点,则被删除节点的父节点作为新的被命中的节点,索引了被删除节点的关键字作为新的被命中的关键字,从新的被命中的节点中删除新的被命中的关键字。

根据本申请的第一方面的第二十四存储设备,提供了根据本申请第一方面的第二十五存储设备,其中,响应于从根节点中删除索引了被删除节点的关键字,cpu向发出操作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+树操作方法之一,提供了根据本申请第二方面的第七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+树的阶数,则将左兄弟节点的排序最后的关键字搬移到被命中的节点,为被命中的节点排序最前的关键字,从被命中的节点中删除被命中的关键字。

根据本申请的第二方面的第二十一b+树操作方法,提供了根据本申请第二方面的第二十二b+树操作方法,其中,响应于将左兄弟节点的排序最后的关键字搬移到被命中的节点,作为被命中的节点排序最前的关键字,更新被命中节点的父节点中索引被命中节点的的关键字。

根据本申请的第二方面的第二十一b+树操作方法,提供了根据本申请第二方面的第二十三b+树操作方法,响应于从被命中的节点中删除被命中的关键字,以及更新被命中的节点的父节点中索引被命中的节点的关键字,向发出操作b+树的命令的主机指示删除命令处理完成。

根据本申请的第二方面的第二十一至第二十三b+树操作方法之一,提供了根据本申请第二方面的第二十四b+树操作方法,其中,若被命中的节点与其左兄弟节点的关键字数量之和不大于b+树的阶数,则合并被命中的节点与其兄弟节点之一。

根据本申请的第二方面的第二十四b+树操作方法,提供了根据本申请第二方面的第二十五b+树操作方法,若合并被命中的节点与其左兄弟节点,则被删除节点的父节点作为新的被命中的节点,索引了被删除节点的关键字作为新的被命中的关键字,从新的被命中的节点中删除新的被命中的关键字。

根据本申请的第二方面的第二十五b+树操作方法,提供了根据本申请第二方面的第二十六b+树操作方法,其中,响应于从根节点中删除索引了被删除节点的关键字,向发出操作b+树的命令的主机指示删除命令处理完成。

根据本申请的第二方面的第七或第八b+树操作方法,提供了根据本申请第二方面的第二十七b+树操作方法,其中,若操作b+树的命令是删除命令,并且搜索结果指示b+树中不包括被搜索的关键字,则向发出操作b+树的命令的主机指示删除命令处理失败。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。

图1展示了b+树;

图2展示了根据本申请实施例的b+树操作装置的框图;

图3a展示了使用根据本申请实施例的b+树操作装置操作b+树的示意图;

图3b展示了使用根据本申请实施例的b+树操作装置操作b+树的流程图;

图4是根据本申请实施例的b+树操作装置操作多个b+树的流程图;

图5a展示了根据本申请实施例的b+树操作装置框图;

图5b展示了根据本申请又一实施例的b+树操作装置框图;

图5c展示了根据图5a或图5b的实施例处理搜索命令的流程图;

图6a展示了根据本申请再一实施例的b+树操作装置框图;

图6b展示了根据图6a的实施例处理插入命令的流程图;

图7a展示了根据本申请依然再一实施例的b+树操作装置框图;

图7b展示了根据图7a的实施例处理删除命令的流程图;

图8展示了根据本申请又一实施例的b+树操作装置框图;

图9展示了根据图8的实施例的流程图;

图10是根据图8的实施例的处理b+树插入命令的流程图;

图11是根据图8的实施例的处理b+树删除命令的流程图。

具体实施方式

下面结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

图2展示了根据本申请实施例的b+树操作装置的框图。

根据本申请实施例的b+树操作装置包括命令接口210、一个或多个搜索单元(220……22n)、数据缓存230、dma单元240、扩展命令处理单元270、总线280与存储器290。存储器290存储了一颗或多个b+树(b+树0……b+树n)。

例如cpu的外部单元操作b+树操作装置来完成对b+树操作的加速。cpu将操作b+树的命令通过命令接口210提供给b+树操作装置。操作b+树的命令(下文中简称为命令)包括在b+树中搜索指定的关键字(key)的命令(称为搜索命令)、向b+树插入指定的关键字的命令(称为插入命令)和/或从b+树中删除指定的关键字的命令(称为删除命令)等。命令还指示例如要访问的b+树之一、同关键字关联的指针或值等,其中b+树的根节点或中间节点记录的关键字关联于指针,而b+树的叶节点记录的关键字关联于值。

命令接口210接收外部单元提供的命令,并将命令提供给搜索单元和/或扩展命令处理单元。搜索单元和/或扩展命令处理单元对命令处理结果被提供给命令接口210,从而外部单元通过命令接口210获得命令的处理结果。

搜索单元(220……22n)根据从命令中获取的关键字搜索b+树。搜索单元(220……22n)通过总线280访问存储器290,以获取存储器290记录的b+树的节点的关键字,以识别命令中的关键字是否命中了节点的关键字,以处理搜索命令。

数据缓存230存储b+树的节点的一个或多个关键字,或者还存储同关键字对应的指针/值。dma单元240在数据缓存230与存储器290之间搬移数据,所搬移的数据包括b+树的节点的关键字和/或同关键字对应的指针/值。扩展命令处理单元270访问数据缓存230。dma单元240通过总线280访问存储器290。可选地,扩展命令处理单元270通过总线280访问存储器290。

图3a展示了使用根据本申请实施例的b+树操作装置操作b+树的示意图。

b+树操作装置的命令接口单元310包括例如命令接收缓存312、命令结果缓存314、同搜索单元一一对应的命令队列(360、361……、36n)、扩展命令队列316以及搜索结果队列318。命令接收缓存312和/或命令结果缓存314被用队列、fifo(先进先出缓存)、共享存储器等方式提供。可选地,命令队列(360、361……、36n)、扩展命令队列316以及搜索结果队列318被以共享存储器、fifo等方式提供。

外部单元将命令填充到命令接收缓存312来向b+树操作装置提供操作b+树的命令,从命令结果缓存314获取命令的处理结果。命令接收缓存312中的命令,被根据其要操作的b+树,被添加到同该b+树对应的搜索单元关联的命令队列,以将命令提供给搜索单元。

搜索完成后(350),对于搜索命令(352),搜索单元给出命令处理结果,并添加到命令结果缓存314。对于插入命令或删除命令(352),搜索单元根据命令中的关键字对b+树实施搜索后,还将命令添加到扩展命令队列316以及将对b+树实施搜索的结果添加到搜索结果队列318。可以理解地,扩展命令队列316中的命令与搜索结果队列318中的搜索结果相关联,使得命令同其关联的搜索结果被同时从扩展命令队列316与搜索结果队列318的各自中取出。

扩展命令处理单元340从扩展命令队列316与搜索结果队列318获取命令与搜索结果,并对命令进行进一步的处理,例如向b+树添加关键字或从b+树中删除关键字。扩展命令处理单元340对命令的进一步处理完成后(342),将命令的处理结果添加到命令结果缓存314,使得外部单元得以从命令结果缓存314获得命令处理结果。

图3b展示了使用根据本申请实施例的b+树操作装置操作b+树的流程图。

响应于命令接收缓存312被添加了命令,或者周期性地检查命令接收缓存312被添加了命令,从命令接收缓存312获取外部单元提供给b+树处理装置的命令(370)。根据获取的命令要访问的b+树,将命令添加到命令队列(360、361……36n)之一。可选地,将获取的命令提供给可用的搜索单元(372),或工作负载低的搜索单元,而不依赖于命令要访问的b+树来选择搜索单元。

命令队列(360、361……36n)中的命令被提供给同其耦合的搜索单元。搜索单元根据命令指示的关键字(与b+树)搜索b+树(374),并得到搜索结果。若命令是搜索命令(376),将命令的处理结果(搜索结果)添加到命令结果缓存314(384)。若命令不是搜索命令(例如,是插入命令或删除命令)(376),将命令的处理结果(搜索结果)添加到搜索结果队列318(378),以及将命令添加到扩展命令队列316(380)。

扩展命令处理单元342从扩展命令队列316获取命令并对命令进行进一步的处理(382)。例如,对于插入命令,将命令指定的关键字(连同对应的值)添加到搜索结果指示的节点,或者对于删除命令,从搜索结果指示的节点中将命令指定的关键字(连同对应的值)删除。扩展命令处理单元342对命令的进一步处理完成后,将命令处理结果添加到命令结果(例如命令处理成功或失败)缓存314(384)。

图4是根据本申请实施例的b+树操作装置操作多个b+树的流程图。

外部单元将命令填充到命令接口310的命令接收缓存312来向b+树操作装置提供操作b+树的命令(也参看图3a)。响应于命令接收缓存312非空(410),从命令接收缓存312获取外部单元提供给b+树处理装置的命令(420)。根据获取的命令要访问的b+树,将命令添加到命令队列(360、361……36n)之一。作为举例,命令队列(360、361……36n)被设置了标识,命令队列的标识来源于其包含的命令所访问的b+树;或者同命令队列对应的搜索单元被设置了标识,搜索单元的标识来源于其正在处理的命令所访问的b+树。根据从命令接收缓存312获取的命令所访问的b+树的标识,识别是否存在搜索单元正在处理的命令访问的b+树的标识同从命令接收缓存获取的待处理命令具有相同的标识(430)。若待处理的命令的标识同搜索单元之一(记为搜索单元a)正在处理的命令访问的b+树的标识相同,则将该待处理的命令发送给同该搜索单元a对应的命令队列(460)。若待处理的命令的标识同任何搜索单元正在处理的命令访问的b+树的标识都不相同,则为该待处理的命令分配搜索单元(440),以及将该待处理命令提供给同为其分配的搜索单元对应的命令队列(450)。作为举例,在步骤440,选择当前未处理命令的空闲搜索单元作为被分配的搜索单元。以及若当前没有空闲搜索单元,则等待搜索单元处理完命令而变为空闲后,再选择空闲搜索单元作为被分配的搜索单元。作为又一个例子,在步骤440,选择工作负载低的搜索单元作为被分配的搜索单元,其中依据同搜索单元对应的命令队列中包括的命令的数量得到搜索单元的负载。

图5a展示了根据本申请实施例的b+树操作装置框图。

根据本申请实施例的b+树操作装置包括命令接口510、一个或多个搜索单元(520……52n)、数据缓存530、dma单元540、总线580与存储器590。

存储器590存储了一颗或多个b+树(b+树0……b+树n)。而数据缓存530存储了被操作的b+树的一个或多个节点(节点0……节点n)。

例如cpu的外部单元操作b+树操作装置来完成对b+树操作的加速。cpu将操作b+树的命令通过命令接口210提供给b+树操作装置。

命令接口210接收外部单元提供的搜索命令,并将搜索命令提供给搜索单元(520……52n)之一。搜索单元对命令处理的结果被提供给命令接口510,从而外部单元通过命令接口510获得命令的处理结果。

搜索单元(520……52n)根据从命令中获取的关键字搜索b+树。搜索单元(520……52n)从数据缓存530获取b+树的节点的各个关键字,将搜索命令同节点的各关键字进行比较以识别被命中的关键字,并根据被命中的关键字从数据缓存530获取下一节点的关键字,或者在当前节点是叶节点时,根据被命中的关键字获得搜索命令的处理结果。

若数据缓存530中不包括搜索单元要访问的节点,数据缓存530利用dma单元540通过总线580从存储器590将要访问的节点加载到数据缓存530。

图5b展示了根据本申请又一实施例的b+树操作装置框图。

同图5a展示的实施例相比,图5b的实施例的b+树操作装置的搜索单元(570……57n)通过总线580直接从存储器590获取要访问的b+树的节点(节点0……节点n),而不使用数据缓存530。

图5c展示了根据图5a或图5b的实施例处理搜索命令的流程图。

响应于获取了搜索命令,搜索单元(520……52n)之一根据搜索命令获取要访问的b+树的根节点,作为处理搜索命令过程中最初的当前节点。搜索单元获取当前节点的关键字数量(560)。节点的关键字被按顺序放置在存储器590或数据缓存530中,从而根据节点的关键字数量得以确定节点的各关键字的存放位置,以及读取当前节点的一个或多个关键字(562)。搜索单元比较搜索命令指示的关键字与节点的关键字,以获得被命中的关键字(564)。作为举例,若搜索命令指示的关键字排序在当前节点的第i关键字与第i+1关键字之间,则搜索命令命中当前节点的第i关键字。

搜索单元识别当前节点是否为叶节点(566)。若当前节点是叶节点(566),根据被命中的当前节点的关键字生成搜索结果,并将搜索结果保存在命令接口的结果队列(569)。若当前节点不是叶节点(566),根据被命中的当前节点的关键字获取下一节点,并将下一节点作为当前节点(568),以及返回步骤560对新的当前节点继续处理。

图6a展示了根据本申请再一实施例的b+树操作装置框图。

根据本申请实施例的b+树操作装置包括命令接口610、一个或多个搜索单元(620……62n)、数据缓存630、dma单元640、扩展命令处理单元670、总线680与存储器690。

存储器690存储了一颗或多个b+树(b+树0……b+树n)。例如,节点692是b+树的根节点,节点(693、694与695)是节点692的子节点。

搜索单元(620……62n)处理搜索命令。扩展命令处理单元670处理插入命令和/或删除命令。

扩展命令处理单元670从命令接口610(也参看图3,例如,通过扩展命令队列316)获得例如插入命令。根据获得的插入命令,扩展命令处理单元670在数据缓存630中维护被更新的节点的一个或多个关键字,以及指示dma单元640将数据缓存630中的一个或多个关键字搬移到存储器690以更新存储器690中的节点,和/或通过dma单元640从存储器690中将节点的一个或多个关键字搬移到数据缓存630。扩展命令处理单元670响应于插入命令被处理完成,而将命令处理结果提供给命令接口610,从而外部单元通过命令接口610获得命令的处理结果。

图6b展示了根据图6a的实施例处理插入命令的流程图。

也参看图3a与图3b,插入命令被分为两个阶段处理。第一阶段,由搜索单元(620……62n)对插入命令进行搜索,找到要插入关键字的叶节点;第二阶段,由扩展命令处理单元670向叶节点插入关键字,以及响应于可能的节点分裂而更新一个或多个上级节点。

参看图6b,展示的流程从获取搜索单元的搜索结果中指示的当前节点开始(650),可以理解的,扩展命令处理单元670对b+树的插入操作,从被命中的叶节点开始。

扩展命令处理单元670获取当前节点的关键字数量(652),以确定在当前节点被插入新关键字后,是否要发生节点分裂(654)。在b+树的插入操作中,若节点的关键字数量大于阈值,需要将节点分裂为两个节点。

若识别出当前节点的关键字数量不大于阈值(即当前节点中被插入新关键字后,不会引起节点分裂)(654),将插入命令指示的待插入关键字写入数据缓存630(656)。扩展命令处理单元670还识别当前节点的排序位于待插入关键字之后的所有关键字(657),并指示dma单元640将这些关键字从存储器690搬移到数据缓存630(658)。可选地,从存储器690搬移出的关键字在数据缓存630中被按顺序放置在待插入关键字之后。扩展命令处理单元670用数据缓存630中的待插入关键字与当前节点的排序位于待插入关键字之后的所有关键字更新存储器690中的当前节点(659)。具体地,用数据缓存630中的待插入关键字与当前节点的排序位于待插入关键字之后的所有关键字覆盖存储器690中的当前节点的排序在待插入关键字之后的所有关键字,以完成对插入命令的处理。

回到步骤654,若识别出当前节点关键字数量大于阈值,意味着当前节点被插入关键字后需要分裂为两个节点。一般地,在节点分裂时,排序在前的一半关键字属于前节点,而排序在后的一半关键字属于后节点。这里将当前节点分裂形成的两个节点分别称为前节点与后节点。

根据待插入关键字在当前节点的关键字中的位置,确定当前节点分裂后,待插入关键字属于前节点还是后节点(655)。若待插入关键字属于前节点(655),将待插入关键字写入数据缓存630(660)。扩展命令处理单元670还识别当前节点的排序位于待插入关键字之后的所有关键字(661),从存储器690读出这些当前节点的排序位于待插入关键字之后的所有关键字并写入数据缓存630(662),将数据缓存中属于分裂后的前节点的关键字写入存储器690以更新当前节点(663)作为分裂后的前节点,将数据缓存630中的属于分裂后的后节点的关键字写入存储器690(664)作为分裂后的后节点。

以及由于发生了节点的分裂,需要更新分裂后的前节点与后节点的共同父节点,以在该父节点中记录索引前节点与后节点的关键字与对应的索引(指针)。为此目的,扩展命令处理单元670将该父节点作为当前节点(669),将例如后节点的排序最前的关键字作为待插入关键字,并返回步骤652。

返回步骤655,若待插入关键字属于后节点(655),将待插入关键字写入数据缓存630(665)。扩展命令处理单元670还识别当前节点的属于后节点的所有关键字(666),将属于后节点的所有关键写入数据缓存630(667),以及在当前节点中清除被读出的这些关键字,以生成分裂后的前节点。

作为一个例子,扩展命令处理单元670将读出的这些属于后节点的关键字同待插入关键字一同排序,将排序后的所有关键字写入存储器690以生成后节点(668)。

作为又一个例子,扩展命令处理单元670将读出的这些属于后节点的关键字的排序最前的关键字到当前节点的排序在待插入关键字之前的所有关键字,按顺序写入数据缓存630的待插入关键字之前,以及将读出的属于后节点的关键字的排序在待插入关键字之后的关键字到属于后节点的排序最后的关键字,按顺序写入数据缓存630的待插入关键字之后。以此方式实现对读出的这些属于后节点的关键字同待插入关键字的一同排序。

以及由于发生了节点的分裂,扩展命令处理单元670将分裂后的前节点与后节点的共同父节点作为当前节点(669),将例如后节点的排序最前的关键字作为待插入关键字,并返回步骤652。

所属领域技术人员将理解地,在向b+树中插入关键字的过程中,还插入同关键字相关联的叶节点的值或者指向下级节点的指针。

图7a展示了根据本申请依然再一实施例的b+树操作装置框图。

根据本申请实施例的b+树操作装置包括命令接口710、一个或多个搜索单元(720……72n)、数据缓存730、dma单元740、扩展命令处理单元770、总线780与存储器790。

存储器790存储了一颗或多个b+树(b+树0……b+树n)。例如,节点792是b+树的根节点,节点(794、796与798)是节点792的子节点。

搜索单元(720……72n)处理搜索命令。扩展命令处理单元770处理删除命令和/或插入命令。

扩展命令处理单元770从命令接口710(也参看图3,例如,通过扩展命令队列316)获得例如删除命令。根据获得的删除命令,扩展命令处理单元770在数据缓存730维护被更新的节点的一个或多个关键字,以及指示dma单元740将数据缓存730中的一个或多个关键字搬移到存储器790以更新存储器790中的节点,和/或通过dma单元740从存储器790中将节点的一个或多个关键字搬移到数据缓存730。扩展命令处理单元770响应于删除命令被处理完成,而将命令处理结果提供给命令接口710,从而外部单元通过命令接口710获得删除命令的处理结果。

图7b展示了根据图7a的实施例处理删除命令的流程图。

也参看图3a与图3b,删除命令被分为两个阶段处理。第一阶段,由搜索单元(720……72n)根据删除命令执行搜索,找到命中要插入关键字的叶节点;第二阶段,由扩展命令处理单元770从命中的叶节点删除关键字,以及可能的更新一个或多个上级节点。

参看图7b,展示的流程从获取搜索单元的搜索结果中指示的当前节点与待删除关键字开始(750)。可以理解的,扩展命令处理单元770对b+树的删除操作,从被命中的叶节点开始。

扩展命令处理单元770识别待删除的关键字在当前节点中是否为排序最前的关键字(752)。若待删除的关键字是当前节点的排序最前的关键字,关键字的删除会引起对当前节点的父节点(当前节点的上一级节点)的更新,修改父节点的索引了当前节点的关键字,使得父节点的该关键字被更新为当前节点关键中排序在待删除关键字之后的下一关键字(758)。以及还识别父节点中被更新的关键字是否为排序最前的关键字(759)。若父节点中被更新的关键字也是该父节点的排序最前的关键字,则返回步骤758,以更新该父节点的上一级节点中索引了该父节点的关键字。

若步骤752中识别出待删除的关键字在当前节点中不是排序最前的关键字,或者步骤759中识别出父节点中被更新的关键字不是该父节点的排序最前的关键字,转向步骤760。扩展命令处理单元770识别当前节点的待删除的关键字之后的所有关键字(760),通过dma单元740从存储器790将识别出的所有关键字搬移到数据缓存730(762),以及用数据缓存730中的待删除的关键字之后的所有关键字更新存储器790中的当前节点(764),以完成对待删除关键字的删除。例如,用数据缓存730中的待删除关键字之后的所有关键字替换存储器790中的当前节点的从待删除节点开始到排序在最后的所有关键字。

可选地,对b+树节点的关键字的删除会引起节点的合并。例如,在步骤764之后,若更新后的当前节点的关键字数量小于阈值,将引起节点的合并。例如,将当前节点与当前节点的兄弟节点合并,并修改当前节点的父节点中索引了参与合并的多个节点的关键字,使之索引合并后的节点。

所属领域技术人员将理解地,在从b+树中删除关键字的过程中,还删除同关键字相关联的指向下级节点的指针或者叶节点的值。

图8展示了根据本申请又一实施例的b+树操作装置框图。

cpu800耦合到b+树操作装置的命令接口810,以向b+树操作装置提供命令,并获得b+树操作装置提供的搜索结果。b+树操作装置包括命令接口810、一个或多个搜索单元(820……82n)与数据缓存830。b+树操作装置与cpu800还耦合到dma单元840与存储器890。

存储器890存储了一个或多个b+树(b+树0……b+树n)。而数据缓存830存储了被操作的b+树的一个或多个节点(节点0……节点n)。

cpu800根据来自例如外部主机的数据访问请求生成操作b+树的命令,操作b+树的命令包括在b+树中搜索指定的关键字(key)的命令(称为搜索命令)、向b+树插入指定的关键字的命令(称为插入命令)和/或从b+树中删除指定的关键字的命令(称为删除命令)等。

例如cpu800的外部单元操作b+树操作装置来完成对b+树操作的加速。对于搜索命令,cpu800将待搜索的关键字(key)通过命令接口810提供给b+树操作装置,并从命令接口810获得b+树操作装置给出的搜索结果。对于插入命令或删除命令,cpu800将插入命令或删除命令指示的关键字(key)通过命令接口810提供给b+树操作装置,并从命令接口810获得b+树操作装置给出的搜索结果,以及cpu800根据搜索结果,更新b+树的一个或多个节点。

cpu800或b+树操作装置通过dma单元840,从存储器890读出b+树的一个或多个节点,或者向存储器890写入b+树的一个或多个节点。

命令接口810接收cpu800提供的包括关键字的命令,并将关键字提供给搜索单元(820……82n)之一。搜索单元将用关键字搜索b+树的处理结果提供给命令接口810,从而cpu800通过命令接口810获得命令的处理结果。

搜索单元(820……82n)根据从命令中获取的关键字搜索b+树。搜索单元(820……82n)从数据缓存830获取b+树的节点的各个关键字,将从命令中获取的关键字同节点的各关键字进行比较以识别被命中的关键字,在当前节点是非叶节点时,根据被命中的关键字获取下一节点的关键字,或者在当前节点是叶节点时,根据被命中的关键字获得命令的处理结果。

若数据缓存830中不包括搜索单元要访问的节点,利用dma单元840从存储器890将要访问的节点加载到数据缓存830。

图9展示了根据图8的实施例的流程图。

以耦合到主机的存储设备为例,描述根据图9的实施例。主机向存储设备发出命令(910)以访问存储设备。存储设备是例如kv(关键字-值)存储设备。主机提供给存储设备的命令包括例如对kv存储设备的搜索、插入与删除。kv存储设备包括cpu与b+树操作装置。kv存储设备以b+树结构存储关键字(key)与值(value)的映射关系。

cpu接收主机提供的命令,从命令中提取关键字(key),并根据命令的指示操作b+树操作装置来处理命令,无论接收的命令是搜索命令、插入命令或删除命令,cpu都使用从命令中提取的关键字(key)操作b+树操作装置来从b+树中搜索提取的关键字(key)(920)。

b+树操作装置根据接收的关键字(key)在b+树中搜索关键字(930),并向cpu返回搜索结果。cpu从b+树操作装置获取根据关键字(key)对b+树的搜索结果(940)。若命令是搜索命令,cpu根据搜索结果得到命令处理结果,并提供给发出命令的主机。可选地,搜索结果指示搜索命令要获取数据的指针或地址,cpu还根据指针或地址获取数据。若命令是插入命令或删除命令,搜索结果中指示了待被更新(待插入或删除)的叶节点(及其关键字)。cpu还根据命令的指示,更新存储器中的b+树(942),包括更新该搜索结果中指示的叶节点,以及可选地,对该叶节点实施合并/分裂操作,以及更新该叶节点的一个或多个父节点。

图10是根据图8的实施例的处理b+树插入命令的流程图。

对于插入命令,cpu从命令中提取关键字(key),并根据命令的指示操作b+树操作装置来从b+树中搜索提取的关键字(key)(1020)。b+树操作装置根据接收的关键字(key)在b+树中搜索关键字(1030),并向cpu返回搜索结果。cpu从b+树操作装置获取根据关键字(key)对b+树的搜索结果(1040)。

b+树操作装置可能给出两种搜索结果(1050)。例如,搜索结果指示命中了指定叶节点的指定关键字,那么cpu将该被命中的叶节点的指定关键字对应的值更新为插入命令所指示的值(1060),并向主机指示插入命令处理完成。主机接收cpu提供的命令处理结果(1070)。

若b+树操作装置给出的搜索结果指示了指定的叶节点,但未命中任何关键字,作为响应,cpu要向叶节点插入新的关键字与值。cpu判断指定的叶节点所包含的关键字数量是否小于阈值(1052)。叶节点的关键字数量小于阈值,意味着在该叶节点被插入新关键字后不会引起叶节点分裂;反之,若叶节点的关键字数量不小于阈值,则该叶节点被插入新关键字后将分裂。

若cpu判断指定的叶节点所包含的关键字数量小于阈值(1052),cpu在该指定的叶节点中添加插入命令所指示的关键字与对应的值(1058),以及向主机指示插入命令处理完成。

若cpu判断指定的叶节点所包含的关键字数量不小于阈值(1052),则将该指定的叶节点分裂为两个节点(1054)。分裂后的两个节点所包括的关键字是该指定的叶节点所包含的关键字与待插入的关键字。待插入的关键字依据其值在该指定的叶节点中排序的位置,而被记录在分裂后的两个叶节点之一。

由于节点分裂产生了新节点,该新节点需要被上一级节点(父节点)索引。cpu还获取前述指定的叶节点的父节点,识别该父节点的关键字数量是否小于阈值(1056)。若该父节点的关键字数量小于阈值,意味着在该父节点被插入新关键字后不会分裂;反之,若该父节点的关键字数量不小于阈值,则该父节点将分裂。

若该父节点的关键字数量小于阈值(1056),cpu在该父节点中添加索引了分裂的新节点的关键字,以及向主机指示插入命令处理完成。若该父节点的关键字数量不小于阈值(1056),则将该父节点分裂为两个节点(1054)。以及进一步识别该父节点的上级节点的关键字数量是否小于阈值(1056)。

可选地,在步骤1056,若当前的节点是根节点(其不存在上级节点),则意味着该b+树已满,而无法再承载新关键字,作为响应,cpu向主机指示插入命令处理失败。

图11是根据图8的实施例的处理b+树删除命令的流程图。

对于删除命令,cpu从命令中提取关键字(key),并根据命令的指示操作b+树操作装置来从b+树中搜索提取的关键字(key)(1120)。b+树操作装置根据接收的关键字(key)在b+树中搜索关键字(1130),并向cpu返回搜索结果。cpu从b+树操作装置获取根据关键字(key)对b+树的搜索结果(1140)。

b+树操作装置可能给出两种搜索结果(1050)。例如,搜索结果指示命中了指定叶节点的指定关键字,那么cpu从该被命中的叶节点中删除该指定关键字,以及可选地还更新b+树的其他节点。若搜索结果指示b+树中不包括被搜索的关键字,则cpu向主机指示该删除命令处理失败(1160)。

搜索结果指示命中了指定叶节点的指定关键字(1050),cpu获取该叶节点作为当前节点,识别当前节点的关键字数量是否大于第一阈值(1152)。若当前节点的关键字数量大于第一阈值,从当前节点中删除指定关键字后,不会引起节点的合并,通过从当前节点删除该指定关键字的方式更新该当前节点(1159),以及向主机指示删除命令处理完成,主机接收删除命令的处理结果(1170)。

在步骤1152,若cpu识别当前节点的关键字数量不大于第一阈值,进一步识别当前节点与其兄弟节点是否需要合并。将所记录的关键字排序在当前节点之前的兄弟节点称为当前节点的左兄弟节点,而将所记录的关键字排序在当前节点之后的兄弟节点称为当前节点的右兄弟节点。例如,若当前节点与其右兄弟节点的关键字之和大于b+树的阶数(1153),则将该右兄弟节点的排序最前的关键字搬移到当前节点,从当前节点中删除该指定关键字以及更新该右兄弟节点的父节点中索引该右兄弟节点的关键字(1159),以及向主机指示删除命令处理完成,主机接收删除命令的处理结果(1170)。

若当前节点与其右兄弟的关键字之和不大于b+树的阶数(1153),进一步地,若当前节点与其左兄弟节点的关键字数量之和大于b+树的阶数(1154),则将该左兄弟节点的排序最后的关键字搬移到当前节点,作为当前节点的排序最前的关键字,从当前节点中删除该指定关键字以及更新当前节点的父节点中索引当前节点的关键字(1159),以及向主机指示删除命令处理完成,主机接收删除命令的处理结果(1170)。

在步骤1154,若当前节点与其左兄弟节点的关键字数量之和不大于b+树的阶数(1154),则合并当前节点与其兄弟节点之一(1155)。作为举例,合并当前节点与其左兄弟节点。由于节点被删除,还需要从被删除节点的父节点中删除索引了该节点的关键字。若被删除节点的父节点是根节点,从根节点中删除索引了该被删除节点的关键字(1159),以及向主机指示删除命令处理完成,主机接收删除命令的处理结果(1170)。若被删除节点的父节点不是根节点,则在cpu的控制下,流程转向步骤1152来重复对该父节点的节点删除过程。

尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1