一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

存储系统的数据索引结构的调整方法和装置与流程

2022-12-07 01:26:47 来源:中国专利 TAG:


1.本技术涉及存储技术领域,具体涉及一种存储系统的数据索引结构的调整方法和装置。


背景技术:

2.伴随大数据、云计算、人工智能技术的飞速发展,对存储数据量的需求逐渐增大,存储大数据量的数据导致管理数据所需的数据索引结构空间开销急剧增加。现有的存储系统通常采用树形结构的数据索引结构来作为数据的索引结构,通常树形结构有多层,最顶层的节点称为根节点,最下面一层称为叶子节点,中间可能有多层,都称为中间节点。每个中间节点与一个或多个下一层的节点关联,每个叶子节点与一个或多个数据关联,所以在对数据的访问过程中,中间节点的访问频度远远高于叶子节点,中间节点的空间占用取决于叶子节点的数量。
3.为了提高存储系统的索引效率和访问性能,通常期望将更多的中间节点存放在内存中,叶子节点可以存放在存储介质(如硬盘)中。在数据量较大的存储场景中,叶子节点的数量也会随着数据量增大而增多,相应的,中间节点的空间占用也会越大。而有限的内存容量无法将全部的中间节点缓存起来,导致增加外存的访问次数,从而降低系统性能


技术实现要素:

4.本技术实施例旨在提供存储系统的数据索引结构的调整方案,根据存储系统的kv对数量和内存可存储的中间节点的数量调整数据索引结构中的中间节点的数量,使得将索引结构中的中间节点可以尽可能多地存储在内存中,提高系统性能。
5.为实现上述目的,本技术第一方面提供一种存储系统的数据索引结构的调整方法。根据该方法,在获取所述存储系统的键-值kv对的数量后,可以根据所述kv对的数量以及所述存储系统的内存可存储的中间节点的数量调整所述数据索引结构中的中间节点的数量,其中,所述数据索引结构包括多个中间节点和多个叶子节点,每个中间节点用于指向所述多个叶子节点中的一个或多个叶子节点,所述多个叶子节点用于存储所述存储系统的kv对。
6.通过根据所述kv对的数量以及所述存储系统的内存可存储的中间节点的数量调整所述数据索引结构中的中间节点的数量,使得将数据索引结构中尽可能多的中间节点存储到内存中,从而在通过数据索引结构查找数据时可减少对外存的访问次数,提高了系统性能,其中所述外存为存储系统中除内存之外的存储介质。
7.在一种实施方式中,所述根据所述kv对的数量以及所述存储系统的内存可存储的中间节点的数量调整所述数据索引结构中的中间节点的数量包括:根据所述kv对的数量以及所述存储系统的内存可存储的中间节点的数量增大或减小叶子节点的存储容量;根据增大或减小后的叶子节点的存储容量调整所述数据索引结构中的中间节点的数量。
8.通过增大或减小叶子节点调节中间节点的数量,从而可将尽可能多的中间节点存
储到内存中,提高了系统性能。
9.在一种实施方式中,根据增大或减小后的叶子节点的存储容量调整所述中间节点的数量包括:根据增大后的叶子节点的存储容量,对部分叶子节点进行合并,以减小所述数据索引结构中的中间节点的数量;或,根据减小后的叶子节点的存储容量,对部分叶子节点进行分裂,以增加所述数据索引结构中的中间节点的数量。
10.在一种实施方式中,根据所述kv对的数量以及所述存储系统的内存可存储的中间节点的数量增大或减小叶子节点的存储容量,具体包括:在所述存储系统的内存可存储的中间节点数量确定的情况下:当确定kv对的数量增多,则增大当前叶子节点的存储容量;或,当确定kv对的数量减少,则减小当前叶子节点的存储容量。
11.当kv对数量增多时,通过增大叶子节点的存储容量,并对相邻叶子节点进行合并,可减少叶子节点的数量,进而减少中间节点的数量,以将尽可能多的中间节点存储到内存中。当kv对数量减少时,通过减小叶子节点的存储容量,使得可以减少叶子节点的读写放大问题。
12.在一种实施方式中,所述数据索引结构是b 树结构。
13.本技术第二方面提供一种存储系统的数据索引结构的调整装置,包括:获取单元,用于获取所述存储系统的键-值kv对的数量,其中,所述数据索引结构包括多个中间节点和多个叶子节点,每个中间节点用于指向所述多个叶子节点中的一个或多个叶子节点,所述多个叶子节点用于存储所述存储系统的kv对;调整单元,用于根据所述kv对的数量以及所述存储系统的内存可存储的中间节点的数量调整所述数据索引结构中的中间节点的数量。
14.在一种实施方式中,所述调整单元具体用于:根据所述kv对的数量以及所述存储系统的内存可存储的中间节点的数量增大或减小叶子节点的存储容量;根据增大或减小后的叶子节点的存储容量调整所述数据索引结构中的中间节点的数量。
15.在一种实施方式中,所述调整单元还用于:根据增大后的叶子节点的存储容量,对部分叶子节点进行合并,以减小所述数据索引结构中的中间节点的数量;或,根据减小后的叶子节点的存储容量,对部分叶子节点进行分裂,以增加所述数据索引结构中的中间节点的数量。
16.在一种实施方式中,所述调整单元还用于:在所述存储系统的内存可存储的中间节点数量确定的情况下:当确定kv对的数量增多,则增大当前叶子节点的存储容量;或,当确定kv对的数量减少,则减小当前叶子节点的存储容量。
17.本技术第三方面提供一种存储设备,包括处理器和存储器,所述存储单元中存储有计算机程序指令,所述处理器执行所述可执行计算机程序指令以实现第一方面或第一方面可能的实施方式所述的方法。
18.本技术第四方面提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机或处理器中执行时,令所述计算机或处理器执行第一方面或第一方面可能的实施方式所述的方法。
19.本技术第五方面提供一种计算机程序产品,包括计算机程序指令,当所述计算机程序指令在计算机或处理器中运行时,使得所述计算机或处理器执行第一方面或第一方面可能的实施方式所述的方法。
附图说明
20.通过结合附图描述本技术实施例,可以使得本技术实施例更加清楚:
21.图1a为本技术实施例所应用的盘控分离结构的集中式存储系统120的架构图;
22.图1b为本技术实施例所应用的盘控一体结构的集中式存储系统的架构图;
23.图1c为本技术实施例所应用的分布式的存储系统的架构图;
24.图2为b 树的结构示意图;
25.图3为本技术实施例提供的一种更新数据索引结构的方法流程图;
26.图4为本技术实施例提供的一种数据索引结构的示意图;
27.图5为本技术实施例提供的一种数据索引结构的示意图;
28.图6为本技术实施例提供的在存储系统中写入数据的方法流程图;
29.图7为本技术实施例提供的在存储系统中删除数据的方法流程图;
30.图8为本技术实施例提供一种存储系统的数据索引结构的调整装置的架构图。
具体实施方式
31.下面将结合附图,对本技术实施例中的技术方案进行描述。
32.本技术实施例提供的数据索引结构的调整方案可应用于存储系统中。存储系统包括集中式存储系统和分布式存储系统。所述集中式存储系统是指由一台或多台主设备组成中心节点,数据集中存储于这个中心节点中,并且整个系统的所有数据处理业务都集中部署在这个中心节点上。所述分布式存储系统是指将数据分散存储在多台独立的存储节点上的系统。用户可通过应用程序来向存储节点存取数据。运行这些应用程序的计算机被称为“应用服务器”。应用服务器可以是物理机,也可以是虚拟机。物理应用服务器包括但不限于桌面电脑、服务器、笔记本电脑以及移动设备。应用服务器可通过光纤交换机访问存储节点以存取数据。其中,交换机只是一个可选设备,应用服务器也可以直接通过网络与存储节点通信。
33.图1a为本技术实施例所应用的盘控分离结构的集中式存储系统120的架构图。该存储系统120与多个主机200连接,所述多个主机200例如为应用服务器,其都与存储系统120连接,以向存储系统120存取数据。图1a所示的集中式存储系统的特点是具有统一的入口,从主机200来的数据都要经过这个入口,这个入口例如为存储系统120中的引擎121。
34.如图1a所示,引擎121中有一个或多个控制器,图1a以引擎包含两个控制器为例予以说明。控制器0与控制器1之间具有镜像通道,那么当控制器0将一份数据写入其内存124后,可以通过所述镜像通道将所述数据的副本发送给控制器1,控制器1将所述副本存储在自己本地的内存124中。由此,控制器0和控制器1互为备份,当控制器0发生故障时,控制器1可以接管控制器0的业务,当控制器1发生故障时,控制器0可以接管控制器1的业务,从而避免硬件故障导致整个存储系统120的不可用。当引擎121中部署有4个控制器时,任意两个控制器之间都具有镜像通道,因此任意两个控制器互为备份。
35.引擎121还包含前端接口125和后端接口126,其中前端接口125用于与应用服务器通信,从而为应用服务器提供存储服务。而后端接口126用于与硬盘134通信,以扩充存储系统的容量。通过后端接口126,引擎121可以连接更多的硬盘134,从而形成一个非常大的存储资源池。
36.在硬件上,如图1a所示,控制器0至少包括处理器123、内存124。处理器123是一个中央处理器(central processing unit,cpu),用于处理来自存储系统外部(服务器或者其他存储系统)的数据访问请求,也用于处理存储系统内部生成的请求。示例性的,处理器123通过前端端口接收服务器发送的写数据请求时,会将这些写数据请求中的数据暂时保存在内存124中。当内存124中的数据总量达到一定阈值时,处理器123通过后端端口126将内存124中存储的数据发送给硬盘134进行持久化存储。
37.内存124是指与处理器123直接交换数据的内部存储器,它可以随时读写数据,而且速度很快,作为操作系统或其他正在运行中的程序的临时数据存储器。内存124包括至少两种存储器,例如内存既可以是随机存取存储器,也可以是只读存储器(read only memory,rom)。举例来说,随机存取存储器是动态随机存取存储器(dynamic random access memory,dram),或者存储级存储器(storage class memory,scm)。dram是一种半导体存储器,与大部分随机存取存储器(random access memory,ram)一样,属于一种易失性存储器(volatile memory)设备。scm是一种同时结合传统储存装置与存储器特性的复合型储存技术,存储级存储器能够提供比硬盘更快速的读写速度,但运算速度上比dram慢,在成本上也比dram更为便宜。然而,dram和scm在本实施例中只是示例性的说明,内存还可以包括其他随机存取存储器,例如静态随机存取存储器(static random access memory,sram)等。而对于只读存储器,举例来说,可以是可编程只读存储器(programmable read only memory,prom)、可抹除可编程只读存储器(erasable programmable read only memory,eprom)等。另外,内存124还可以是双列直插式存储器模块或双线存储器模块(dualin-linememorymodule,简称dimm),即由动态随机存取存储器(dram)组成的模块,还可以是固态硬盘(solid state disk,ssd)。实际应用中,控制器0中可配置多个内存124,以及不同类型的内存124。本实施例不对内存124的数量和类型进行限定。此外,可对内存124进行配置使其具有保电功能。保电功能是指系统发生掉电又重新上电时,内存124中存储的数据也不会丢失。具有保电功能的内存被称为非易失性存储器。
38.内存124中存储有软件程序,处理器123运行内存124中的软件程序可实现对硬盘的管理。所述对硬盘的管理例如将硬盘抽象化为存储资源池,然后划分为lun提供给服务器使用等。这里的lun其实就是在服务器上看到的硬盘。当然,一些集中式存储系统本身也是文件服务器,可以为服务器提供共享文件服务。处理器123运行内存124中的软件程序还可以用于生成硬盘中的存储数据的数据索引结构,以用于快速查找到存储数据,以及用于通过本技术实施例提供的方案更新数据索引结构,等等。
39.控制器1(以及其他图1a中未示出的控制器)的硬件组件和软件结构与控制器0类似,这里不再赘述。
40.在图1a所示的盘控分离的存储式系统中,引擎121可以不具有硬盘槽位,硬盘134需要放置在硬盘阵列130中,后端接口126与硬盘阵列130通信。后端接口126以适配卡的形态存在于引擎121中,一个引擎121上可以同时使用两个或两个以上后端接口126来连接多个硬盘阵列。或者,适配卡也可以集成在主板上,此时适配卡可通过pcie总线与处理器123通信。
41.需要说明的是,图1a中只示出了一个引擎121,然而在实际应用中,存储系统中可包含两个或两个以上引擎121,多个引擎121之间做冗余或者负载均衡。
42.硬盘阵列130包括控制单元131和若干个硬盘134。控制单元131可具有多种形态。一种情况下,硬盘阵列130属于智能盘框,如图1a所示,控制单元131包括cpu和内存。cpu用于执行地址转换以及读写数据等操作。内存用于临时存储将要写入硬盘134的数据,或者从硬盘134读取出来将要发送给控制器的数据。另一种情况下,控制单元131是一个可编程的电子部件,例如数据处理单元(data processing unit,dpu)。dpu具有cpu的通用性和可编程性,但更具有专用性,可以在网络数据包,存储请求或分析请求上高效运行。dpu通过较大程度的并行性(需要处理大量请求)与cpu区别开来。可选的,这里的dpu也可以替换成图形处理单元(graphics processing unit,gpu)、嵌入式神经网络处理器(neural-network processing units,npu)等处理芯片。通常情况下,控制单元131的数量可以是一个,也可以是两个或两个以上。当硬盘阵列130包含至少两个控制单元131时,硬盘134与控制单元131之间具有归属关系,每个控制单元只能访问归属于它的硬盘,因此这往往涉及到在控制单元131之间转发读/写数据请求,导致数据访问的路径较长。另外,如果存储空间不足,在硬盘阵列130中增加新的硬盘134时需要重新绑定硬盘134与控制单元131之间的归属关系,操作复杂,导致存储空间的扩展性较差。因此在另一种实施方式中,控制单元131的功能可以卸载到网卡104上。换言之,在该种实施方式中,硬盘阵列130内部不具有控制单元131,而是由网卡104来完成数据读写、地址转换以及其他计算功能。此时,网卡104是一个智能网卡。它可以包含cpu和内存。cpu用于执行地址转换以及读写数据等操作。内存用于临时存储将要写入硬盘134的数据,或者从硬盘134读取出来将要发送给控制器的数据。也可以是一个可编程的电子部件,例如数据处理单元(data processing unit,dpu)。dpu具有cpu的通用性和可编程性,但更具有专用性,可以在网络数据包,存储请求或分析请求上高效运行。dpu通过较大程度的并行性(需要处理大量请求)与cpu区别开来。可选的,这里的dpu也可以替换成图形处理单元(graphics processing unit,gpu)、嵌入式神经网络处理器(neural-network processing units,npu)等处理芯片。硬盘阵列130中的网卡104和硬盘134之间没有归属关系,网卡104可访问该硬盘阵列130中任意一个硬盘134,因此在存储空间不足时扩展硬盘会较为便捷。
43.按照引擎121与硬盘阵列130之间通信协议的类型,硬盘阵列130可能是sas硬盘阵列,也可能是nvme硬盘阵列以及其他类型的硬盘阵列。sas硬盘阵列,采用sas3.0协议,每个框支持25块sas硬盘。引擎121通过板载sas接口或者sas接口模块与硬盘阵列130连接。nvme硬盘阵列,更像一个完整的计算机系统,nvme硬盘插在nvme硬盘阵列内。nvme硬盘阵列再通过rdma端口与引擎121连接。
44.可以理解,图1a中虽然示出了具有盘控分离结构的集中式存储系统,但并不用于限制本技术实施例的应用范围,例如,本技术实施例还可以应用于图1b所示的盘控一体结构的集中式存储系统。在盘控一体结构的集中式存储系统中,与盘控分离结构不同在于,引擎121具有硬盘槽位,硬盘134可直接部署在引擎121中,后端接口126属于可选配置,当系统的存储空间不足时,可通过后端接口126连接更多的硬盘或硬盘阵列。
45.本技术实施例还可以应用于图1c所示的分布式的存储系统。所述分布式的存储系统包括存储节点集群。其中,存储节点集群包括一个或多个存储节点20(图1c中示出了三个存储节点20a、20b及20c,但不限于三个存储节点),各个存储节点20之间可以互联。每个存储节点20与多个主机200连接。每个主机200连接多个存储节点20,并且与多个存储节点20
交互,以将数据分布存储在多个存储节点中20,从而实现数据的可靠存储。每个存储节点20至少包括处理器201、内存202、及硬盘203。其中,处理器201、内存202级硬盘203与图1a中的处理器123、内存124及硬盘134的结构及功能相同,具体请参看图1a中的相关描述,在此不再赘述。
46.图1a、图1b和图1c所示的存储系统中都可以使用树形结构的数据索引结构作为存储数据的索引,该索引用于快速找到该存储数据对应的存储地址,下文中以图1a中所示的存储系统120为例进行描述。所述数据索引结构可以为多种树形结构中的任一种,如平衡二叉树、b树、b 树等。
47.其中,平衡二叉树是二叉树的数据结构,其基于二分法的策略提高数据的查找速度。在二叉树结构中,非叶子节点只能允许包括最多两个子节点,对于具有两个子节点的父节点,该两个子节点与该父节点的逻辑地址满足预定分布规则,例如,左边子节点中包括的任一逻辑地址小于该父节点中包括的任一逻辑地址,右边子节点中包括的任一逻辑地址大于该父节点中包括的任一逻辑地址。另外,每个节点包括有限个数据的信息,该信息例如为键值(key-value,kv)对的形式,其中,键例如为已存储到存储系统中的数据的逻辑地址,值为该数据在存储系统中的物理地址。
48.b树与平衡二叉树具有相似的结构,不同在于,b树为多叉树,又名平衡多路查找树,即,在b树中,父节点可具有多于两个的子节点。
49.图2为b 树的结构示意图。如图2所示,在该b 树中,包括根节点41、中间节点层42、和叶子节点层43,其中,中间节点层42中包括多个(图2中示意示出3个)中间节点,例如包括中间节点421,叶子节点层43中包括多个(图2中示意示出6个)叶子节点,例如包括叶子节点431和叶子节点432,可以理解,图2中仅仅示意性地示出了一层中间节点层,在实际中,在根节点与叶子节点层之间可包括多个中间节点层。b 树与b树相同之处在于,父节点也可具有多于两个的子节点,不同之处在于,如图2中所示,在b 树的非叶子节点中只记录存储数据的键值对中的键(例如逻辑地址),而不包括该存储数据的键值对中的值,叶子节点保存了父节点的所有键对应的数据的值(即物理地址)。其中,在存储系统中存储的数据为定长数据的情况中,在叶子节点中记录的数据的逻辑地址例如可以为数据的逻辑地址的首地址,物理地址可以为数据的物理地址的首地址。在存储系统中存储的数据为不定长数据的情况中,在叶子节点中记录的数据的逻辑地址例如可以包括数据的逻辑地址的首地址和数据长度。下文中将以定长数据为例进行描述。可以理解,上述对数据信息(键值对)的记录方式仅仅是示意性的,本技术实施例不限于此。
50.例如,在存储系统存储定长数据的情况中,如图2中所示,叶子节点431中例如包括两条记录:“100:地址1”和“200,地址2”,叶子节点432中例如包括两条记录:“300:地址3”和“400,地址4”。其中,以“100:地址1”为例,“100”为该条记录对应的数据的逻辑地址的首地址,“地址1”为该条记录对应的数据的物理地址的首地址,由于每条记录对应的数据具有预定数据长度,因此,仅在叶子节点中记录数据的逻辑地址的首地址和物理地址的首地址,即可获知该数据的全部逻辑地址和全部物理地址。另外,中间节点421中包括两条记录,“100”和“300”,其分别为两个数据的键(即逻辑地址首地址),即,中间节点421中仅记录了数据的键而未记录数据的值。而叶子节点431中包括中间节点421中的逻辑地址100对应的物理地址(即地址1),叶子节点432中包括中间节点421中的逻辑地址300对应的物理地址(即地址
3)。通过在中间节点中仅包括数据的键而不包括数据的值,使得每个非叶子节点可以包括的数据的键大大增多,从而增多了每个非叶子节点可关联的数据的个数,减少了b 树的层数,加快了查找速度。另外,所有数据的物理地址只能在叶子节点获取,因此,在通过该b 树结构的数据索引结构查询存储系统中存储的数据时,对该数据索引结构的查询次数是相同的,即查询速度更稳定。下文中,将以b 树为例进行描述。
51.上述几种树的共同特征为,每个中间节点与一个或多个叶子节点相关联(即指向一个或多个叶子节点),每个叶子节点用于存储存储系统中一个或多个存储数据各自的kv对。例如,如图2中所示,中间节点421指向叶子节点431和叶子节点432,在该中间节点中可存储其所指向的各个叶子节点的信息,例如,中间节点421中存储叶子节点431中存储的kv对中的最小逻辑地址(即100)和叶子节点432中存储的kv对中的最小逻辑地址(即300),叶子节点431中存储两个kv对,该两个kv对分别对应于逻辑地址首地址为100的数据和逻辑地址首地址为200的数据。这样,在访问存储系统(例如写入、读取、删除等)时,可通过树形结构的数据索引结构快速查找到需要访问的地址。例如,如果需要访问逻辑地址300,由于该逻辑地址300在根节点41中包括的逻辑地址100和500之间,因此,可确定读取根节点41左侧的子节点(即中间节点421),类似地,从中间节点421可确定读取叶子节点432,从而可从叶子节点432中读取到逻辑地址300对应的地址3,并对地址3进行访问。从上面的访问过程可以看出,在树形结构中,每次访问叶子节点时,都需要通过根节点和中间节点查找到对应的叶子节点,因此,在存储系统中,对中间节点的访问频度远远高于叶子节点。为了提高系统性能,通常期望将更多的中间节点存放在存储系统120的例如控制器0的内存124中。
52.在相关技术中,树形结构中的叶子节点通常具有固定的存储容量(即分裂阈值)。其中,叶子节点的存储容量为叶子节点可存储的最大kv对数量,当叶子节点中的kv对数量达到该存储容量之后将需要进行分裂,所述分裂是指在该数据索引结构中增加新的叶子节点,以用于容纳前述叶子节点中超出存储容量的kv对。当将叶子节点的存储容量设置为固定的较大容量时,可以减少叶子节点的数量,从而可减少中间节点需要的存储空间,以便于将尽可能多的中间节点存储到内存中。然而,较大的叶子节点使得,在对该叶子节点进行插入或者读取时,需要对整个叶子节点的数据进行读取,从而造成较大的写放大和读放大。
53.另外,当将叶子节点的存储容量设置为固定的较小容量时,虽然不会造成较大的读写放大,但是会使得叶子节点数量较多,进而使得中间节点的数量增多多,中间节点需要的存储空间增大,从而,内存124有限的内存空间可能无法缓存数据索引结构中的全部中间节点,而需要将部分中间节点存储到硬盘134中,这将导致对硬盘134的访问次数增多,降低了系统性能。
54.本技术实施例提供了一种更新数据索引结构的方案,在该方案中,根据存储系统的kv对数量和内存中可存储的中间节点的数量,适配叶子节点的大小,以调整中间节点的数量,从而将数据索引结构中尽可能多的中间节点缓存在内存中。其中,在图1a及1b所示的集中式存储系统中,本技术实施例提供的更新数据索引结构的方案主要由引擎121的控制器0或者控制器1中的cpu123执行,在图1c所示的分布式存储系统中,本技术实施例提供的更新数据索引结构的方案主要由存储节点20中的处理器执行。为方便描述,以下以图1a中的存储系统120为例进行说明。
55.图3为本技术实施例提供的一种更新数据索引结构的方法流程图。该方法可由图
1a的存储系统120执行,具体地,可由存储系统120中的控制器0或控制器1的cpu123基于上述对应关系表执行。cpu123在存储系统运行过程中可每隔预定时段执行图3所示方法,或者在每处理完预定数目的数据写入和/或删除请求之后执行图3所示方法,或者可在存储系统的内存可存储的中间节点的数量变化时执行图3所示方法,等等。图3所示方法包括以下步骤:
56.步骤s301,获取存储系统的kv对的数量;
57.步骤s302,根据kv对的数量以及存储系统的内存可存储的中间节点的数量调整所述数据索引结构中的中间节点的数量。
58.下文将详细描述图3所示的各个步骤。
59.首先,在步骤s301,获取存储系统的kv对的数量。
60.在一种实施方式中,存储系统中的数据索引结构为图2所示的b 树结构,存储系统的存储数据的kv对都存储在b 树的叶子节点中,cpu123可获取存储系统中当前的存储数据对应的kv对的数量,也即b 树中的全部叶子节点中存储的kv对的数量。具体是,cpu123可从b 树的全部叶子节点获取存储系统的kv对的数量,或者,cpu123也可以对存储到硬盘中的数据个数进行累加,从而获取存储系统的kv对的数量。
61.在另一种实施方式中,存储系统中的数据索引结构例如为二叉树、b树等结构,在该情况中,存储系统中的部分kv对存储在数据索引结构的叶子节点中,部分kv对存储在数据索引结构的中间节点中,中间节点的数量可基于叶子节点的数量确定。因此,cpu123可获取存储系统的存储在数据索引结构的叶子节点中的kv对的数量,以基于该获取的kv对数量进行对中间节点的数量的调整。
62.在步骤s302,根据所述kv对的数量以及所述存储系统的内存可存储的中间节点的数量调整数据索引结构中的中间节点的数量。
63.cpu123在获取到存储系统的kv对数量之后,可首先根据该kv对数量和内存124中可存储的中间节点的数量增大或减小叶子节点的存储容量,从而调整数据索引结构中的中间节点的数量。
64.在存储系统120的硬盘134中可存储有预先确定好的存储系统的信息与叶子节点的存储容量之间的对应关系表,存储系统120在启动之后可从硬盘134读取该对应关系表,并将该对应关系表存储到控制器0或控制器1的内存124中,以加速对该对应关系表的查找。所述存储系统的信息为用于确定叶子节点的存储容量的信息。存储系统120通过查找该对应关系表,可确定当前的存储系统的信息所对应的叶子节点的存储容量,从而可调节当前的叶子节点的存储容量。
65.在一种实施方式中,存储系统中用于存储数据索引结构(例如数据索引结构中的根节点和中间节点)的内存空间为固定大小的空间,即,存储系统的内存可存储的中间节点数量确定,在该情况中,在所述对应关系表中可包括存储系统的kv对区间与叶子节点存储容量之间的对应关系,表1示例示出了该对应关系表:
66.kv对区间存储容量[0,10g]1k(10g,20g]2k
……
[0067]
表1
[0068]
其中,在数据索引结构为b 树结构的情况下,表1中左侧的列中的kv对区间为存储系统中存储数据的kv对的数量区间,右侧的列中的存储容量为预先计算得到的各个kv对区间对应的叶子节点的存储容量。其中,“10g”表示10g个kv对,1k表示1000个kv对。可以理解,在本技术实施例中,存储容量不限于以叶子节点的kv对数表示,而可以以其他数量单位进行表示,例如,存储容量也可以以存储空间大小单位(如字节、千字节、兆字节)等为单位进行表示。
[0069]
为了确定各个kv对区间所对应的叶子节点的存储容量,可预先根据存储系统内存中可存储的中间节点的数量,计算各个区间所对应的存储容量,该计算的存储容量使得将数据索引结构中尽可能多的中间节点存储到内存中。
[0070]
具体是,在一种情况中,可以将表1中的kv对区间所对应的存储容量设置为,使得该区间中各个kv对数量所对应的数据索引结构中的全部中间节点的数量小于等于所述内存可存储的中间节点的数量,从而可将数据索引结构中全部中间节点都存储到内存中,同时,该存储容量还设置为尽可能的小,以减少读写放大问题。其中,如表1所示,例如,当存储系统的kv对数量在区间[0,10g]中时,可如下计算该区间对应的存储容量:该存储容量使得10gkv对数量对应的数据索引结构中的全部中间节点的数量等于所述内存可存储的中间节点的数量,以符合上述条件。例如,如此计算获取的区间[0,10g]对应的存储容量为1k。
[0071]
当存储系统的kv对数量在区间(10g,20g]时,由于kv对数量增多,如果还是使用1k的存储容量,叶子节点的数量将增多,进而导致中间节点的数目增多,从而数据索引结构中的全部中间节点的数量可能大于内存可存储的中间节点的数量。与区间[0,10g]类似的,可根据内存可存储的中间节点的数量,计算区间(10g,20g]所对应的存储容量,该存储容量使得数据索引结构中的全部中间节点的数量小于等于所述内存可存储的中间节点的数量,同时该存储容量尽可能地小。该计算的存储容量例如为2k。也就是说,从表1中可以看出,越高的数据量区间对应的存储容量越大。即,存储系统的kv对数量越大,可将叶子节点的存储容量设置为越大,以将全部中间节点存储到内存中。
[0072]
在另一种情况中,为了避免过大的写放大和读放大问题,可对存储容量设置最大值(例如50k),从而,在表1中的右侧的列中,当随着kv对区间的增高,存储容量逐渐增大并首次设置为50k之后,在后续kv对区间进一步增高时,将不再增大对应的存储容量。
[0073]
在另一种实施方式中,存储系统中用于存储数据索引结构的内存空间为大小变化的空间,即,内存可存储的中间节点的数量是变化的。在该情况中,在对应关系表中可包括存储系统中内存可存储的中间节点的数量区间、kv对数量区间与叶子节点存储容量之间的对应关系,表2示出了该对应关系表:
[0074][0075]
表2
[0076]
其中,在例如b 树结构下,表2中第1行中的kv对区间为存储系统中存储数据的kv对区间,左起第1列中的内存区间为内存可存储的中间节点的数量区间,表2中的与各个kv对区间和内存区间对应的格存储了该kv对区间和该内存区间共同对应的叶子节点的存储容量。其中,如表2中第2行所示,当内存区间固定在[0,500m]区间时,与表1类似地,该内存区间[0,500m]所对应的存储容量的大小随着kv对区间的升高而增大,即,表2包含了表1所示的对应关系。如表2中第2列所示,当kv对区间固定在[0,10g]区间内时,该kv对区间[0,10g]所对应的存储容量的大小随着内存区间的升高而减小。即,当存储系统的kv对数量不变时,当内存可存储的中间节点的数量增大,可将叶子节点的存储容量减小,从而减小读写放大问题,当内存区间可存储的中间节点的数量减小,可将叶子节点的存储容量增大,以减小叶子节点的数量,进而减小中间节点的数量,从而将尽可能多的中间节点存储到内存中。
[0077]
可以理解,表1和表2所示的对应关系表仅仅是示意性的,而不用于限制本技术实施例的范围。例如,对应关系表中包括的kv对区间、存储容量和内存区间的值不限于如表1或表2中所示,对应关系表中不限于包括如表2所示的kv对区间、内存区间与存储容量的对应关系,等等。例如,所述数据索引结构中的中间节点不限于存储于内存空间中,也可以存储于其他可快速读取的存储介质中,从而可在对应关系表中记录该存储介质对应的区间、kv对区间与存储容量的对应关系。另外,在对应关系表中还可以包括其他与存储容量关联的信息,如cpu负载、存储系统中硬盘、内存的带宽占用率等信息。
[0078]
下文将以存储系统中存储表1所示的对应关系表为例进行详细描述。
[0079]
cpu123在获取存储系统的kv对数量(例如为15g)之后,确定该15g对应于表1中的kv对区间(10g,20g],因此,cpu123可确定对应的存储容量为该区间对应的存储容量(即2k)。内存124中可存储有叶子节点的当前的存储容量,cpu123在根据kv对数量确定对应的存储容量为2k之后,可比较叶子节点的当前的存储容量是否等于2k,如果比较结果为是,则表示存储系统的kv对数量变化不大(即还在原有区间内),不用更新叶子节点的存储容量,如果比较结果为否,则表示存储系统的kv对数量变化较大(到达了新的区间),因此,cpu123可将内存中存储的叶子节点的存储容量更新为2k,以适应于所述新的区间。
[0080]
具体是,当存储系统的kv数量不断增大从而达到新的区间之后,cpu123将增大叶子节点的存储容量,当存储系统的kv数量由于数据删除等操作不断减小从而达到新的区间之后,cpu123将减小叶子节点的存储容量。
[0081]
cpu123在更新叶子节点的存储容量之后,可以基于叶子节点的更新的存储容量,更新数据索引结构中的中间节点的数量。
[0082]
在一种情况中,cpu123增大了叶子节点的存储容量。由于叶子节点的存储容量增大,数据索引结构中各个叶子节点变为可以存放更多的kv对。假设叶子节点在更新存储容量之前可存储3个kv对,在更新存储容量之后可存储6个kv对,则图2所示的数据索引结构在进行该更新之后变为如图4所示的数据索引结构。对于图4所示的数据索引结构,cpu123可在相邻叶子节点的充满度低于一定阈值(如二分之一或三分之一等)时,对该相邻叶子节点进行合并,从而可减少叶子节点的个数,并进一步减少中间节点的个数。如图5所示,在对图4中每两个相邻的叶子节点进行合并之后,可获得如图5所示的数据索引结构,该数据索引结构相比于图4减少了叶子节点的个数,在叶子节点的个数减少之后,由于中间节点中只需要包括叶子节点中的最小逻辑地址,因此,中间节点的个数也减少了。在另一种实施方式
中,还可以将充满度低于一定阈值的相邻的两个以上的叶子节点进行合并,例如,可将图4中的相邻三个叶子节点合并为一个叶子节点,从而进一步减少数据索引结构中中间节点的数量。
[0083]
在另一种情况中,cpu123由于数据删除减小了叶子节点的存储容量。在进行存储容量的更新之后,数据索引结构中可能还有叶子节点中包括多于更新的存储容量的kv对,例如,更新的存储容量对应的kv对数为3个,而叶子节点中当前包括4个kv对。从而,cpu123可对该叶子节点进行分裂,具体是,在数据索引结构中增加一个新的叶子节点,使用该新的叶子节点容纳前述叶子节点中多出的一个kv对,从而使得前述叶子节点中只容纳3个kv对。在进行该对叶子节点的分裂之后,使得减少了叶子节点的读写放大问题。
[0084]
通过图3所示的更新数据索引结构的方案,存储系统120在不同时刻的叶子节点的存储容量有可能是不同的,为此,存储系统120在写入数据或者删除数据之后更新数据索引结构时,需要首先获取当前的叶子节点的存储容量,然后再根据该存储容量确定是否进行对叶子节点的合并或者分裂等操作。
[0085]
图6为本技术实施例提供的在存储系统中写入数据的方法流程图。该方法可由图1a的存储系统120执行,具体地,可由存储系统120中的控制器0或控制器1的cpu123执行。图6所示方法包括以下步骤s601-s605。
[0086]
首先,在步骤s601,接收写请求。该写请求例如由图1a中的任一主机200发送给存储系统120,该写请求中包括将写入数据的逻辑地址,该逻辑地址例如包括待写入数据的一段逻辑地址的首地址和该段逻辑地址的地址长度。
[0087]
在步骤s602,在根据逻辑地址写入数据之后,在数据索引结构中获取与所述逻辑地址对应的叶子节点。存储系统在接收到写请求之后,cpu123根据逻辑地址与物理地址的对应关系确定写入数据的物理地址,并将写请求中待写的数据写入到该确定的物理地址中。其中,在存储定长数据的情况中,如果该待写的数据大于定长长度,还可以将该待写的数据拆分成多个具有定长长度的数据,以分别写入到存储系统中。
[0088]
在写入数据之后,cpu123还要相应地更新数据索引结构,以在后续用户查询该数据时可以根据数据索引结构找到该数据。具体是,以该写入的数据为定长数据为例,cpu123首先在数据索引结构中查找与写请求中的逻辑地址首地址对应的叶子节点。例如,参考图2,假设写请求中的逻辑地址的首地址为280,在数据索引结构中从根节点41开始查找,可确定逻辑地址280与叶子节点431相对应。在所述写入的数据被拆分成多个定长数据的情况中,可类似地在数据索引结构中获取与该多个定长数据对应的多个叶子节点。在该方法的后续步骤中,仅描述写入数据为定长数据的情况下对单个叶子节点的处理过程作为示例,对多个叶子节点的处理可参照在写入数据为定长数据的情况下对单个叶子节点的处理过程。
[0089]
步骤s603,将数据的kv对记录至叶子节点中。
[0090]
在确定逻辑地址首地址280与叶子节点431相对应之后,可将该新写入的数据的kv对写入到叶子节点431中。例如,可将该数据的逻辑地址首地址和物理地址首地址作为一个新的kv对条目写入到叶子节点431中。
[0091]
步骤s604,获取叶子节点的存储容量。
[0092]
通常,在对叶子节点写入之后,需要根据叶子节点的存储容量确定是否对叶子节
点进行分裂。由于在本技术实施例中存储容量是变化的,因此,需要首先获取叶子节点的当前的存储容量。具体是,可以从内存124中获取所记录的叶子节点的当前的存储容量。
[0093]
步骤s605,在确定叶子节点中包括的kv对数超过存储容量的情况中,对叶子节点进行分裂。
[0094]
例如,假设叶子节点的存储容量为2个kv对,在向叶子节点431加入新的kv对之后,可确定叶子节点431中的kv对数超过了存储容量,因此,可在中间节点421下增加一个新的叶子节点,以存储该新加入的kv对。另外,在增加该新的叶子节点之后,在中间节点421下的叶子节点的个数超过预定阈值的情况中,还可以增加新的中间节点,并使得该增加的叶子节点作为该增加的中间节点的子节点。
[0095]
图7为本技术实施例提供的在存储系统中删除数据的方法流程图。该方法可由图1a的存储系统120执行,具体地,可由存储系统120中的控制器0或控制器1的cpu123执行。图7所示方法包括以下步骤s701-s705。
[0096]
首先,在步骤s701,接收数据删除请求。该数据删除请求例如由图1a中的任一主机200发送给存储系统120,该数据删除请求中包括待删除的数据的逻辑地址,该逻辑地址例如包括待删除数据的一段逻辑地址的首地址和该段逻辑地址的地址长度。
[0097]
在步骤s702,在根据逻辑地址删除数据之后,在数据索引结构中获取与所述逻辑地址对应的叶子节点。存储系统在接收到数据删除请求之后,cpu123根据逻辑地址与物理地址的对应关系确定存储待删除数据的物理地址,并删除该物理地址中存储的数据。
[0098]
在删除数据之后,cpu123还要相应地更新数据索引结构。具体是,以所述删除的数据为定长数据为例,cpu123首先在数据索引结构中查找与数据删除请求中的逻辑地址首地址对应的叶子节点。例如,参考图2,假设数据删除请求中的逻辑地址的首地址为200,在数据索引结构中从根节点41开始查找,可确定逻辑地址200与叶子节点431相对应。
[0099]
在步骤s703,从叶子节点中删除数据的kv对。
[0100]
在确定逻辑地址200与叶子节点431相对应之后,可在叶子节点431中删除数据的kv对,即逻辑地址200对应的kv对。
[0101]
步骤s704,获取叶子节点的存储容量。
[0102]
通常,在对叶子节点进行删除之后,需要根据叶子节点的存储容量确定是否对叶子节点进行合并。由于在本技术实施例中存储容量是变化的,因此,需要首先获取叶子节点的当前的存储容量。具体是,可以从内存中获取所记录的叶子节点的当前的存储容量。
[0103]
步骤s705,在确定相邻叶子节点中的kv对数少于存储容量的一定阈值的情况中,对该相邻叶子节点进行合并。
[0104]
例如,假设叶子节点的存储容量为4个kv对,所述一定阈值为叶子节点的存储容量的二分之一,在对叶子节点431进行上述删除之后,在确定叶子节点431和叶子节点的432的kv对数都少于或者等于存储容量的二分之一(即2个kv对)的情况中,可将叶子节点431和叶子节点432合并为一个叶子节点。
[0105]
图8为本技术实施例提供一种存储系统的数据索引结构的调整装置的架构图,所述装置用于执行图3所示方法,包括:
[0106]
获取单元81,用于获取所述存储系统的键-值kv对的数量,其中,所述数据索引结构包括多个中间节点和多个叶子节点,每个中间节点用于指向所述多个叶子节点中的一个
或多个叶子节点,所述多个叶子节点用于存储所述存储系统的kv对;
[0107]
调整单元82,用于根据所述kv对的数量以及所述存储系统的内存可存储的中间节点的数量调整所述数据索引结构中的中间节点的数量。
[0108]
在一种实施方式中,所述调整单元82具体用于:根据所述kv对的数量以及所述存储系统的内存可存储的中间节点的数量增大或减小叶子节点的存储容量;根据增大或减小后的叶子节点的存储容量调整所述数据索引结构中的中间节点的数量。
[0109]
在一种实施方式中,所述调整单元82还具体用于:根据增大后的叶子节点的存储容量,对部分叶子节点进行合并,以减小所述数据索引结构中的中间节点的数量;或,根据减小后的叶子节点的存储容量,对部分叶子节点进行分裂,以增加所述数据索引结构中的中间节点的数量。
[0110]
在一种实施方式中,所述调整单元82还具体用于:在所述存储系统的内存可存储的中间节点数量确定的情况下:当确定所述kv对的数量增多,则增大当前叶子节点的存储容量;或,当确定所述kv对的数量减少,则减小当前叶子节点的存储容量。
[0111]
本技术实施例还提供一种存储设备,包括处理单元和存储单元,所述存储单元中存储有可执行代码,所述处理单元执行所述可执行代码以实现图3、图6或图7所示方法。
[0112]
本技术实施例还提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机或处理器中执行时,令所述计算机或处理器执行图3、图6或图7所示方法。
[0113]
本技术实施例还提供一种计算机程序产品,其特征在于,当所述计算机程序产品在计算机或处理器中运行时,使得所述计算机或处理器执行图3、图6或图7所示方法。
[0114]
需要理解,本文中的“第一”,“第二”等描述,仅仅为了描述的简单而对相似概念进行区分,并不具有其他限定作用。
[0115]
本领域的技术人员可以清楚地了解到,本技术提供的各实施例的描述可以相互参照,为描述的方便和简洁,例如关于本技术实施例提供的各装置、设备的功能以及执行的步骤可以参照本技术方法实施例的相关描述,各方法实施例之间、各装置实施例之间也可以互相参照。
[0116]
本领域技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的全部或部分步骤;而前述的存储介质包括:只读存储器(read-only memory,rom)、随机存取存储器(random-access memory,ram)、磁盘或者光盘等各种可以存储程序代码的介质。
[0117]
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中
心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质、或者半导体介质(例如固态硬盘(solid state disk,ssd)等。
[0118]
在本技术所提供的几个实施例中,应该理解到,所揭露的装置和方法,在没有超过本技术的范围内,可以通过其他的方式实现。例如,以上所描述的实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
[0119]
另外,所描述装置和方法以及不同实施例的示意图,在不超出本技术的范围内,可以与其它系统,模块,技术或方法结合或集成。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电子、机械或其它的形式。
[0120]
以上所述,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本技术揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应所述以权利要求的保护范围为准。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献