基于支持重复键值树数据结构管理数据的方法和装置与流程

文档序号:16248807发布日期:2018-12-11 23:49阅读:182来源:国知局
基于支持重复键值树数据结构管理数据的方法和装置与流程

本申请涉及数据处理领域,特别是涉及一种基于支持重复键值树数据结构管理数据的方法和装置。

背景技术

在存储系统中,通常采用树数据结构作为元数据在内存中建立逻辑区块地址(logicalblockaddress,简称lba)到磁盘地址的映射,例如b+树。

传统的b+树中存储有键值(keyvalue,简称kv),其中,key是关键字,value是关键字对应的值,value用于表示磁盘地址,一个key对应一个value,这样,根据b+树可以实现对磁盘地址对应存储位置的数据进行管理。

然而,传统的b+树只能支持单一的键值,在插入键值的过程中,一旦b+树中已经存在该key,会直接对其进行覆盖或者返回错误。因此,传统的b+树无法支持重复键值的特殊情况,难以满足用户对存储系统的需求。



技术实现要素:

为了解决上述技术问题,本申请提供了一种基于支持重复键值树数据结构管理数据的方法和装置,该方法可以支持重复键值,即使待处理键值中的关键字与树数据结构中已存储的关键字相同,也可以在保留已存储的关键字的情况下插入待处理键值,满足用户对存储系统的需求。

本申请实施例公开了如下技术方案:

第一方面,本申请实施例提供了一种基于支持重复键值树数据结构管理数据的方法,应用于树数据结构,所述树数据结构包括至少两级节点,每级节点包括至少一个节点,每个节点中存储键值,所述键值包括关键字和关键字对应的值,所述树数据结构支持一个关键字对应多个值,所述方法包括:

获取待处理键值;

判断所述待处理键值中的关键字是否与目标节点中已存储的关键字匹配,所述目标节点为所述树数据结构中任一节点;

若匹配,则根据所述待处理键值中的关键字对应的值将所述待处理键值插入到所述目标节点中。

可选的,所述根据所述待处理键值中的关键字对应的值将所述待处理键值插入到所述目标节点中,包括:

在所述目标节点中,将所述待处理键值中的关键字对应的值与所述目标节点中目标关键字对应的值按照从小到大的顺序排列,所述目标关键字与所述待处理键值中的关键字相同。

可选的,所述目标关键字包括多个,在所述目标节点中,按照所述多个目标关键字分别对应的值从小到大的顺序排列所述多个目标关键字,所述将所述待处理键值中的关键字对应的值与所述目标节点中目标关键字对应的值按照从小到大的顺序排列,包括:

将所述待处理键值插入到所述多个目标关键字中任意位置;

分别判断所述待处理键值中的关键字对应的值与相邻的两个目标关键字对应的值是否满足从小到大的顺序要求;

若不满足,则将所述待处理键值中的关键字与不满足顺序要求的目标关键字交换顺序,重新执行所述分别判断所述待处理键值中的关键字对应的值与相邻的两个目标关键字对应的值是否满足从小到大的顺序要求的步骤。

可选的,所述方法还包括:

获取待查询关键字;

判断所述待查询关键字对应的值的数量是否超过查询结果内存限制;

若超过,则按照预设条件分段获取查询结果。

第二方面,本申请实施例提供了一种基于支持重复键值树数据结构管理数据的装置,应用于树数据结构,所述树数据结构包括至少两级节点,每级节点包括至少一个节点,每个节点中存储键值,所述键值包括关键字和关键字对应的值,所述树数据结构支持一个关键字对应多个值,所述装置包括第一获取单元、第一判断单元和插入单元:

所述第一获取单元,用于获取待处理键值;

所述第一判断单元,用于判断所述待处理键值中的关键字是否与目标节点中已存储的关键字匹配,所述目标节点为所述树数据结构中任一节点;

所述插入单元,用于若所述判断单元判断所述待处理键值中的关键字与目标节点中已存储的关键字匹配,则根据所述待处理键值中的关键字对应的值将所述待处理键值插入到所述目标节点中。

可选的,所述插入单元,用于在所述目标节点中,将所述待处理键值中的关键字对应的值与所述目标节点中目标关键字对应的值按照从小到大的顺序排列,所述目标关键字与所述待处理键值中的关键字相同。

可选的,所述目标关键字包括多个,在所述目标节点中,按照所述多个目标关键字分别对应的值从小到大的顺序排列所述多个目标关键字;

所述插入单元,用于将所述待处理键值插入到所述多个目标关键字中任意位置;分别判断所述待处理键值中的关键字对应的值与相邻的两个目标关键字对应的值是否满足从小到大的顺序要求;若不满足,则将所述待处理键值中的关键字与不满足顺序要求的目标关键字交换顺序,重新执行所述分别判断所述待处理键值中的关键字对应的值与相邻的两个目标关键字对应的值是否满足从小到大的顺序要求的步骤。

可选的,所述装置还包括第二获取单元,第二判断单元和第三获取单元:

所述第二获取单元,用于获取待查询关键字;

所述第二判断单元,用于判断所述待查询关键字对应的值的数量是否超过查询结果内存限制;

所述第三获取单元,用于若超过,则按照预设条件分段获取查询结果。

由上述技术方案可以看出,本申请实施例具有以下优点:

该方法应用于树数据结构,所述树数据结构包括至少两级节点,每级节点包括至少一个节点,每个节点中存储键值,所述键值包括关键字和关键字对应的值,所述树数据结构支持一个关键字对应多个值,这样,在插入键值过程中,可以获取待处理键值,判断待处理键值中的关键字是否与目标节点中已存储的关键字匹配,该目标节点为所述树数据结构中任一节点;若匹配,则根据所述待处理键值中的关键字对应的值将所述待处理键值插入到所述目标节点中。由此可见,该树数据结构可以支持重复键值,即使待处理键值中的关键字与树数据结构中已存储的关键字相同,也可以在保留已存储的关键字的情况下插入待处理键值,满足用户对存储系统的需求。

附图说明

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

图1为传统的支持单一键值树数据结构示例图;

图2为本申请实施例提供的一种基于支持重复键值树数据结构管理数据的方法的流程图;

图3为本申请实施例提供的一种支持重复键值树数据结构示例图;

图4为本申请实施例提供的一种基于支持重复键值树数据结构管理数据的装置的结构框图。

具体实施方式

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

传统的树数据结构,例如b+树可以如图1所示,图1展示了一个只有2级节点的传统b+树结构,其中节点①为根(root)节点,节点②、③、④、⑤、⑥这5个节点为叶子节点。叶子节点上的每个数字都代表一个键值(keyvalue),在图1中只画出了key。其中,root节点的每一个key的指针都指向一个叶子节点,在遍历的时候,若root节点上的key小于25,则会直接通过root节点索引到节点②上,若root节点上的key在25到50之间,会索引到节点③上,依次类推,若root节点上的key大于75,会索引到节点⑥上。这样对root节点上所有的key都能搜索到合适的节点。但是这种传统的b+树只能支持单一的键值,在插入的过程中,遇到b+树中已经存在该key的情况,会直接对其进行覆盖或者返回错误。因此,传统的b+树无法支持重复键值的特殊情况,难以满足用户对存储系统的需求。

为此,本申请实施例提供一种基于支持重复键值树数据结构管理数据的方法,该方法对传统的树数据结构进行修改,使得树数据结构可以支持重复键值,这样,在利用树数据结构对数据进行管理时,例如插入键值过程中,即使待处理键值中的关键字与树数据结构中已存储的关键字相同,也可以在保留已存储的关键字的情况下插入待处理键值,满足用户对存储系统的需求。

下面结合附图,详细说明本申请实施例提供的基于支持重复键值树数据结构管理数据的方法。

参见图2,图2为本申请实施例提供的一种基于支持重复键值树数据结构管理数据的方法的流程图,该方法应用于树数据结构,所述树数据结构包括至少两级节点,每级节点包括至少一个节点,每个节点中存储键值,所述键值包括关键字和关键字对应的值,所述树数据结构支持一个关键字对应多个值,在此基础上,该方法包括:

s201、获取待处理键值。

需要说明的是,为了便于介绍,本实施例以树数据结构为b+树为例,该方法使用的b+树与传统b+树不同,该b+树中一个关键字可以对应多个值,使得该b+树可以支持重复键值。

该b+树可以如图3所示,其中,无论在root节点,还是在叶子节点都可以存在关键字key相同的键值,相同的key可以对应不同的value,从而可以实现根据相同的key管理不同磁盘中的数据。

以节点③为例,节点③中的五个key都是5,但是其对应的value不同。需要说明的是,节点中的键值是依据键值中关键字的大小排列的,通常情况下,是按照键值中关键字从小到大的顺序排列的。由于支持重复键值的b+树中,可能存在相同的关键字,因此,与传统b+树不同的是,节点中的键值不仅需要依据键值中关键字的大小排列,还可能需要依照关键字对应的值的大小排列。

需要说明的是,为了在遍历节点的过程中,能够知晓遍历的节点的顺序,可以将各个节点进行关联,例如图3中双向箭头所示,根据节点之间的关联便可以知晓遍历节点③后,接下来需要遍历节点④。

s202、判断所述待处理键值中的关键字是否与目标节点中已存储的关键字匹配。

需要说明的是,由于该树数据结构支持重复键值,插入的键值中的关键字可能与目标节点中已存储的关键字相同,因此,需要判断待处理键值中的关键字是否与目标节点中已存储的关键字匹配。其中,目标节点为待处理键值需要插入的节点,为树数据结构中任一节点。

s203、若匹配,则根据所述待处理键值中的关键字对应的值将所述待处理键值插入到所述目标节点中。

需要说明的是,待处理键值中的关键字与目标节点中已存储的关键字是否匹配决定了键值插入到目标节点的实现方式。

若匹配,则说明待处理键值中的关键字与目标节点中已存储的关键字相同,此时,与传统树数据结构插入键值的方式有所不同,不能仅根据关键字来确定待处理键值插入位置,还需要根据待处理键值中的关键字对应的值来进行确定。

具体的,在一种实现方式中,在目标节点中,需要将所述待处理键值中的关键字对应的值与所述目标节点中目标关键字对应的值按照从小到大的顺序排列,所述目标关键字与所述待处理键值中的关键字相同。

在一些情况下,目标关键字可能包括多个,即在本实施例提供的树数据结构中,目标节点中本身就存在多个相同的关键字,且在所述目标节点中,按照所述多个目标关键字分别对应的值从小到大的顺序排列所述多个目标关键字。

例如,图3所示,叶子节点中存在多个相同的key,这些相同的key都是5,为了保持树数据结构的有序性,该树数据结构按照value的大小对相同的key进行排序,若按照value从小到大的顺序对相同的key进行排序,则叶子节点中,其排列顺序为节点③中的最上面的键值中的value最小,节点④的最上边一个键值的value最大,中间的键值的value从小到大排布。

在这种情况下,s203的一种实现方式可以是:将所述待处理键值插入到所述多个目标关键字中任意位置;分别判断所述待处理键值中的关键字对应的值与相邻的两个目标关键字对应的值是否满足从小到大的顺序要求;若不满足,则将所述待处理键值中的关键字与不满足顺序要求的目标关键字交换顺序,重新执行所述分别判断所述待处理键值中的关键字对应的值与相邻的两个目标关键字对应的值是否满足从小到大的顺序要求的步骤,直到满足从小到大的顺序要求为止。

在一种实现方式中,除了向支持重复键值树数据结构中插入键值,还可以根据该支持重复键值树数据结构进行查询。对该支持重复键值树数据结构进行查询的一种实现方式可以是:获取待查询关键字;判断所述待查询关键字对应的值的数量是否超过查询结果内存限制;若超过,则按照预设条件分段获取查询结果。

需要说明的是,由于该树数据结构可以支持多键值,即存在查询一个key时返回多个value的可能,因此,在查询过程中可以限制存放查询结果的内存大小。若待查询关键字key对应的value的数量超过查询结果内存限制,则需要按照预设条件对一个key查询分段进行,预设条件可以是指每次查询时查询结果的数量。

在按照value从小到大的顺序对相同的key进行排序的情况下,每次查询时查询固定数量的结果,第二次查询时传入上次查询到的value的最大值,根据上次查询到的value的最大值可以确定上次查询时查询到的最后一个value,这样,本次查询可以从该值开始查询,同理依次完成整个查询过程。

由上述技术方案可以看出,本申请实施例具有以下优点:

该方法应用于树数据结构,所述树数据结构包括至少两级节点,每级节点包括至少一个节点,每个节点中存储键值,所述键值包括关键字和关键字对应的值,所述树数据结构支持一个关键字对应多个值,这样,在插入键值过程中,可以获取待处理键值,判断待处理键值中的关键字是否与目标节点中已存储的关键字匹配,该目标节点为所述树数据结构中任一节点;若匹配,则根据所述待处理键值中的关键字对应的值将所述待处理键值插入到所述目标节点中。由此可见,该树数据结构可以支持重复键值,即使待处理键值中的关键字与树数据结构中已存储的关键字相同,也可以在保留已存储的关键字的情况下插入待处理键值,满足用户对存储系统的需求。

本申请实施例还提供一种基于支持重复键值树数据结构管理数据的装置,应用于树数据结构,所述树数据结构包括至少两级节点,每级节点包括至少一个节点,每个节点中存储键值,所述键值包括关键字和关键字对应的值,所述树数据结构支持一个关键字对应多个值,参见图4,所述装置包括第一获取单元401、第一判断单元402和插入单元403:

所述第一获取单元401,用于获取待处理键值;

所述第一判断单元402,用于判断所述待处理键值中的关键字是否与目标节点中已存储的关键字匹配,所述目标节点为所述树数据结构中任一节点;

所述插入单元403,用于若所述判断单元判断所述待处理键值中的关键字与目标节点中已存储的关键字匹配,则根据所述待处理键值中的关键字对应的值将所述待处理键值插入到所述目标节点中。

可选的,所述插入单元,用于在所述目标节点中,将所述待处理键值中的关键字对应的值与所述目标节点中目标关键字对应的值按照从小到大的顺序排列,所述目标关键字与所述待处理键值中的关键字相同。

可选的,所述目标关键字包括多个,在所述目标节点中,按照所述多个目标关键字分别对应的值从小到大的顺序排列所述多个目标关键字;

所述插入单元,用于将所述待处理键值插入到所述多个目标关键字中任意位置;分别判断所述待处理键值中的关键字对应的值与相邻的两个目标关键字对应的值是否满足从小到大的顺序要求;若不满足,则将所述待处理键值中的关键字与不满足顺序要求的目标关键字交换顺序,重新执行所述分别判断所述待处理键值中的关键字对应的值与相邻的两个目标关键字对应的值是否满足从小到大的顺序要求的步骤。

可选的,所述装置还包括第二获取单元,第二判断单元和第三获取单元:

所述第二获取单元,用于获取待查询关键字;

所述第二判断单元,用于判断所述待查询关键字对应的值的数量是否超过查询结果内存限制;

所述第三获取单元,用于若超过,则按照预设条件分段获取查询结果。

由上述技术方案可以看出,本申请实施例具有以下优点:

该装置应用于树数据结构,所述树数据结构包括至少两级节点,每级节点包括至少一个节点,每个节点中存储键值,所述键值包括关键字和关键字对应的值,所述树数据结构支持一个关键字对应多个值,这样,在插入键值过程中,可以获取待处理键值,判断待处理键值中的关键字是否与目标节点中已存储的关键字匹配,该目标节点为所述树数据结构中任一节点;若匹配,则根据所述待处理键值中的关键字对应的值将所述待处理键值插入到所述目标节点中。由此可见,该树数据结构可以支持重复键值,即使待处理键值中的关键字与树数据结构中已存储的关键字相同,也可以在保留已存储的关键字的情况下插入待处理键值,满足用户对存储系统的需求。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质可以是下述介质中的至少一种:只读存储器(英文:read-onlymemory,缩写:rom)、ram、磁碟或者光盘等各种可以存储程序代码的介质。

需要说明的是,本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于设备及系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的设备及系统实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

以上所述,仅为本申请的一种具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应该以权利要求的保护范围为准。

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