键值固态驱动器中的动态存储的制作方法

文档序号:32945135发布日期:2023-01-14 10:29阅读:27来源:国知局
键值固态驱动器中的动态存储的制作方法
键值固态驱动器中的动态存储
1.相关申请的交叉引用
2.本技术要求于2021年7月7日提交的第202141030420号印度专利申请的优先权,其公开内容通过引用整体并入本文。
技术领域
3.本公开一般涉及将键(key)存储在存储装置/存储器中,尤其涉及将键存储在键值固态驱动器中。


背景技术:

4.键值固态驱动器(kv ssd)支持在其中存储键值数据。键值数据通常包括一个或多个键以及与这些键相关联的值。在示例中,当存储在kv ssd中时,键存储在kv ssd中实施的给定数据结构的节点中。许多不同的已知数据结构可以用于实施kv ssd中的键和值的存储。
5.在一些实施b+树数据结构的kv ssd中,用于在给定节点中存储键的技术涉及将每个键存储在节点的对应区域中。节点中的该区域或空间具有预定的固定大小。有时,这种存储模式会导致节点中浪费的存储空间。例如,考虑这样的示例,其中预定大小是256字节,要存储的键的大小是8字节。在这种情况下,256个可用字节中的大部分将不会被使用。
6.在本领域中需要提供一种具有增加的空间利用率的存储模式。


技术实现要素:

7.提供以下概述以介绍一些概念,这些概念将在本文所包括的详细描述中进一步描述。该概述不旨在标识关键或必要的发明概念,也不旨在用于确定本发明的范围。
8.在被配置为存储键值对的系统的一些比较示例中使用的存储模式可能导致浪费的空间。例如,在实施b+树数据结构的kv ssd中,可以为每个键分配256字节的键空间。然而,键通常不具有一致的大小。键可以是例如7字节、8字节、128字节等;即,具有比分配的空间更小的大小。本公开提供了用于有效存储键值对的方法的实施例。在实施例中,该方法从存储器节点的一端用键来填充节点,并且从节点的另一端填充关于键的元数据。键和它们的元数据朝向中心汇聚。本文描述的(多个)方法提供了一种最大限度地利用节点中的可用空间的方式。
9.在实施例中,公开了一种方法。该方法包括接收将一个或多个键存储在键值固态驱动器(kv-ssd)中的请求。该方法还包括执行用于将一个或多个键中的每个键存储在kv-ssd的数据结构的节点中的存储操作。对于一个或多个键中的每个键,存储操作包括在节点中分配第一区域用于存储键,使得第一区域的大小等于键的大小。存储操作还包括在节点中分配第二区域用于存储与键相关联的键元数据,使得第二区域具有预定大小。此外,存储操作包括将键存储在节点的第一区域中,并将键元数据存储在节点的第二区域中。
10.在另一实施例中,公开了一种系统。该系统包括请求处理器,被配置为接收将多个
键存储在键值固态驱动器(kv-ssd)中的请求。该系统还包括存储器管理器,被配置为执行用于将多个键中的每个键存储在kv-ssd的数据结构的节点中的存储操作。在存储操作中,存储器管理器被配置为在节点中分配第一区域用于存储键,使得第一区域的大小等于键的大小。此外,存储器管理器被配置为在节点中分配第二区域用于存储与键相关联的键元数据,使得第二区域具有预定大小。此外,存储器管理器被配置为将键存储在节点的第一区域中,并将键元数据存储在节点的第二区域中。
11.为了进一步阐明本发明概念的特征,将通过参考在附图中示出的本发明的具体实施例来对本发明进行更具体的描述。应当理解,这些附图描绘了本发明的示例实施例,因此不应被认为是对其范围的限制。将结合附图以额外的特征和细节来描述和解释本发明概念。
附图说明
12.通过参考附图详细描述本公开的示例实施例,本公开的上述和其他方面和特征将变得更加明显,在附图中:
13.图1示出了根据本公开的实施例的实施用于将键存储在键值固态驱动器(kv ssd)中的系统的网络环境;
14.图2示出了根据本公开的实施例的将键存储在kv ssd中的方法;
15.图3示出了根据本公开的实施例的节点的分段过程;
16.图4示出了根据本公开的实施例的节点的结构;并且
17.图5示出了根据本公开的实施例的比较结果。
18.应当理解,附图中的元件是为了简单起见而示出的,可能不一定是按比例绘制的。例如,流程图根据所涉及的最显著的步骤示出了方法的实施例,以帮助提高对本发明概念的各方面的理解。此外,就设备的构造而言,设备的一个或多个组件可能已经在附图中由常规符号表示,并且附图可能仅示出与理解本发明概念的实施例相关的那些具体细节,以便不会用受益于本文描述的本领域普通技术人员将容易明白的细节来模糊附图。
具体实施方式
19.为了促进对本发明概念的原理的理解,现在将参考附图中示出的实施例,并且将使用特定的语言来描述这些实施例。应当理解,这并不意味着对本发明概念的范围的限制,并且在不实质上背离本发明概念的范围的情况下,可以进行对示出的系统的变更和修改以及对示出的本发明概念的原理的进一步应用。
20.本领域技术人员将理解,前面的一般描述和下面的详细描述是对本发明概念的解释,而不是对本发明概念的限制。
21.贯穿本说明书对“一个方面”、“另一方面”或类似语言的引用可能意味着结合该实施例描述的特定特征、结构或特性被包括在本发明概念的至少一个实施例中。因此,贯穿本说明书出现的短语“在实施例中”、“在另一实施例中”和类似的语言可以但不一定都指同一实施例。
22.术语“包括”、“包含”或其任何其他变体旨在涵盖非排他性的包含,使得包括一系列步骤的过程或方法不仅包括那些步骤,还可以包括未明确列出的或该过程或方法固有的
其他步骤。类似地,以“包含
…”
或“包括
…”
开头的一个或多个设备或子系统或元件或结构或组件在没有更多限制的情况下,不排除其他设备或其他子系统或其他元件或其他结构或其他组件或附加设备或附加子系统或附加元件或附加结构或附加组件的存在。
23.除非另有定义,否则本文使用的所有技术和科学术语具有与本发明概念所属领域的普通技术人员通常理解的相同含义。本文提供的系统、方法和示例仅是说明性的,而不是限制性的。
24.下面将参考附图详细描述本发明概念的实施例。
25.图1示出了根据本公开的一个或多个实施例的包括系统102的环境100。环境100还示出了键值(kv)固态驱动器(kv ssd)104和一个或多个kv应用106。在示例中,系统102可以被配置为将与kv应用106有关的多个键存储在kv ssd 104中。系统102可以在例如计算设备(诸如数据服务器、服务器、数据存储、膝上型电脑、台式电脑等)中实施。
26.在示例中,系统102包括处理器110、存储器112、请求处理器114、存储器管理器116、查询处理器118和数据120。在示例中,存储器112、请求处理器114、存储器管理器116和查询处理器118耦接到处理器110。处理器110可以是单个处理单元或多个单元,所有这些单元都可以包括多个计算单元。处理器110可以被实施为一个或多个微处理器、微型计算机、微控制器、数字信号处理器、中央处理单元、状态机、逻辑电路和/或基于操作指令操纵信号的任何设备。处理器110被配置用于多种功能,包括获取和执行存储在存储器112中的计算机可读指令和数据的能力。
27.存储器112可以包括非暂时性计算机可读介质,包括例如易失性存储器,诸如静态随机存取存储器(sram)和动态随机存取存储器(dram),和/或非易失性存储器,诸如只读存储器(rom)、可擦除可编程rom、闪存、硬盘、光盘和磁带。
28.请求处理器114、存储器管理器116和查询处理器118等包括可以执行特定任务或实施数据类型的例程、程序、对象、组件、数据结构等。请求处理器114、存储器管理器116和查询处理器118也可以被实施为例如(多个)信号处理器、(多个)状态机、逻辑电路和/或基于操作指令操纵信号的任何其他设备或组件。此外,请求处理器114、存储器管理器116和查询处理器118可以用硬件、由处理单元执行的指令或其组合来实施。处理单元可以是或包括计算机、处理器(诸如处理器110)、状态机、逻辑阵列或能够处理指令的任何其他合适的设备。处理单元可以是通用处理器,其被配置为执行指令以使通用处理器执行所需的任务,或者处理单元可以专用于执行所需的功能。
29.在本公开的一些实施例中,请求处理器114、存储器管理器116和查询处理器118可以是机器可读指令(软件),当由处理器/处理单元执行时,该机器可读指令(软件)执行任何所描述的功能。数据120用作储存库等,用于存储由处理器110、请求处理器114、存储器管理器116或查询处理器118处理、接收和生成的数据。
30.在示例中,kv应用106被配置为在它们各自的操作期间管理、生成、更新或删除kv数据等。kv数据可以包括键值对。关于前述操作,kv应用106可以向系统102做出对应的请求。例如,在示例实施例中,为了将键108存储在kv ssd 104中,kv应用106可以向系统102做出存储请求。
31.在示例实施例中,请求处理器114可以被配置为接收将多个键108存储在kv ssd 104中的存储请求。在示例中,请求处理器114可以将存储请求存储在数据120中。在示例中,
存储请求可以包括要存储在kv ssd 104中的键108。在示例中,存储请求可以包括到系统102可以从其获得要存储在kv ssd 104中的键108的存储装置的链接或路径。
32.因此,在示例实施例中,存储器管理器116可以被配置为从存储请求和/或从其中提供的链接/路径获得键108。换句话说,存储器管理器116可以基于存储请求获得键108。
33.在示例实施例中,存储器管理器116可以被配置为执行可以将多个键108中的每个键存储在kv ssd 104的数据结构的节点中的存储操作。以下描述适用于参考图4的实施例,其中图4示出了kv ssd 104的数据结构的节点400。
34.在示例实施例中,节点400至少包括键区域402和键元数据区域404。在示例中,存储器管理器116可以将多个键108存储在键区域402中。此外,存储器管理器116可以将与多个键108中的每一个相关联的键元数据存储在键元数据区域404中。在示例实施例中,与键108相关联的键元数据可以包括与键108相关联的偏移值和键108的大小。在示例中,偏移值指示节点400中的键108的位置。在示例实施例中,键区域402从节点400的第一端406开始,键元数据区域404从节点400的第二端408开始。此外,在示例实施例中,第二端408可以与第一端406相对。
35.此外,在示例实施例中,节点400还包括位于键区域和键元数据区域之间的安全区域410。安全区域410可以被理解为存在于节点400中的预定大小的区域,其防止键区域402和键元数据区域404之间的重叠。此外,在示例实施例中,节点400还包括节点元数据区域412。节点元数据区域412包括关于节点400的占用率的信息。
36.以下描述适用于仅参考一个键108的存储操作。可以理解,多个键108中的其他键可以以类似的方式存储。
37.在示例实施例中,在存储操作中,存储器管理器116可以被配置为在节点400中分配第一区域414。可以分配第一区域414,使得第一区域414的大小等于键108的大小。此后,存储器管理器116可以被配置为在节点400中分配第二区域416,用于存储与键108相关联的键元数据。可以分配第二区域416,使得第二区域416具有预定大小。在示例实施例中,第二区域416的预定大小是3字节。
38.在示例实施例中,一旦存储器管理器116已经分配了第一区域414和第二区域416,存储器管理器116然后可以将键存储在第一区域414中,并将键元数据存储在第二区域416中。
39.在示例实施例中,存储器管理器116可以被配置为从节点400的第一端406开始将多个键108存储在键区域402中。在实施例中,存储器管理器116可以被配置为从节点400的第二端408开始存储与键108中的每一个相关联的键元数据。
40.根据本公开的各方面,存储器管理器116从节点的一端存储多个键108并且从节点的另一端存储对应的键元数据。键108中的每一个的键元数据有助于保持顺序并跟踪节点中的可用空间。根据上述方面,键108占用所需的确切空间,并且对应的键元数据是恒定的,并且驻留在节点的另一端。因此,对于不同的工作负载,动态顺序确保节点内的最大键空间利用率。
41.在示例中,kv应用106可以发送删除多个键108中的至少一个键的请求。在示例实施例中,请求处理器114可以从kv应用106接收请求。在示例中,响应于接收到请求,存储器管理器116可以被配置为从节点400删除至少一个键和相关联的元数据。
42.在示例实施例中,存储器管理器116可以被配置为在节点400上执行分段过程。在分段过程中,存储器管理器116可以被配置为更新键区域402中的多个键108中的一个或多个键的位置。例如,分段过程可以涉及对节点400的一个或多个部分进行去分段的过程。因此,存储器管理器116可以被配置为基于一个或多个键中的每一个的新位置来更新与多个键108中的一个或多个键相关联的对应的键元数据。
43.在示例实施例中,请求处理器114可以被配置为接收在节点400中存储另一键的进一步请求。在示例实施例中,存储器管理器116可以被配置为确定下一个键的大小是否大于节点中的可用空间。为此,在示例中,存储器管理器116可以基于节点元数据区域412来确定可用空间。随后,存储器管理器116可以将可用空间与下一个键的大小进行比较。在示例中,如果确定下一个键的大小大于可用空间,则存储器管理器116可以被配置为执行分段过程,如上所述。在执行分段过程之后,存储器管理器116可以再次确定可用空间,并将其与下一个键的大小进行比较。如果下一个键的大小现在被确定为小于可用空间,存储器管理器116可以被配置为将下一个键存储在节点400中。在另一示例中,如果下一个键的大小仍然大于可用空间,则存储器管理器116可以取消下一个键的存储过程,并且可以通知kv应用106。
44.在示例实施例中,请求处理器114可以被配置为从kv应用106接收范围查询调用。查询处理器118可以被配置为基于键元数据区域404来服务范围查询调用。在范围查询调用的服务期间,查询处理器118可以被配置为对键元数据区域404执行二分搜索。在本文中,在二分搜索中,查询处理器118寻找由键元数据表示的键。
45.图2示出了根据本公开的实施例的将键存储在kv ssd中的方法200。方法200可以使用系统102的一个或多个组件来实施。在下面的描述中可以省略已经参考上面图1和图4的描述详细解释的组件的重复描述。
46.在步骤202,接收将多个键存储在kv ssd中的请求。在示例中,存储键的请求可以由kv应用(诸如kv应用106)发送。在示例中,请求处理器114可以从kv应用106接收存储请求。
47.在步骤204,执行用于将多个键中的每个键存储在kv ssd的数据结构的节点中的存储操作。在示例中,存储器管理器116可以执行存储操作。在示例中,节点至少包括键区域和键元数据区域。键区域存储多个键,并且键元数据区域存储与多个键中的每一个相关联的键元数据。此外,键区域从节点的第一端开始,并且键元数据区域从节点的第二端开始。在示例中,第二端与第一端相对。
48.此外,在示例中,节点还包括位于键区域和键元数据区域之间的安全区域。此外,在示例实施例中,节点还包括节点元数据区域,其中该节点元数据区域包括关于节点的占用率的信息。
49.返回参考存储操作,存储操作包括如下所述的各种步骤。
50.在存储操作的步骤204-a,节点中的第一区域被分配用于存储键,使得第一区域的大小等于键的大小。
51.在存储操作的步骤204-b,节点中的第二区域被分配用于存储与键相关联的键元数据,使得第二区域具有预定大小。在示例中,第二区域可以具有3字节的大小。
52.在存储操作的步骤204-c,键存储在节点的第一区域中,并且键元数据存储在节点的第二区域中。
53.在示例实施例中,方法200还包括从节点的第一端开始将多个键存储在键区域中。例如,参考图4,第一键可以存储在节点400的第一端406处或附近,并且要存储的下一个键可以存储在第一键附近,等等。此外,在示例实施例中,方法200还包括以类似的方式从节点的第二端开始将与多个键中的每一个相关联的键元数据存储在键元数据区域中。
54.在示例实施例中,方法200还包括从kv应用接收范围查询调用。在示例实施例中,方法200还包括基于键元数据区域来服务范围查询调用。
55.在示例实施例中,方法200还包括接收从多个键中删除至少一个键的请求。在示例实施例中,方法200还包括响应于接收到请求,从节点删除至少一个键和相关联的元数据。
56.可以理解,在删除之后,在存储在键区域中的键之间可能会有空白空间。因此,可以如下面在图3的描述中描述的那样执行分段过程。
57.图3示出了根据本公开的实施例的节点的分段的方法300。方法300可以使用系统102的一个或多个组件来实施。为了简洁起见,在下面的描述中可以省略已经参考上面图1、图2和图4的描述详细描述的组件的描述。
58.方法300开始于步骤302,其中更新键区域中多个键中的一个或多个键的位置。此外,在步骤304,基于一个或多个键中的每一个的新位置,更新与多个键中的一个或多个键相关联的对应的键元数据。
59.因此,可以优化给定节点中的可用空间。在示例中,方法300的分段过程可以在删除键之后自动发生。在示例中,分段过程可以基于用户输入而发生。在示例中,如下所述,分段可以响应于进一步请求的处理而发生。
60.在示例中,在步骤306,方法300包括接收在节点中存储另一键的进一步请求。因此,在步骤308,确定下一个键的大小是否大于节点中的可用空间。在步骤310,如果确定下一个键的大小大于可用空间,则执行分段过程。
61.图5示出了根据本公开的实施例的比较结果500。在第一表502中,示出了根据传统技术的用于将键存储在kv ssd的数据结构的节点中的存储空间。第二表504示出了根据所提出的主题的各方面的用于将键存储在诸如kv ssd 104的kv ssd的数据结构的节点中的存储空间。
62.可以看出,根据传统技术,总共2304字节被用于存储总大小为607字节的键。而在非限制性示例中,总共634字节被用于存储总大小为607字节的键。因此,将理解,所提出的主题的方面提供了一种优化在给定kv ssd的节点中提供的存储空间的解决方案。
63.虽然已经使用了特定的语言来描述本公开,但是不旨在由此产生的任何限制。对于本领域技术人员来说明显的是,可以对方法和/或系统进行各种工作修改,以便实施本文教导的发明概念。附图和前面的描述给出了实施例的示例。本领域技术人员将理解,一个或多个所描述的元件可以很好地组合成单个功能元件。或者,特定元件可以被分成多个功能元件。一个实施例中的元件可以添加到另一实施例。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1