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

用于管理存储系统的方法、设备和计算机程序产品与流程

2022-02-20 12:43:18 来源:中国专利 TAG:


1.本公开的各实现方式涉及存储管理,更具体地,涉及用于管理存储系统中的数据对象的方法、设备和计算机程序产品。


背景技术:

2.随着数据存储技术的发展,各种数据存储设备已经能够向用户提供越来越高的数据存储能力。目前已经提出了在存储系统中设置布隆滤波器的技术方案。在该技术方案中,布隆滤波器中的一个或多个元素可以指示在存储系统中是否存在某个数据对象。随着存储系统中的数据对象数量不断增加,为了避免哈希冲突,布隆滤波器的长度也随之增大并需要占用存储系统中更大的内部存储器空间。此时,如何降低布隆滤波器的存储器的空间开销,成为一个研究热点。


技术实现要素:

3.因而,期望能够开发并实现一种以更为有效的方式来管理存储系统的技术方案。期望该技术方案能够与现有的存储系统相兼容,并且通过改造现有存储系统的各种配置,来以更为有效的方式管理存储系统。
4.根据本公开的第一方面,提供了一种用于管理存储系统的方法。在该方法中,根据存储系统中的多个数据对象的关键字的范围,将多个数据对象划分至多个分组。分别生成与多个分组中的分组相关联的阵列集合,阵列集合中的阵列包括多个元素。在此,多个元素是根据分组中的至少一个数据对象的关键字以及至少一个哈希函数来设置的。将分别与多个分组相关联的多个阵列集合中的至少一部分阵列加载至存储系统的存储器中。基于存储器中的至少一部分阵列,管理存储系统。
5.根据本公开的第二方面,提供了一种电子设备,包括:至少一个处理器;易失性存储器;以及与至少一个处理器耦合的存储器,存储器具有存储于其中的指令,指令在被至少一个处理器执行时使得设备执行用于管理存储系统的动作。该动作包括:根据存储系统中的多个数据对象的关键字的范围,将多个数据对象划分至多个分组;分别生成与多个分组中的分组相关联的阵列集合,阵列集合中的阵列包括多个元素,多个元素是根据分组中的至少一个数据对象的关键字以及至少一个哈希函数来设置的;将分别与多个分组相关联的多个阵列集合中的至少一部分阵列加载至存储系统的存储器中;以及基于存储器中的至少一部分阵列,管理存储系统。
6.根据本公开的第三方面,提供了一种计算机程序产品,计算机程序产品被有形地存储在非瞬态计算机可读介质上并且包括机器可执行指令,机器可执行指令用于执行根据本公开的第一方面的方法。
附图说明
7.结合附图并参考以下详细说明,本公开各实现方式的特征、优点及其他方面将变
得更加明显,在此以示例性而非限制性的方式示出了本公开的若干实现方式。在附图中:
8.图1示意性示出了其中可以实现本公开的方法的存储系统的示意图;
9.图2示意性示出了根据一个技术方案的存储系统的索引的框图;
10.图3示意性示出了根据本公开的一个实现方式的用于管理存储系统的过程的框图;
11.图4示意性示出了根据本公开的一个实现方式的用于管理存储系统的方法的流程图;
12.图5示意性示出了根据本公开的一个实现方式的用于确定数据对象的布隆滤波器数值的过程的框图;
13.图6示意性示出了根据本公开的一个实现方式的用于将多个阵列集合中的至少一部分阵列加载至存储器的过程的框图;
14.图7示意性示出了根据本公开的一个实现方式的用于管理被加载到存储器中的多个阵列的队列的框图;
15.图8示意性示出了根据本公开一个实现方式的用于向存储系统中存储目标数据对象的方法的流程图;
16.图9示意性示出了根据本公开一个实现方式的用于在存储系统中查询目标数据对象的方法的流程图;以及
17.图10示意性示出了根据本公开的示例性实现的用于管理存储系统的设备的框图。
具体实施方式
18.下面将参照附图更详细地描述本公开的优选实现。虽然附图中显示了本公开的优选实现,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实现所限制。相反,提供这些实现是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
19.在本文中使用的术语“包括”及其变形表示开放性包括,即“包括但不限于”。除非特别申明,术语“或”表示“和/或”。术语“基于”表示“至少部分地基于”。术语“一个示例实现”和“一个实现”表示“至少一个示例实现”。术语“另一实现”表示“至少一个另外的实现”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。
20.目前已经开发出了多种存储系统,具体地,图1示意性示出了其中可以实现本公开的方法的存储系统的框图100。如图1所示,可以提供存储系统110,并且该存储系统110可以包括多个存储设备112、114、
……
、116。尽管在此示出了多个独立的物理存储设备112、114、
……
、116,根据本公开的示例性实现,存储设备还可以包括虚拟存储设备。备选地和/或附加地,在此的存储系统110可以是包括单一存储设备的存储系统。
21.在存储系统110之上,可以建立对象层120,并且该对象层120对于存储系统110的用户是可见的。对象层120可以包括来自用户的多个对象122以及124等。为了便于管理各个对象,可以为多个对象建立索引。在下文中,将参见图2描述有关索引的更多细节。图2示意性示出了根据一个技术方案的存储系统110的索引的框图200。如图2所示,索引可以以树状结构表示,并且基于多个数据对象的关键字来管理多个数据对象。具体地,索引可以包括多
个层级,例如可以采用二叉树的形式。此时,二叉树的每个非叶节点表示索引节点,并且每个索引节点可以涉及数据对象的预定范围的关键字。
22.可以经由哈希函数来将存储系统110中的多个数据对象的关键字映射至预定范围。可以将全部数据对象映射至0到63的范围,则此时如图2所示,根节点所对应的范围为0至63。根节点210可以包括两个子节点220和222。此时,子节点的范围可以是父节点的范围的一部分,例如,子节点220对应于范围0至31,并且子节点222对应于范围32至63。类似地,子节点230、232、234和236可以对应于各自的范围。
23.子节点230可以包括叶节点240和242。在此,叶节点处可以以键-值(key-value)方式来存储对象的元数据,其中键表示对象的关键字,而值表示对象的元数据。在此元数据例如可以包括对象包括的各个区块的地址、对象的类型、对象的更新时间等。可以使用元数据来找到相应的数据对象。
24.将会理解,尽管在图2中仅示意性示出了二叉树形式的索引,根据本公开的示例性实现,索引还可以采用其他形式。例如,可以使用多叉树、b 树等方式来存储索引。尽管在图2中仅示意性示出了索引包括三个层级的非叶节点的情况,根据本公开的示例性实现,索引还可以包括更多或者更少的层级。
25.将会理解,尽管上文中以存储系统110的索引为示例描述了索引的概念。随着存储系统110中的数据对象数量的增加,还可以将存储系统划分为多个分区,并且可以针对每个分区中的数据对象设置如图2所示的索引。
26.目前已经提出了基于布隆滤波器来管理存储系统110中的数据对象。布隆滤波器可以包括一个或多个哈希函数以及预定长度的阵列。如图2所示,布隆滤波器260可以包括哈希函数250、252以及254。并且阵列可以包括多个“位”。哈希函数可以将数据对象的关键字映射至布隆滤波器260中的某个位,可以为该位设置标记(例如,设置为1)以表示存储系统包括该数据对象。可以将存储系统中的多个数据对象分别映射至布隆滤波器260中的相应的位。
27.如果希望判断某个目标数据对象是否存在于存储系统中,则可以基于哈希函数确定与该目标数据对象的关键字相对应的位,并且查看该位是否被标记。如果该位未被标记,则表示目标数据对象不在存储系统中。哈希函数可能面临哈希冲突,因而如果该位被标记,则表示目标数据对象有可能在存储系统中,但并不能保证目标数据对象一定在存储系统中。可以将上述现象称为布隆滤波的“假阳性率”(false positive rate)。为了降低假阳性率,可以设置多个哈希函数。如果分别与多个哈希函数相对应的多个位中的任一位未被标记,则表示目标数据对象不在存储系统中。
28.继续参见图2,可以分别利用哈希函数250、252和254来处理叶节点242处所示的数据对象的关键字。此时,布隆滤波器260中的位262、264和266分别被设置为1。当期望查询叶节点242所表示的数据对象是否存在于存储系统110中时,可以利用哈希函数250、252和254来处理关键字以便找到位262、264和266。如果三个位中的任一位被设置为0,则表示数据对象不在存储系统110中。如果三个位均被设置为1,则表示数据对象可能会存在于存储系统110中。
29.随着存储系统110中包括的数据对象数量的增加,需要将布隆滤波器260扩展至更长的长度,以便降低假阳性率。然而,在存储系统的运行期间,需要将布隆滤波器260加载至
存储系统110的存储器(也即,内存)中,这将会导致较大的存储器资源开销。因而,如何降低布隆滤波器260导致的存储器资源开销,成为一个研究热点。
30.为了解决上述缺陷,本公开的实现方式提供了一种用于管理存储系统的方法、设备和计算机程序产品。根据本公开的示例性实现方式,提出了根据存储系统中的多个数据对象的关键字的范围,将存储系统中的多个数据对象划分为分组。继而,可以针对每个分组设置阵列集合。在此,阵列集合可以包括具有较小长度的多个布隆滤波器。如果某个分组中的数据对象被频繁地访问,则可以将该分组的阵列集合中的较多数量的阵列加载至存储系统的存储器中。如果某个分组中的数据对象很少被访问,则可以将该分组的阵列集合中的较少数量的阵列加载至存储系统的存储器中。进一步,可以基于存储器中的一个或多个阵列来管理存储系统。
31.利用本公开的示例性实现方式,不必将全部阵列集合加载至存储系统的存储器中,而是在大多数情况下仅需要加载其中的一部分。以此方式,可以降低布隆滤波器造成的存储器资源需求,进而降低整个存储系统的工作负载。
32.在下文中,将参见图3描述根据本公开的示例性实现方式的概要。图3示意性示出了根据本公开的一个实现方式的用于管理存储系统的过程的框图300。如图3所示,可以按照多个数据对象的关键字的范围,将多个数据对象划分为分组。例如,分组310中的数据对象的关键字位于0至15的范围,分组312中的数据对象的关键字位于16至32的范围,分组314中的数据对象的关键字位于32至47的范围,以及分组316中的数据对象的关键字位于48至63的范围。
33.继而,可以针对每个分组设置阵列集合。例如,针对分组310可以设置阵列集合320,该阵列集合320可以包括阵列322、324、
……
以及326。又例如,针对分组316可以设置阵列集合330,该阵列集合330可以包括阵列332、334、
……
以及336。在此,可以按照分组中的数据对象被访问的热度,确定将要被加载到存储器中的阵列的数量。将会理解,尽管图3仅示意性示出了分组310和316的阵列集合320和330,可以以类似方式针对分组312和314设置阵列集合。进一步,可以基于存储器中的一个或多个阵列来管理存储系统。
34.在下文中,将参见图4描述根据本公开的示例性实现方式的更多细节。图4示意性示出了根据本公开的一个实现方式的用于管理存储系统的方法400的流程图。在框410处,根据存储系统110中的多个数据对象的关键字的范围,将多个数据对象划分至多个分组。根据本公开的示例性实现方式,可以基于多种方式来确定多个分组。例如,可以获取存储系统中的与多个数据对象相对应的索引,并且利用索引获得分组。
35.在此的索引可以包括如图2和图3所示的索引。将会理解,在索引的不同层级中,索引节点可以对应于不同的关键字范围。因而,可以基于索引的层级结构,将多个数据对象划分至多个分组。具体地,可以基于索引中的非叶节点,来确定多个分组。根据本公开的示例性实现方式,可以基于节点230、232、234、以及236来将多个数据对象划分为4个分组。根据本公开的另一示例性实现方式,可以基于节点220和222来将多个数据对象划分为2个分组。根据本公开的示例性实现方式,当索引具有其他层级结构时,还可以将多个数据对象划分不同数量的分组。
36.利用本公开的示例性实现方式,可以基于已有的索引中表示的多个数据对象的关键字的范围,来确定多个分组。此时,不会由于划分分组而产生额外的资源开销,而是可以
尽量重用存储系统中的已有数据。
37.在框420处,分别生成与多个分组中的分组相关联的阵列集合,阵列集合中的阵列包括多个元素。应当理解,在此的多个元素是根据分组中的至少一个数据对象的关键字以及至少一个哈希函数来设置的。根据本公开的示例性实现方式,阵列由布隆滤波器表示,并且此时阵列中的元素是布隆滤波器中的位。利用本公开的示例性实现方式,可以基于哈希函数来逐个处理每个数据对象的关键字,以便为每个数据对象标记相对应的位。以此方式,可以方便地建立阵列结构,以便用于管理多个数据对象。
38.针对每个分组设置了阵列集合,阵列集合中的每个阵列可以独立地操作。如果仅使用单一阵列,单一阵列可以表示存储系统中是否包括某个数据对象,只是单一阵列的假阳性率可能会较高。可以组合使用多个阵列,此时结果中的假阳性率将会降低。相对于利用较长长度的阵列来存储布隆滤波器并且将整个阵列加载至存储器的已有技术方案而言,利用本公开的示例性实现方式,可以分别为每个分组设置具有较小长度的多个阵列。以此方式,可以选择将多个阵列中的一部分加载至存储器中,以便降低存储系统110的存储器资源开销。
39.根据本公开的示例性实现方式,可以确定与存储系统110相关联的原始布隆滤波器的原始长度。在此的原始布隆滤波器是指采用已有技术方案建立一个布隆滤波器。可以基于原始长度来确定多个阵列集合中的全部阵列所占用存储空间的总和。进一步,可以基于原始长度和分组的数量,确定根据本公开的示例性实现方式的多个阵列的长度和数量。利用本公开的示例性实现方式,可以确保针对存储系统110设置的全部布隆滤波器的空间不高于原始布隆滤波器的原始空间。在存储系统110的运行期间,只需要加载部分阵列,即可获得与已有技术方案中加载整个原始布隆滤波器相似的效果。
40.具体地,假设如图2所示的布隆滤波器260的长度为18位,并且已经确定将多个数据对象划分为2个分组,则此时可以为每个分组分配18/2=9位的存储空间。在一个示例中,可以为每个分组设置3个阵列,此时每个阵列将包括9/3=3位的存储空间。又例如,假设如图2所示的布隆滤波器260的长度为32位,并且已经确定将多个数据对象划分为2个分组,则此时可以为每个分组分配32/2=16位的存储空间。在一个示例中,可以为每个分组设置4个阵列,此时每个阵列将包括16/4=4位的存储空间。
41.将会理解,上文的阵列数量和长度仅仅是示意性的,根据本公开的示例性实现方式,两个分组的阵列集合可以包括相同或者不同数量的阵列,并且两个阵列集合所包括的阵列的长度可以是相同的也可以是不同的。根据本公开的示例性实现方式,可以自行设置哈希函数的数量。例如,可以针对每个阵列使用一个或者多个哈希函数。在下文中,将参见图5描述如何在阵列中设置与数据对象相对应的元素。
42.图5示意性示出了根据本公开的一个实现方式的用于确定数据对象的布隆滤波器数值的过程的框图500,该图表示针对分组310中的一个数据对象510来设置阵列322中的元素。如图5所示,可以获取数据对象510,并且确定该数据对象510的关键字520。继而,可以基于一个或多个哈希函数来设置阵列中的元素。假设使用两个哈希函数530和532,可以基于哈希函数530来确定与关键字520相对应的元素为阵列322中的第1个元素。继而,可以将阵列322中的第1个元素设置为1。可以基于哈希函数532来确定与关键字520相对应的元素为阵列322中的第3个元素。继而,可以将阵列322中的第3个元素设置为1。此时,阵列322中的3
个元素被设置为“101”。
43.根据本公开的示例性实现方式,可以基于类似方式来在阵列322中设置与其他数据对象相对应的标记,并且可以基于类似方式来在其他阵列中设置与分组310中的各个数据对象相对应的标记。
44.上文已经参见图5描述了如何生成与每个分组相关联的阵列集合,在下文中,将返回图4描述有关加载阵列集合的更多细节。在图4的框430处,将与多个分组相关联的多个阵列集合中的至少一部分阵列加载至存储系统110的存储器中。利用本公开的示例性实现方式,可以降低加载到存储器中的阵列所占用的存储空间,进而降低存储系统110的存储器的使用负载。
45.根据本公开的示例性实现方式,针对多个分组中的给定分组,可以确定给定分组中的至少一个数据对象被访问的热度。例如,在此的热度可以利用给定分组中的数据对象被访问的频率来表示。可以基于热度将与给定分组相关联的阵列集合中的至少一部分阵列加载至存储器中。在下文中,将参见图6描述有关加载阵列的更多细节。
46.图6示意性示出了根据本公开的一个实现方式的用于将多个阵列集合中的至少一部分阵列加载至存储器的过程的框图600。阵列集合320和330分别针对分组310和316而创建。假设分组310中的数据对象被频繁地访问,则可以将阵列322、324、.......以及326全部(或者加载大部分)阵列加载至存储器中。假设分组316中的数据对象很少被访问,则可以仅将阵列332加载至存储器中。
47.利用本公开的示例性实现方式,可以将存储系统110中的被频繁访问的分组的阵列集合中的较多阵列加载至存储器中。以此方式,可以快速访问已经被加载到存储器中的多个阵列以便确定与某个数据对象相关的信息,从而提高响应速度、降低假阳性率并且提高判断结果的准确性。
48.在下文中,将比较已有技术方案和根据本公开的示例性实现方式的假阳性率。首先描述基于已有技术方案的原始布隆滤波器的假阳性率。假设原始布隆滤波器包括b位,每个阵列的假阳性率可以表示为(1-e-k/b
)k。其中,k表示哈希函数的数量,b布隆滤波器的长度。当k=ln2
·
b时,假阳性率将会被最小化。该值可以表示为0.6185b。根据本公开的示例性实现方式,如果使用x个较小的布隆滤波器,则每个较小布隆滤波器将会包括b/x位。由于每个哈希函数相互独立,针对全部x个较小的布隆滤波器的假阳性率可以表示为(0.6185
b/x
)
x
,该值等于长度为b的原始布隆滤波器的假阳性率。由此可见,利用本公开的示例性实现方式,产生的假阳性率与已有技术方案相同。然而,由于并不需要将全部布隆滤波器加载至存储器中,而是仅需要加载一部分,可以降低存储系统110中的存储器的资源开销,进而降低存储系统110的工作负载。
49.根据本公开的示例性实现方式,可以基于队列来管理多个分组的阵列集合。在下文中,将参见图7描述有关队列的更多细节。图7示意性示出了根据本公开的一个实现方式的用于管理被加载到存储器中的多个阵列的队列的框图700。上文已经描述了可以基于分组中的数据对象被访问的热度来将阵列集合中的一个或多个阵列加载至存储器中。对于分组而言,可以将与该分组相关联的已经被加载到存储器中的阵列的数量,作为该分组的已加载阵列数量。
50.对于分组310而言,假设阵列集合320中包括3个阵列,并且已经将全部3个阵列加
载至存储器中,则此时分组310的已加载队列数量为3。对于分组316而言,假设阵列集合330中包括3个阵列,并且仅将1个阵列加载至存储器中,则此时分组316的已加载队列数量为1。继而,可以基于多个分组的已加载阵列数量,将多个分组划分至多个队列。在此,每个队列中的各个分组的已加载阵列数量是相同的。
51.参见图7,假设每个阵列集合包括m个阵列,可以设置m 1个队列。例如,队列710可以包括一个或多个分组的已加载阵列,并且队列710中的各个节点712、
……
以及714中括号内的数字表示已经被加载的阵列的数量。在此,节点712所对应的分组的全部m个阵列已经被加载至存储器中,
……
以及节点714所对应的分组的全部m个阵列已经被加载至存储器中。类似地,队列720可以包括一个或多个分组的已加载阵列。在此,节点722和724所对应的分组的2个阵列已经被加载至存储器中。队列730中的节点732和734所对应的分组的1个阵列已经被加载至存储器中。队列740中的节点742和744所对应的分组的0个阵列已经被加载至存储器中。
52.利用本公开的示例性实现方式,可以按照分组的已加载队列数量的数量,利用不同的队列管理被加载的阵列。以此方式,队列之间可以相互独立地运行,进而可以以更为方便有效的方式来管理被加载至存储器中的阵列。
53.根据本公开的示例性实现方式,在给定队列中,按照给定队列中的至少一个分组中的数据对象被访问的时间顺序,将至少一个分组进行排序。例如,可以基于最近最少使用原则来将队列中的多个分组进行排序。利用本公开的示例性实现方式,可以按照各个分组中的数据对象被访问的时间顺序,确定各个分组的热度。当分组的热度与分组的已加载阵列数量不相匹配时,可以调整分组的已加载队列数量,以便匹配于分组的热度。
54.根据本公开的示例性实现方式,如果给定分组中的数据对象长时间未被访问,则可以从存储器中移除该给定分组的一个或多个阵列。具体地,可以设置阈值到期时间。如果给定分组中的数据对象未被访问的时间间隔超过阈值到期时间,从存储器中移除与给定分组相关联的阵列。
55.根据本公开的示例性实现方式,可以为每个分组设置分组访问次数groupcount,每当分组中的数据对象被访问时,则该分组访问次数加一。进一步,可以为整个存储系统110设置系统访问次数syscount,每当存储系统110中的数据对象被访问时,该系统访问次数加一。可以基于分组访问次数与系统访问次数的比较,来确定分组的访问热度。根据本公开的示例性实现方式,假设将多个数据对象划分为n个分组,可以比较数值groupcount与syscount*n。
56.如果groupcount小于syscount*n,则表示分组的热度低于整个存储系统的热度。此时,应当从存储器中移除该分组的已经被加载的一个或多个阵列。利用本公开的示例性实现方式,如果给定分组中的数据长时间未被访问,则该给定分组的已加载队列数量已经不再适合于当前的热度。以此方式,通过移除一个或多个阵列,可以降低该给定队列的已加载队列数量,进而节约存储系统中的存储器中的存储空间。
57.如果groupcount大于syscount*n,则表示分组的热度高于整个存储系统的热度。此时,应当向存储器中加载该分组的未被加载的一个或多个阵列。利用本公开的示例性实现方式,如果给定分组中的数据频繁地被访问,则该给定分组的已加载队列数量已经不再适合于当前的热度。以此方式,通过加载一个或多个阵列,可以提高该给定队列的已加载队
列数量,进而降低判断结果的假阳性率。如果groupcount等于syscount*n,则可以保持队列不变。
58.根据本公开的示例性实现方式,如果给定分组的热度升高,则可以将更多的阵列加载至存储器中。如果给定分组的热度降低,则可以将存储器中的已加载阵列移除。可以预定义阈值热度,并且阈值热度可以对应于应当被加载的阵列数量的具体数值。假设给定分组的热度升高至某个阈值热度,并且该阈值热度指定存储器中应当包括2个阵列。如果当前仅有1个阵列被加载至存储器,则应当向存储器中加载另一阵列。假设给定分组的热度降低至某个阈值热度,并且该阈值热度指定存储器中应当包括1个阵列。如果当前有2个阵列被加载至存储器,则应当从存储器中移除一个阵列。
59.利用本公开的示例性实现方式,存储器中的阵列越多,则哈希冲突的可能性越低,因而可以降低仅基于较少布隆滤波器的判断结果中的假阳性率。
60.上文已经参见图7描述了基于队列来管理具有不同已加载队列数量的分组。此时,如果给定分组的已加载队列数量被改变,则应当将给定分组移动至与被改变数量相对应的另一队列。继续参见图7,假设队列720中的节点724关联于某个分组,并且该分组的已加载队列数量从2降低至1,则应当将该节点724从队列720移动至队列730中。又例如,队列730中的节点734关联于某个分组,并且该分组的已加载队列数量从1升高至2,则应当将该节点734从队列730移动至队列720中。
61.利用本公开的示例性实现方式,可以确保每个队列中的各个节点的已加载队列数量是相同的。以此方式,可以便于管理存储系统中的具有相似热度的分组。
62.根据本公开的示例性实现方式,可以基于多种方式管理如图7所示的多个队列。假设存储系统110中包括n个分组,可以基于每个分组中的数据对象的访问频率以及分组相关的假阳性率来确定整个存储系统110的假阳性率指标。例如,可以基于如下公式1来确定假阳性率指标:
[0063][0064]
其中n表示分组的数量,fi表示针对第i个分组的访问频率,fpi表示针对第i个分组的假阳性率。在加载和移除阵列时,可以基于上述公式1来保证假阳性率指标不高于基于已有技术方案的假阳性率。利用本公开的示例性实现方式,可以确保将整个存储系统110的假阳性率维持在可接受状态。
[0065]
上文已经描述了如何基于队列方式管理多个分组的阵列集合。在下文中,将返回图4描述如何基于存储器中的阵列来管理存储系统110。在图4的框440处,基于存储器中的至少一部分阵列,管理存储系统110。将会理解,根据本公开的示例性实现方式,只需要向存储器中加载一部分阵列,即可基于阵列所表示的布隆滤波器来确定存储系统110中是否包括某个目标数据对象。管理存储系统110可以包括两部分:处理存储请求的过程(即,向存储系统中存储新的目标数据对象);以及处理查询请求的过程(即,查询存储系统是否包括某个目标数据对象)。
[0066]
首先参见图8描述处理存储请求的过程,具体地,该图8示意性示出了根据本公开一个实现方式的用于向存储系统110中存储目标数据对象的方法800的流程图。在框810处,接收向存储系统110中存储目标数据对象的存储请求。在框820处,基于目标数据对象的关键字的范围,确定多个分组中的与目标数据对象相对应的目标分组。假设关键字为“10”,则
可以将该目标数据对象添加至如图3所示的索引节点230,并且此时目标分组为分组310。
[0067]
在框830处,确定至少一个哈希函数确定与目标数据对象相对应的多个目标元素。例如,可以按照与图5所示类似的方式,分别利用哈希函数530和532,确定相对应的目标元素。在框840处,基于多个目标元素,更新目标分组的阵列集合。具体地,可以利用在框830处确定的多个元素,来更新阵列集合320中的各个阵列。
[0068]
利用本公开的示例性实现方式,在向存储系统110中存储数据对象时,可以更新阵列集合中的与被存储数据对象相对应的位的数值。该操作的开销与已有技术方案是类似的,并不会增加存储系统110的负担。此时,更新后的阵列集合可以反应存储系统110的最新状态,并且可以服务于未来的查询请求,以便降低未来查询请求的存储器资源开销。
[0069]
参见图9描述处理查询请求的过程,具体地,图9示意性示出了根据本公开一个实现方式的用于在存储系统中查询目标数据对象的方法900的流程图。在框910处,接收从存储系统110中查询目标数据对象的查询请求。在框920处,基于目标数据对象的关键字的范围,在多个分组中确定与目标数据对象相对应的目标分组。假设接收到查询关键字为“5”的目标数据对象的请求,可以确定目标分组为如图3所示的分组310。
[0070]
在框930处,基于至少一个哈希函数确定与目标数据对象相对应的多个目标元素。在框940处,确定多个目标元素与目标分组的被加载至存储器中的至少一部分阵列是否相匹配。如果判断结果为是,则方法900前进至框950处,以便确定存储系统包括目标数据对象。由于关键字为“5”的数据对象位于存储系统中,并且在将该数据对象存储至存储系统时,已经基于哈希函数530和532在阵列322中设置了相应的位(例如,第1位和第2位被设置为1)。此时,在框930处确定的多个目标元素与被加载至存储器中的阵列322相匹配,因而可以确定该数据对象被存储在存储系统110中。
[0071]
如果在框940处的判断结果为否,则方法900前进至框952处,以便确定存储系统不包括目标数据对象。例如,如果接收到查询关键字为“11”的目标数据对象的查询请求,由于存储系统110并不包括该目标数据对象,此时基于关键字11确定的多个目标元素与被加载的至少一个阵列不相匹配,因而可以确定存储系统110不包括关键字为“11”的目标数据对象。
[0072]
利用本公开的示例性实现方式,可以基于目标元素与已经被加载的至少一个阵列的简单比较,来确定存储系统110中是否包括目标数据对象。以此方式,可以提高存储系统110的整体性能。
[0073]
在上文中已经参见图2至图8详细描述了根据本公开的方法的示例,在下文中将描述相应的装置的实现。根据本公开的示例性实现,提供了一种用于管理存储系统的装置。该装置包括:划分模块,配置用于根据存储系统中的多个数据对象的关键字的范围,将多个数据对象划分至多个分组;生成模块,配置用于分别生成与多个分组中的分组相关联的阵列集合,阵列集合中的阵列包括多个元素,多个元素是根据分组中的至少一个数据对象的关键字以及至少一个哈希函数来设置的;加载模块,配置用于将分别与多个分组相关联的多个阵列集合中的至少一部分阵列加载至存储系统的存储器中;以及管理模块,配置用于基于存储器中的至少一部分阵列,管理存储系统。根据本公开的示例性实现方式,该装置进一步包括用与执行上文描述的方法其他步骤的模块。
[0074]
图10示意性示出了根据本公开的示例性实现的用于管理存储系统的设备1000的
框图。如图所示,设备1000包括中央处理单元(cpu)1001,其可以根据存储在只读存储器(rom)1002中的计算机程序指令或者从存储单元1008加载到随机访问存储器(ram)1003中的计算机程序指令,来执行各种适当的动作和处理。在ram 1003中,还可存储设备1000操作所需的各种程序和数据。cpu 1001、rom1002以及ram 1003通过总线1004彼此相连。输入/输出(i/o)接口1005也连接至总线1004。
[0075]
设备1000中的多个部件连接至i/o接口1005,包括:输入单元1006,例如键盘、鼠标等;输出单元1007,例如各种类型的显示器、扬声器等;存储单元1008,例如磁盘、光盘等;以及通信单元1009,例如网卡、调制解调器、无线通信收发机等。通信单元1009允许设备1000通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
[0076]
上文所描述的各个过程和处理,例如方法400、800和900,可由处理单元1001执行。例如,在一些实现中,方法400、800和900可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元1008。在一些实现中,计算机程序的部分或者全部可以经由rom 1002和/或通信单元1009而被载入和/或安装到设备1000上。当计算机程序被加载到ram 1003并由cpu 1001执行时,可以执行上文描述的方法400、800和900的一个或多个步骤。备选地,在其他实现中,cpu 1001也可以以其他任何适当的方式被配置以实现上述过程/方法。
[0077]
根据本公开的示例性实现,提供了一种电子设备,包括:至少一个处理器;易失性存储器;以及与至少一个处理器耦合的存储器,存储器具有存储于其中的指令,指令在被至少一个处理器执行时使得设备执行用于管理存储系统的动作。该动作包括:根据存储系统中的多个数据对象的关键字的范围,将多个数据对象划分至多个分组;分别生成与多个分组中的分组相关联的阵列集合,阵列集合中的阵列包括多个元素,多个元素是根据分组中的至少一个数据对象的关键字以及至少一个哈希函数来设置的;将分别与多个分组相关联的多个阵列集合中的至少一部分阵列加载至存储系统的存储器中;以及基于存储器中的至少一部分阵列,管理存储系统。
[0078]
根据本公开的示例性实现方式,将多个数据对象划分至多个分组包括:获取存储系统中的与多个数据对象相对应的索引;以及基于索引的层级结构,将多个数据对象划分至多个分组。
[0079]
根据本公开的示例性实现方式,将分别与多个分组相关联的多个阵列集合中的至少一部分阵列加载至存储系统的存储器中包括:针对多个分组中的给定分组,确定给定分组中的至少一个数据对象被访问的热度;以及基于热度将与给定分组相关联的阵列集合中的至少一部分阵列加载至存储器中。
[0080]
根据本公开的示例性实现方式,该动作进一步包括:基于与多个分组相关联的已经被加载到存储器中的阵列的数量,分别确定多个分组的已加载阵列数量;以及基于多个分组的已加载阵列数量,将多个分组映射至多个队列,多个队列中的给定队列中的各个分组的已加载阵列数量是相同的。
[0081]
根据本公开的示例性实现方式,该动作进一步包括:在给定队列中,按照给定队列中的至少一个分组中的数据对象被访问的时间顺序,将至少一个分组进行排序。
[0082]
根据本公开的示例性实现方式,该动作进一步包括以下中的至少任一项:根据确定给定分组中的数据对象未被访问的时间间隔超过阈值到期时间,从存储器中移除与给定
分组相关联的阵列;以及根据确定给定分组中的至少一个数据对象被访问的热度高于阈值热度,将与给定分组相关联的未被加载的阵列加载至存储器中。
[0083]
根据本公开的示例性实现方式,该动作进一步包括:根据确定给定分组的已加载队列数量被改变,将给定分组移动至与被改变数量相对应的另一队列。
[0084]
根据本公开的示例性实现方式,基于存储器中的至少一部分阵列,管理存储系统包括:根据确定接收到从存储系统中查询目标数据对象的查询请求,基于目标数据对象的关键字的范围,在多个分组中确定与目标数据对象相对应的目标分组;基于至少一个哈希函数确定与目标数据对象相对应的多个目标元素;响应于确定多个目标元素与目标分组的被加载至存储器中的至少一部分阵列相匹配,确定存储系统包括目标数据对象;以及响应于确定多个目标元素与目标分组的被加载至存储器中的至少一部分阵列不相匹配,确定存储系统不包括目标数据对象。
[0085]
根据本公开的示例性实现方式,基于存储器中的至少一部分阵列,管理存储系统包括:根据确定接收到向存储系统中存储目标数据对象的存储请求,基于目标数据对象的关键字的范围,确定多个分组中的与目标数据对象相对应的目标分组;基于至少一个哈希函数确定与目标数据对象相对应的多个目标元素;以及基于多个目标元素,更新目标分组的阵列集合。
[0086]
根据本公开的示例性实现方式,阵列是由布隆滤波器表示的,以及动作进一步包括:确定与存储系统相关联的原始布隆滤波器的原始长度;以及基于原始长度和分组的数量,确定多个阵列的长度和数量。
[0087]
根据本公开的示例性实现,提供了一种计算机程序产品,计算机程序产品被有形地存储在非瞬态计算机可读介质上并且包括机器可执行指令,机器可执行指令用于执行根据本公开的方法。
[0088]
根据本公开的示例性实现,提供了一种计算机可读介质。计算机可读介质上存储有机器可执行指令,当机器可执行指令在被至少一个处理器执行时,使得至少一个处理器实现根据本公开方法。
[0089]
本公开可以是方法、设备、系统和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于执行本公开的各个方面的计算机可读程序指令。
[0090]
计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式压缩盘只读存储器(cd-rom)、数字多功能盘(dvd)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
[0091]
这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外
部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
[0092]
用于执行本公开操作的计算机程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,编程语言包括面向对象的编程语言—诸如smalltalk、c 等,以及常规的过程式编程语言—诸如“c”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实现中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla),该电子电路可以执行计算机可读程序指令,从而实现本公开的各个方面。
[0093]
这里参照根据本公开实现的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本公开的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
[0094]
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理单元,从而生产出一种机器,使得这些指令在通过计算机或其他可编程数据处理装置的处理单元执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
[0095]
也可以把计算机可读程序指令加载到计算机、其他可编程数据处理装置、或其他设备上,使得在计算机、其他可编程数据处理装置或其他设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其他可编程数据处理装置、或其他设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
[0096]
附图中的流程图和框图显示了根据本公开的多个实现的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0097]
以上已经描述了本公开的各实现,上述说明是示例性的,并非穷尽性的,并且也不限于所公开的各实现。在不偏离所说明的各实现的范围和精神的情况下,对于本技术领域
的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实现的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其他普通技术人员能理解本文公开的各实现。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

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

相关文献