掌桥专利:专业的专利平台
掌桥专利
首页

相似性去重

文献发布时间:2024-01-17 01:17:49


相似性去重

发明背景

技术领域

本申请总体上涉及数据缩减,特别是数据存储系统上的相似性去重。

背景技术

系统可以包括由一个或多个主机处理器使用的不同资源。系统中的资源和主机处理器可以通过诸如网络连接的一个或多个通信连接互连。这些资源可以包括数据存储装置,诸如包括在数据存储系统中的那些数据存储装置。数据存储系统可以耦合到一个或多个主机处理器并向每个主机处理器提供存储服务。来自一个或多个不同供应商的多个数据存储系统可以被连接并且可以为一个或多个主机处理器提供公共数据存储。

主机可以使用数据存储系统来执行各种数据处理任务和操作。例如,主机可以发出在数据存储系统处接收到的I/O操作,诸如数据读取和写入操作。主机系统可以通过向包含多个主机接口单元、磁盘驱动器(或更一般地存储装置)和磁盘接口单元的数据存储系统发出I/O操作来存储和检索数据。主机系统通过随其提供的多个通道访问存储装置。主机系统通过通道向数据存储系统的存储装置提供数据并访问控制信息。存储在存储装置上的数据也可以通过通道从数据存储系统提供给主机系统。主机系统不直接对数据存储系统的存储装置寻址,而是访问对主机系统而言表现为多个文件、对象、逻辑单元、逻辑装置或逻辑卷的内容。因此,由主机发出的I/O操作可以针对特定的存储实体,诸如文件或逻辑装置。逻辑装置可能或可能不对应于实际的物理驱动器。允许多个主机系统访问单个数据存储系统允许主机系统共享存储在其中的数据。

发明内容

在本发明的一些实施方案中,提供了一种用于数据存储系统的方法,所述数据存储系统具有多个物理存储装置,数据单元存储在所述多个物理存储装置上。所述方法包括:将第一哈希函数应用于第一数据单元以产生第一数据单元的第一哈希值;确定第一数据单元的第一哈希值是否具有与一个或多个其他数据单元中的任一者相同的哈希值;压缩数据单元以产生压缩的数据单元,所述压缩包括:如果第一数据单元具有与一个或多个其他数据单元中的第二数据单元相同的哈希值,则使用基于字典的压缩来压缩第一数据单元,其中第二数据单元被应用为字典;以及将压缩的数据单元存储在多个物理存储装置中的一者或多者上。第一哈希函数可以仅应用于第一数据单元的一部分以产生第一哈希值。所述方法还可以包括:将第二哈希函数应用于第一数据单元的多个组块以针对多个组块中的每一者产生第三哈希值;从第三哈希值中确定多个最大值或最小值;由产生最大值或最小值的组块的至少一个子集形成第一数据单元的部分。所述方法还可以包括:对于组块子集中的每个组块,将来自数据单元内的组块之前和/或之后的其他连续数据片附加到组块以产生扩展组块,其中数据的部分可以由扩展组块形成。所述方法还可以包括:记录产生多个最大值和最小值中的一者的每个组块在第一数据单元内的相对位置;以及对于组块的所述至少一个子集,从组块的记录的相对位置获得组块。所述方法还可以包括根据组块在第一数据单元内的相对位置对组块的所述至少一个子集进行排序,其中形成所述部分包括根据排序连接组块。如果第一数据单元的第一哈希值没有与一个或多个其他数据单元中的任何数据单元相同的哈希值,则可以使用自压缩来压缩第一数据单元以产生压缩的数据单元,并且所述方法还可以包括将第一哈希值存储在哈希索引中。

在本发明的其他实施方案中,一种数据存储系统包括:多个物理存储装置,数据单元存储在所述多个物理存储装置上;以及可执行逻辑,所述可执行逻辑实施一种方法。所述方法包括:将第一哈希函数应用于第一数据单元以产生第一数据单元的第一哈希值;确定第一数据单元的第一哈希值是否具有与一个或多个其他数据单元中的任一者相同的哈希值;压缩数据单元以产生压缩的数据单元,所述压缩包括:如果第一数据单元具有与一个或多个其他数据单元中的第二数据单元相同的哈希值,则使用基于字典的压缩来压缩第一数据单元,其中第二数据单元被应用为字典;以及将压缩的数据单元存储在多个物理存储装置中的一者或多者上。第一哈希函数可以仅应用于第一数据单元的一部分以产生第一哈希值。所述方法还可以包括:将第二哈希函数应用于第一数据单元的多个组块以针对多个组块中的每一者产生第三哈希值;从第三哈希值中确定多个最大值或最小值;以及由产生最大值或最小值的组块的至少一个子集形成第一数据单元的部分。所述方法还可以包括:对于组块的所述子集中的每个组块,将来自数据单元内的组块之前和/或之后的其他连续数据片附加到组块以产生扩展组块,其中数据的部分可以由扩展组块形成。所述方法还可以包括:记录产生多个最大值和最小值中的一者的每个组块在第一数据单元内的相对位置;以及对于组块的所述至少一个子集,从组块的记录的相对位置获得组块。所述方法还可以包括根据组块在第一数据单元内的相对位置对组块的所述至少一个子集进行排序,其中形成所述部分可以包括根据排序连接组块。如果第一数据单元的第一哈希值没有与一个或多个其他数据单元中的任何数据单元相同的哈希值,则使用自压缩来压缩第一数据单元以产生压缩的数据单元,并且所述方法还可以包括将第一哈希值存储在哈希索引中。

在本发明的其他实施方案中,提供了用于数据存储系统的计算机可读介质,所述数据存储系统具有多个物理存储装置,数据单元存储在所述多个物理存储装置上,所述计算机可读介质上存储有软件。所述软件包括:将第一哈希函数应用于第一数据单元以产生第一数据单元的第一哈希值的可执行代码;确定第一数据单元的第一哈希值是否具有与一个或多个其他数据单元中的任一者相同的哈希值的可执行代码;压缩数据单元以产生压缩的数据单元的可执行代码,所述压缩包括:如果第一数据单元具有与一个或多个其他数据单元中的第二数据单元相同的哈希值,则使用基于字典的压缩来压缩第一数据单元,其中第二数据单元被应用为字典;以及将压缩的数据单元存储在多个物理存储装置中的一者或多者上的可执行代码。第一哈希函数可以仅应用于第一数据单元的一部分以产生第一哈希值。计算机可读介质还可以包括:将第二哈希函数应用于第一数据单元的多个组块以针对多个组块中的每一者产生第三哈希值的可执行代码;从第三哈希值中确定多个最大值或最小值的可执行代码;以及由产生最大值或最小值的组块的至少一个子集形成第一数据单元的部分的可执行代码。所述计算机可读介质还可以包括对于组块子集中的每个组块将来自数据单元内的组块之前和/或之后的其他连续的数据片附加到组块以产生扩展组块的可执行代码,其中所述数据的部分可以由扩展组块形成。所述计算机可读介质还可以包括:记录产生多个最大值和最小值中的一者的每个组块在第一数据单元内的相对位置的可执行代码;以及对于组块的所述至少一个子集从组块的记录的相对位置获得组块的可执行代码。如果第一数据单元的第一哈希值没有与一个或多个其他数据单元中的任何数据单元相同的哈希值,则使用自压缩来压缩第一数据单元以产生压缩的数据单元,并且计算机可读介质还可以包括将第一哈希值存储在哈希索引中的可执行代码。

附图说明

根据以下结合附图对示例性实施方案的详细描述,本发明的特征和优点将变得更加明显,在附图中:

图1是可以包括在根据本文描述的技术的系统中的组件的示例;

图2是示出根据本文技术的实施方案中与处理数据有关的I/O路径或数据路径的示例;

图3是示出根据本发明的实施方案的用于压缩数据单元的系统的示例的数据流图示。

图4是示出根据本发明的实施方案的压缩数据单元的方法的示例的流程图。

图5是示出根据本发明的实施方案的确定要哈希化的数据单元的代表性部分的方法的示例的流程图。

图6是示出根据本发明的实施方案的将哈希函数应用于数据单元的组块以确定数据单元的最大/最小哈希值的方法的示例的流程图。

图7是示出数据单元的示例的框图,所述数据单元具有应用于数据单元的组块以确定数据单元的最大/最小哈希值的哈希函数;以及

图8是示出根据本发明的实施方案的从要哈希化的数据单元的组块创建数据单元的代表性部分的方法的示例的流程图。

具体实施方式

有效的数据缩减是目前数据存储系统最重要的能力中的一者,并且可以提高存储系统的容量。数据缩减可以包括许多技术,其中去重和压缩是最为人所熟知的两种技术。压缩实现重复符号的缩减,而去重本质上是删除相同的重复页面。

相似性缩减是一种结合了压缩和去重的要素的新兴数据缩减技术。相似性缩减包括标识两个或更多个相似数据单元(例如,页面、文件、数据存储块等)。一个或多个数据单元包括用作字典的基本数据单元,以对两个或更多个相似数据单元中的其他数据单元执行基于字典的压缩,这些数据单元可以被称为候选页面。本上下文中的“字典”是数据单元,其他数据单元与所述数据单元进行比较以执行压缩。即,不是基于数据单元本身的内容来压缩数据单元(例如,数据存储的页面、文件或块)——这在本文中可以被称为“自压缩”,而是数据单元可以与指定的数据单元—字典进行比较。使用字典进行压缩已被证明实现了压缩率以及压缩和解压缩时间两者的显著改善。确定数据单元之间的相似性并在相似数据单元之间执行基于字典的压缩在本文中可以统称为“相似性去重”或执行“相似性重复数据删除”。可以使用各种压缩算法(包括例如gzip或zstandard)来执行基于字典的压缩。

实施相似性去重的主要方面是确定数据单元是否相似,这可以通过实施涉及一个或多个哈希函数的使用的哈希化方案来完成,所述哈希化方案包括最终将哈希函数应用于每个数据单元以产生哈希值,所述哈希值与先前针对数据集的现有数据单元确定的哈希值进行比较。确定要应用来确定数据单元之间的相似性的适当哈希化方案是难题,其取决于许多因素,尤其包括:可用和所需的计算资源、可用和所需的存储器资源和/或可用和所需的网络资源;被压缩的数据集的数据单元的大小和数量;要生成和比较的哈希值的大小、最终所得哈希值的期望特性(即,属性),包括例如错误肯定、正确肯定、错误否定和/或正确否定的范围;期望的压缩速度;以及期望的(例如,平均)数据缩减率。哈希化方案可以是局部敏感哈希化(LSH)方案,其应用于数据单元应当为相似数据单元产生相似的或甚至相同的哈希值。

在一些实施方案中,可以选择为相似数据单元产生相似(但不一定相同)哈希值的LSH方案,其中这种LSH方案在本文中可以被称为“相似性方案”。当使用相似性方案时,可以采用聚类技术来创建从数据单元生成的相似哈希值的集群(例如,其中相似性是基于欧几里得/曼哈顿距离,例如汉明距离);并且对于每个集群,可以选择数据单元作为集群的字典以用于集群内的任何数据单元的基于字典的压缩。

在其他实施方案中,为了避免实施聚类所需的附加资源,可以选择为相似数据单元产生相同哈希值的LSH方案,即,相似数据单元的哈希值之间的精确匹配,其中这种LSH方案在本文可以被称为“精确方案”。然而,此类精确方案可能需要相对大量的计算资源以便实现期望的准确性,即,对于具有一定相似度的数据单元实现精确匹配。

可能需要一种采用精确方案的数据压缩技术,所述精确方案除了避免需要采用聚类之外,相对于已知解决方案在计算上也是高效的,同时还提供期望的准确性。

本文描述了用于压缩数据单元的技术和机制,其中对于每个候选数据单元,使用相似数据单元作为基本单元来执行基于字典的压缩。数据单元之间的相似性可以通过将LSH方案(例如,精确方案)应用于每个候选数据单元以产生哈希值并通过确定系统上的现有数据单元的哈希值的哈希索引中是否存在匹配值来确定。如果存在匹配哈希值,则可以使用与匹配哈希值相对应的数据单元(即,基本数据单元)来压缩候选数据单元。

在一些实施方案中,仅数据单元的一部分被哈希化以产生哈希值,并且可以确定数据单元的哪一部分将被哈希化。如本文所使用,如果数据单元或其部分应用了哈希函数,则它被“哈希化”。这种部分在本文中可以被称为数据单元的“代表性部分”。在一些实施方案中,代表性部分可以明显小于数据单元,可能比数据单元小几个数量级或量级。通过仅将数据单元的一部分哈希化,可以节省计算资源。LSH方案应当被配置为使得确定的代表性部分可能产生与从相似数据单元生成的哈希值准确哈希匹配的结果-例如,低百分比的错误肯定和高百分比的正确肯定。

要哈希化的数据单元的代表性部分可以由数据单元的数据的多个组块组成,其中每个组块是连续的、不间断的数据区段(例如,来自逻辑块地址(LBA)范围的数据)。然而,组块本身不一定彼此连续,尽管这是可能的。在一些实施方案中,由于从本文的讨论中应当清楚,集合中的任何两个组块彼此连续的可能性很小。可以使用最小独立排列LSH方案(即“MinHash”)的变型来选择组块,例如,如自本申请日期起在https://en.wikipedia.org/wiki/MinHash处所述,其全部内容通过引用并入本文。

哈希函数(例如,简单质数乘法哈希函数)可以应用于数据单元的组块,并且可以确定一组最小或最大所得哈希值(“最大/最小哈希值”),如本文其他地方更详细地描述。对于每个最大/最小哈希值,可以记录产生最大/最小哈希值的对应组块在数据单元内的位置,并且可以从这些对应组块创建数据单元的代表性部分。在一些实施方案中,对于每个对应组块,可以将与对应组块连续(例如,之前和/或之后)的附加数据片(即,组块)连接到对应组块以产生扩展组块,如本文其他地方更详细地描述。扩展组块可以连接在一起以形成数据单元的代表性部分。

哈希函数(例如,xxHash或各种其他哈希函数中的任一者)可以应用于代表性部分以产生数据单元的哈希值。可以例如通过访问数据集(例如,逻辑卷或存储组,仅举几例)的哈希值索引来确定哈希值是否与数据集的任何现有哈希值匹配。如果确定没有匹配哈希值,则可以使用自压缩来压缩数据单元,并且将从数据部分的代表部分生成的哈希值添加到哈希值索引中。

如果确定匹配哈希值,则可以使用与匹配哈希值相对应的数据单元(基本数据单元)作为字典来对数据单元(候选数据单元)执行字典压缩。即,具有完全相同的代表性部分(即,构成代表性部分的组块(例如,扩展组块)的位置处的所有相同位值)的两个数据单元将生成相同的并且被认为至少相似的哈希值。如果作为基于字典的压缩的一部分比较两个数据单元的数据表明这两个数据单元是相同的,则可以存储对基本数据单元(例如,ID和/或位置)的引用,而不是压缩候选数据单元并存储候选数据单元的压缩版本。如果这两个数据单元不相同,则可以存储由基于字典的压缩产生的压缩的候选数据单元。可以存储将压缩的候选数据单元与基本数据单元相关联的信息,使得基本数据单元可以用于根据需要(例如,响应于读取请求)对压缩的候选数据单元进行解压缩。例如,对基本数据单元的引用(例如,ID和/或位置)可以与压缩的候选数据单元的引用(例如,ID和/或位置)相关联和/或与压缩的候选数据单元本身一起存储。

现在将关于附图更详细地描述本发明的说明性实施方案。

参考图1,示出了可以结合执行本文描述的技术使用的系统10的实施方案的示例。系统10包括通过通信介质18连接到主机系统(有时也被称为主机)14a至14n的数据存储系统12。在系统10的该实施方案中,n个主机14a至14n可以例如在执行输入/输出(I/O)操作或数据请求时访问数据存储系统12。通信介质18可以是本领域技术人员已知的多种网络或其他类型的通信连接中的任一者或多者。通信介质18可以是网络连接、总线和/或其他类型的数据链路,诸如硬线或本领域已知的其他连接。例如,通信介质18可以是互联网、内联网、网络(包括存储区域网络(SAN))或其他无线或其他硬线连接,主机系统14a至14n可以通过所述所述通信介质访问数据存储系统12并与所述数据存储系统进行通信,并且还可以与系统10中包括的其他组件进行通信。

系统10中包括的主机系统14a至14n中的每一者和数据存储系统12可以通过可以根据通信介质18的类型提供和支持的多种连接中的任一者连接到通信介质18。主机系统14a至14n和数据存储系统12中包括的处理器可以是各种专有或商购单处理器或多处理器系统中的任一者,诸如基于Intel的处理器,或能够支持根据每个特定实施方案和应用程序的流量的其他类型的商购处理器。

应当注意,可以包括在数据存储系统12中的硬件和软件的特定示例在本文中被更详细地描述,并且可以随着每个特定实施方案而变化。主机14a至14n中的每一者和数据存储系统12都可以位于相同的物理站点处,或者替代地也可以位于不同的物理位置处。用于系统10的主机系统14a至14n与数据存储系统12之间通信的通信介质18可以使用各种不同的通信协议,诸如基于块的协议(例如,SCSI、光纤通道、iSCSI)、基于文件系统的协议(例如,NFS或网络文件服务器)等。可以将主机14a至14n和数据存储系统12连接到通信介质18的一些或所有连接可以通过其他通信装置,诸如交换设备、电话线、中继器、多路复用器或者甚至卫星。

主机系统14a至14n中的每一者可以执行数据操作。在图1的实施方案中,主机14a至14n中的任一者可以向数据存储系统12发出数据请求以执行数据操作。例如,在主机计算机14a至14n中的一者上执行的应用程序可以执行读取或写入操作,从而产生对数据存储系统12的一个或多个数据请求。

应当注意,尽管元件12被示为单个数据存储系统,诸如单个数据存储阵列,但是在使用本文技术的实施方案中,元件12也可以表示例如仅多个数据存储阵列或多个数据存储阵列与诸如在SAN(存储区域网络)或LAN(局域网)中具有合适连接性的其他数据存储装置、系统、设备和/或组件的组合。还应当注意,实施方案可以包括来自一个或多个供应商的数据存储阵列或其他组件。在示出本文技术的后续示例中,供应商可以参考单个数据存储阵列。然而,如本领域技术人员将理解的,本文技术可适用于与其他供应商的其他数据存储阵列一起使用,以及与除本文出于示例目的描述之外的其他组件一起使用。

数据存储系统12可以是包括多个物理数据存储装置(PD)16a至16n的数据存储设备或数据存储阵列。PD 16a至16n可以包括一种或多种类型的物理数据存储装置,诸如例如一个或多个旋转磁盘驱动器和/或一个或多个固态驱动器(SSD)。SSD是一种使用固态存储器来存储持久数据的数据存储装置。SSD可以指代固态电子装置,以区别于机电装置,诸如具有移动零部件的硬盘驱动器。快闪装置或基于快闪存储器的SSD是一种不含移动机械零件的SSD。快闪装置可以使用非易失性半导体NAND快闪存储器来构造。快闪装置可以包括例如一个或多个SLC(单级单元)装置和/或MLC(多级单元)装置。

数据存储阵列还可以包括不同类型的适配器或指挥器(director),诸如HA 21(主机适配器)、RA 40(远程适配器)和/或装置接口23。适配器中的每一者可以使用硬件来实施,所述硬件包括处理器,所述处理器具有本地存储器,所述本地存储器上存储有代码,所述代码结合执行不同操作来执行。HA可以用于管理一个或多个主机系统与全局存储器(GM)之间的通信和数据操作。在实施方案中,HA可以是光纤通道适配器(FA)或促进主机通信的其他适配器。HA 21可以被表征为数据存储系统的前端组件,其从主机14a至14n中的一者接收请求。数据存储阵列可以包括可以用于例如促进数据存储阵列之间的通信的一个或多个RA。数据存储阵列还可以包括用于促进向/从PD 16a至16n传递数据的一个或多个装置接口23。数据存储装置接口23可以包括装置接口模块,例如用于与快闪驱动器或其他PD(例如,PD 16a至16n)对接的一个或多个磁盘适配器(DA)(例如,磁盘控制器)。DA还可以被表征为与PD对接的数据存储系统的后端组件。

一个或多个内部逻辑通信路径可以存在于装置接口23、RA 40、HA 21和存储器26之间。例如,实施方案可以使用一个或多个内部总线和/或通信模块。例如,全局存储器部分25b可以用于促进数据存储阵列中的装置接口、HA和/或RA之间的数据传递和其他通信。在一个实施方案中,装置接口23例如在与数据存储阵列的其他装置接口和其他组件进行通信时可以使用可以包括在全局存储器25b中的系统高速缓存来执行数据操作。另一部分25a是存储器的可以与可以根据每个实施方案而变化的其他名称结合使用的部分。

如本实施方案中描述的特定数据存储系统或其特定装置(诸如磁盘或快闪装置的特定方面)不应被解释为限制。其他类型的商购数据存储系统以及控制对这些特定装置的访问的处理器和硬件也可以包括在实施方案中。

主机系统14a至14n通过通道向存储系统12提供数据并访问控制信息,并且存储系统12也可以通过通道向主机系统14a至14n提供数据。主机系统14a至14n不直接对存储系统的驱动器或装置16a至16n寻址,而是可以从被主机系统视为多个逻辑装置、逻辑卷(LV)(其在本文中也可以被称为逻辑单元(例如,LUN))的装置向一个或多个主机系统提供对数据的访问。逻辑单元(LUN)可以被表征为磁盘阵列或数据存储系统对已被格式化并被分配给一个或多个主机使用的存储空间量的引用。逻辑单元可以具有作为逻辑单元的I/O地址的逻辑单元号。如本文所使用,一个或多个LUN可以指代可以由此类逻辑单元号引用的不同逻辑存储单元。LUN可以或也可以不对应于实际或物理磁盘驱动器或者更一般地PD。例如,一个或多个LUN可以驻留在单个物理磁盘驱动器上,单个LUN的数据可以驻留在多个不同的物理装置上等。单个数据存储系统(诸如单个数据存储阵列)中的数据可以由多个主机访问,从而允许主机共享驻留在其中的数据。HA可以结合数据存储阵列与主机系统之间的通信使用。RA可以用于促进两个数据存储阵列之间的通信。DA可以包括用于结合促进向/从相关联的磁盘驱动器和驻留在其上的LUN传递数据使用的一种或多种类型的装置接口。例如,此类装置接口可以包括结合促进向/从相关联的快闪装置和驻留在其上的LUN传递数据使用的装置接口。应当注意,实施方案可以针对一种或多种不同类型的装置使用与本文所描述的相同或不同的装置接口。

在根据本文技术的实施方案中,所描述的数据存储系统可以被表征为具有一个或多个逻辑映射层,其中数据存储系统的逻辑装置被暴露给主机,由此逻辑装置由数据存储系统的此类映射层映射到一个或多个物理装置。另外,主机还可以具有一个或多个附加映射层,使得例如主机侧逻辑装置或卷被映射到呈现给主机的一个或多个数据存储系统逻辑装置。

应当注意,尽管本文技术的示例可以是关于物理数据存储系统及其物理组件(例如,用于每个HA、DA、HA端口等的物理硬件)给出的,但是本文技术可以在包括一个或多个模拟的或虚拟化组件(例如,模拟的或虚拟化端口、模拟的或虚拟化DA或HA)的物理数据存储系统中以及在包括虚拟化或模拟组件的虚拟化或模拟数据存储系统中执行。

图1还示出了可以用于管理和监控数据存储系统12的管理系统22a。在一个实施方案中,管理系统22a可以是计算机系统,其包括诸如可以在网络浏览器中执行的数据存储系统管理软件或应用程序。数据存储系统管理员可以例如在管理系统22a的显示装置中的用户界面(UI)上查看关于诸如LUN、存储池等当前数据存储配置的信息。替代地并且更一般地,管理软件可以在任何合适的系统中的任何合适的处理器上执行。例如,数据存储系统管理软件可以在数据存储系统12的处理器上执行。

关于数据存储系统配置的信息可以存储在诸如数据库的任何合适的数据容器中。存储在数据库中的数据存储系统配置信息通常可以描述当前数据存储系统配置中的各种物理和逻辑实体。数据存储系统配置信息可以描述例如在系统中配置的LUN、配置的LUN的属性和状态信息(例如,LUN存储容量、LUN未使用或可用的存储容量、LUN消耗或使用的容量)、配置的RAID组、配置的RAID组的属性和状态信息(例如,RAID组的RAID级、作为配置的RAID组的成员的特定PD)、系统中的PD、关于系统中的PD的属性和状态信息、本地复制配置和现有本地副本的细节(例如,拍摄一个或多个LUN的快照时的时间表或其他触发条件、标识关于特定LUN的现有快照的信息)、远程复制配置(例如,对于本地数据存储系统上的特定LUN,标识LUN的对应的远程配对LUN和远程LUN所处的远程数据存储系统)、诸如系统中的各种存储对象和其他实体的数据存储系统性能信息等。

与本文的其他讨论一致,通过控制或数据路径发出的管理命令可以包括查询或读取数据存储系统配置的选定部分(诸如关于一个或多个LUN的特性或属性的信息)的命令。管理命令还可以包括写入、更新或修改数据存储系统配置的命令,诸如例如创建或提供新LUN(例如,这可能导致修改一个或多个数据库表,诸如添加新LUN的信息)、修改现有的复制时间表或配置(例如,这可能导致针对当前复制时间表或配置更新一个或多个数据库表中的现有信息)、删除LUN(例如,其可以包括从定义的LUN表中删除LUN,并且还可以包括修改一个或多个其他数据库表以删除正在删除的LUN的任何现有快照)等。

应当注意,不同的适配器中的每一者(诸如每个HA、DA、RA等)可以被实施为硬件组件,包括例如一个或多个处理器、一种或多种形式的存储器等。代码可以存储在用于执行处理的组件的存储器中的一者或多者中。

装置接口(诸如DA)在物理装置或驱动器16a至16n上执行I/O操作。在以下描述中,驻留在LUN上的数据可以在与I/O操作相关的数据请求之后被装置接口访问。例如,主机可以发出由HA 21接收的I/O操作。I/O操作可以标识从其中读取数据或向其中写入数据的目标位置,这取决于I/O操作分别是读取操作请求还是写入操作请求。接收到的I/O操作的目标位置可以根据LUN和LUN上的逻辑地址或偏移位置(例如,LBA或逻辑块地址)来表达。可以在数据存储系统上执行处理,以进一步将接收到的I/O操作的目标位置(根据LUN和逻辑地址或LUN上的偏移位置表达)映射到其对应的物理存储装置(PD)和PD上的位置。为特定PD提供服务的DA可以进一步执行处理,以从对应的物理装置位置读取数据或向其中写入数据,以进行I/O操作。

应当注意,数据存储系统的实施方案可以包括的组件与本文描述的组件具有不同名称但执行与本文描述的组件相似的功能。另外,单个数据存储系统内的组件以及数据存储系统之间的组件可以使用可能与本文出于示例性目的描述的技术不同的任何合适的技术进行通信。例如,图1的元件12可以是包括多个存储处理器(SP)的数据存储系统,诸如数据存储阵列。SP 27中的每一者可以是包括一个或多个“核心”或处理器的CPU,并且每个SP可以将它们自己的存储器用于不同的前端组件与后端组件之间的通信,而不是利用所有存储处理器可访问的全局存储器。在此类实施方案中,存储器26可以标识每个这样的存储处理器的存储器。

通常,本文技术可以结合其中存储数据的任何合适的存储系统、设备、装置等来使用。例如,实施方案可以使用中端数据存储系统(诸如Dell EMC 

数据路径或I/O路径可以被表征为I/O数据通过系统的路径或流动。例如,数据或I/O路径可以是通过与用户相关的硬件和软件组件或层的逻辑流,诸如在主机(例如,更一般地,数据存储客户端)上执行的应用程序发出I/O命令(例如,基于SCSI的命令和/或基于文件的命令),所述I/O命令读取用户数据和/或将用户数据写入数据存储系统,并且还接收与此类I/O命令相关的响应(可能包括请求的数据)。

控制路径(有时也被称为管理路径)可以被表征为数据管理或控制命令通过系统的路径或流动。例如,控制或管理路径可以是通过与向和/或从数据存储系统数据发出数据存储管理命令以及接收对此类控制或管理命令的响应(可能包括请求的数据)有关的硬件和软件组件或层的逻辑流。例如,参考图1,可以从在管理系统22a上执行的数据存储管理软件向数据存储系统12发出控制命令。此类命令例如可以是建立或修改数据服务、提供存储、执行用户账户管理等。与本文的其他讨论一致,管理命令可以使处理包括读取和/或修改存储数据存储系统配置信息的数据库中的信息。例如,读取和/或修改数据库中的数据存储系统配置信息的管理命令可以通过控制路径发出,以便为LUN提供存储、创建快照、定义何时创建另一个快照的条件、定义或建立本地和/或远程复制服务、定义或修改快照或其他数据复制服务的时间表、定义RAID组、获得数据存储管理和配置信息以显示在数据存储管理程序或应用程序的图形用户界面(GUI)中、大致修改数据存储系统配置的一个或多个方面、列出关于LUN或其他存储对象(例如,数据存储系统中的物理和/或逻辑实体)的属性和状态信息等。

数据路径和控制路径定义了两组不同的逻辑流路径。在至少一些数据存储系统配置中,用于数据路径和控制路径中的每一者的硬件和网络连接的至少部分可以是不同的。例如,尽管控制路径和数据路径两者通常可以使用网络进行通信,但是所使用的一些硬件和软件可能不同。例如,参考图1,数据存储系统可以具有从管理系统22a到被管理的数据存储系统12的单独的物理连接29,由此可以通过这种物理连接29发出控制命令。然而,用户I/O命令可能永远不会通过仅为将管理系统连接到数据存储系统的目的而提供的这种物理连接29发出。在任何情况下,数据路径和控制路径各自定义两个单独的逻辑流路径。

参考图2,示出了示例100,所述示例示出了根据本文技术的可以包括在至少一个现有的数据存储系统中的数据路径中的组件。示例100包括数据路径的两个处理节点A102a和B 102b以及相关联的软件堆栈104、106,其中I/O请求可以由处理节点102a或102b接收。在示例200中,处理节点A 102a的数据路径104包括:前端(FE)组件104a(例如,FA或前端适配器),其将特定于协议的请求转化为特定于存储系统的请求;系统高速缓存层104b,其临时存储数据;在线处理层105a;以及后端(BE)组件104c,其促进数据在系统高速缓存与非易失性物理存储装置(例如,后端物理非易失性存储装置或由诸如本文描述的DA的BE组件访问的PD)之间的移动。在数据移入和移出系统高速缓存层104b期间(例如,诸如与从物理存储器110a、110b读取数据和向其中写入数据相关),在线处理可以由层105a执行。层105a的此类在线处理操作可以任选地被执行并且可以包括与从系统高速缓存层104b刷新到后端非易失性物理存储装置110a、110b的数据相关的以及当从后端非易失性物理存储装置110a、110b检索数据以存储在系统高速缓存层104b中时进行的一个或多个数据处理操作中的任一者。在至少一个实施方案中,在线处理可以包括例如执行一个或多个数据缩减操作,诸如数据复制或数据压缩。在线处理可以包括执行任何合适的或期望的数据处理操作,作为I/O或数据路径的一部分。

以与针对数据路径104描述的方式相似的方式,用于处理节点B102b的数据路径106具有其自己的FE组件106a、系统高速缓存层106b、在线处理层105b和BE组件106c,它们分别与组件104a、104b、105a和104c相似。元件110a、110b表示从PD为LUN提供的非易失性BE物理存储装置,由此I/O可以指向LUN的位置或逻辑地址,并且其中可以从逻辑地址读取或向逻辑地址写入数据。LUN 110a、110b是表示包括在现有数据存储系统配置中的逻辑存储实体的存储对象的示例。由于在该示例中,指向LUN 110a、110b的写入可以被节点102a和102b中的任一者接收以供处理,因此示例100示出了也可以被称为活动-活动配置的配置。

结合可以从主机接收并由处理节点A 102a处理的写入操作,写入数据可以被写入系统高速缓存104b;被标记为写入挂起(WP),其表示数据需要被写入物理存储装置110a、110b;并且在稍后的时间点,写入数据可以由BE组件104c从系统高速缓存离台或刷新到物理存储装置110a、110b。一旦写入数据已经存储在系统高速缓存中,写入请求就可以被认为是完成的,由此可以将关于完成的确认(例如,通过组件104a)返回给主机。在不同的时间点处,存储在系统高速缓存中的WP数据被刷新或写出到物理存储装置110a、110b。

结合在线处理层105a,在将原始数据存储在物理存储装置110a、110b上之前,可以执行一个或多个数据缩减操作。例如,在线处理可以包括执行数据压缩处理、数据去重处理等,它们可以将原始数据(如在线处理之前存储在系统高速缓存中)转换为所得表示或形式,然后将所得表示或形式写入到物理存储装置110a、110b。

结合读取数据块的读取操作,确定请求的读取数据块是否以其原始形式存储(在系统高速缓存104b中或物理存储装置110a、110b上),或者请求的读取数据块是否以不同的修改形式或表示形式存储。如果请求的读取数据块(以其原始形式存储)在系统高速缓存中,则从系统高速缓存104b中检索读取数据块并将其返回给主机。否则,如果请求的读取数据块不在系统高速缓存104b中,而是以其原始形式存储在物理存储装置110a、110b上,则请求的数据块由BE组件104c从后端存储装置110a、110b中读取,存储在系统高速缓存中,然后返回给主机。

如果请求的读取数据块不是以其原始形式存储的,则重新创建读取数据块的原始形式并以其原始形式存储在系统高速缓存中,使得其可以被返回给主机。因此,存储在物理存储装置110a、110b上的请求的读取数据可以以修改的形式存储,其中处理由层105a执行以在将请求的读取数据返回给主机之前将数据的修改形式恢复或转换为其原始数据形式。

图2还示出了节点102a、102b之间的内部网络互连120。在至少一个实施方案中,互连120可以用于节点102a、102b之间的节点间通信。

结合根据本文技术的至少一个实施方案,每个处理器或CPU可以包括其自己的不与其他处理器共享的私有专用CPU高速缓存(有时也称为处理器高速缓存)。在至少一个实施方案中,CPU高速缓存如同一般的高速缓存可以是快速存储器的形式(比可以是RAM形式的主存储器相对更快)。在至少一个实施方案中,CPU或处理器高速缓存与处理器位于同一裸片或芯片上,并且通常像一般的高速缓存存储器一样,其生产成本远高于可以用作主存储器的普通RAM。处理器高速缓存可能比诸如用作主存储器的系统RAM快得多,并且包含处理器将立即和重复访问的信息。例如,CPU高速缓存的更快存储器可能以更接近CPU时钟速度的刷新速率运行,从而最大限度地减少浪费的周期。在至少一个实施方案中,可以有两级或更多级(例如,L1、L2和L3)高速缓存。CPU或处理器高速缓存可以包括至少一个L1级高速缓存,所述至少一个L1级高速缓存是专门供该特定处理器使用的本地或私有CPU高速缓存。系统中的两级或更多级高速缓存还可以包括在不同CPU之间共享的至少一个其他级的高速缓存(LLC或较低级高速缓存)。用作处理器的专用CPU高速缓存的L1级高速缓存可以是所有高速缓存级(例如,L1至L3)中最接近存储来自频繁使用的主存储器位置的数据副本的处理器的高速缓存级。因此,如本文所述的系统高速缓存可以包括CPU高速缓存(例如,L1级高速缓存或专用私有CPU/处理器高速缓存)以及如本文所述的其他高速缓存级(例如,LLC)。例如,LLC的部分可以用于最初高速缓存写入数据,然后将数据刷新到后端物理存储装置。例如,在至少一个实施方案中,基于RAM的存储器可以是用于高速缓存随后被刷新到后端物理存储装置的写入数据的高速缓存层中的一者。当处理器诸如结合如上所述的在线处理层105a、105b执行处理时,数据可以从主存储器和/或其他较低的高速缓存级加载到其CPU高速缓存中。

在至少一个实施方案中,数据存储系统可以被配置为包括一对或多对节点,其中每一对节点可以通常被描述并表示为图2中的节点102a至102b。例如,数据存储系统可以被配置为包括至少一对节点和至多最大数量的节点对,诸如例如最多4个节点对。节点对的最大数量可以随实施方案而变化。在至少一个实施方案中,基本外壳可以包括最少的单对节点和最多指定的最大数量的PD。在一些实施方案中,单个基本外壳可以使用一个或多个扩展外壳按比例放大为具有附加的BE非易失性存储装置,其中每个扩展外壳可以包括多个附加的PD。此外,在一些实施方案中,多个基本外壳可以在负载平衡集群中分组在一起以提供最多最大数量的节点对。与本文的其他讨论一致,每个节点可以包括一个或多个处理器和存储器。在至少一个实施方案中,每个节点可以包括两个多核处理器,其中节点的每个处理器具有8至28个核心的核心计数。在至少一个实施方案中,PD可以都是非易失性SSD,诸如基于快闪的存储装置和存储类存储器(SCM)装置。应当注意,成对配置的两个节点有时也可以被称为对等节点。例如,节点A 102a是节点B 102b的对等节点,而节点B 102b是节点A 102a的对等节点。

在至少一个实施方案中,数据存储系统可以被配置为通过系统软件堆栈来提供块和文件存储服务两者,所述系统软件堆栈包括直接在系统节点的处理器上运行的操作系统。

在至少一个实施方案中,数据存储系统可以被配置为提供仅块存储服务(例如,无文件存储服务)。管理程序可以安装在节点中的每一者上以提供虚拟机(VM)的虚拟化环境。系统软件堆栈可以在部署在管理程序上的虚拟化环境中执行。系统软件堆栈(有时称为软件堆栈或堆栈)可以包括在虚拟化环境的VM的上下文中运行的操作系统。附加的软件组件可以包括在系统软件堆栈中并且也可以在虚拟化环境的VM的上下文中执行。

在至少一个实施方案中,每一对节点可以以如本文其他地方诸如结合图2所描述的活动-活动配置来配置,其中该对节点中的每个节点可以访问相同的PD,从而提供BE存储以实现高的可用性。通过每对节点的活动-活动配置,该对节点中的两个节点都处理I/O操作或命令,并且还向和从附接到该对节点的BE PD传递数据。在至少一个实施方案中,附接到一对节点的BE PD可以不与其他节点对共享。主机可以通过与PD相关联或附接到PD的节点对访问存储在BE PD上的数据。

在至少一个实施方案中,每一对节点提供双节点架构,其中该对节点的两个节点在硬件和软件方面可以相同以实现冗余和高的可用性。与本文的其他讨论一致,一对节点中的每个节点可以对数据路径或I/O路径以及控制或管理路径中的不同组件(例如,FA、DA等)执行处理。

在一些实施方案中,系统10和/或示例100可以被配置为执行数据缩减,例如相似性去重。

图3是示出根据本发明的实施方案的用于压缩数据单元的系统300的示例的数据流图示。用于压缩数据单元的系统的其他实施方案(例如,系统300的变型)是可能的并且意图落入本发明的范围内。系统300可以被实施为系统10和/或示例100的一部分。系统300可以被配置为执行相似性去重,并且可以被配置为执行分别关于图4至图8描述的方法400、500、600和/或800。

系统300可以包括以下任一者:哈希生成逻辑304;哈希查找逻辑308;压缩逻辑312;以及数据存储装置320,哈希索引314和压缩的数据318可以存储在所述数据存储装置上。哈希索引314可以包括多个条目,其中每个条目包括从数据单元生成的哈希值、生成条目的哈希值的数据单元的ID和/或位置(直接或间接),并且可能包括其他信息。

哈希生成逻辑304可以被配置为接收数据单元302并为数据单元生成哈希值306,例如,如本文其他地方更详细描述的。哈希查找逻辑308可以被配置为接收哈希值306,并且访问哈希索引314以确定是否存在用于现有数据单元的匹配哈希值。如果哈希查找逻辑308找到匹配哈希值,则它可以将与匹配哈希值相对应的相似数据单元310的ID和/或位置发送到压缩逻辑312。如果哈希查找逻辑308没有找到匹配哈希值,则它可以向压缩逻辑312发送不匹配指示311。

压缩逻辑312可以被配置为接收数据单元302和不匹配指示311或相似数据单元310的ID和/或位置。压缩逻辑可以被配置为使得如果接收到不匹配指示311,则压缩逻辑可以对数据单元302执行自压缩以产生要存储在压缩的数据318中的压缩单元316。压缩逻辑312可以被配置为使得如果接收到相似数据310的ID和/或位置,则压缩逻辑312可以使用相似数据单元310作为字典来对数据单元302执行基于字典的压缩以产生要存储在压缩的数据318中的压缩单元316。在一些实施方案中,压缩逻辑312可以确定数据单元302和相似数据单元是相同的(即,重复),在这种情况下,它可以停止数据单元302的压缩并存储对数据单元320的相似(实际上相同的)数据单元310的引用,而不是压缩所述数据单元。

图4是示出根据本发明的实施方案的压缩数据单元的方法400的示例的流程图。压缩数据单元的方法的其他实施方案(例如,方法400的变型)是可能的并且意图落入本发明的范围内。

在步骤401中,可以接收数据单元,例如,作为在存储系统处从主机系统接收的写入操作的一部分。在步骤402中,可以确定数据单元的代表性数据部分,例如,如本文其他地方更详细描述的。在一些实施方案中,步骤402是通过执行关于图5描述的方法500来实施的。

在步骤404中,可以将哈希函数应用于代表性部分以产生哈希值。哈希函数可以是多种哈希函数中的任一种,例如xxHash。步骤402和/或404可以由哈希生成逻辑304来实施。

在步骤406中,可以例如通过访问哈希索引314来确定所确定的哈希值是否与数据集的现有数据单元的任何哈希值匹配。如果确定不存在匹配哈希值,则在步骤414中,可以将确定的哈希值存储在哈希索引中,并且可以对接收到的数据单元执行自压缩,并且自压缩的数据单元可以存储在例如可以包括一个或多个物理装置16a至16c的数据存储装置320上。步骤406和414可以由哈希查找逻辑308来实施。

如果确定存在匹配哈希值,则在步骤408中,可以使用与匹配哈希值相对应的数据单元作为字典(即,基本数据单元)来将基于字典的压缩应用于接收到的数据单元。如果在基于字典的压缩期间确定两个数据单元相同(即,重复),则在步骤412中,可以将对基本数据单元的引用与接收到的数据单元相关联,而不是压缩接收到的数据单元并存储它。

如果接收到的数据单元不是基本数据单元的副本,则可以完成基于字典的压缩并且在步骤418中将压缩的数据单元存储在例如可以包括一个或多个物理装置16a至16c的数据存储装置320上。在步骤420中,可以将接收到的数据单元与基本数据单元相关联的信息记录在例如数据存储装置320上。步骤408、410、412、416、418和420可以由压缩逻辑312来实施。

例如,响应于从主机系统接收到的读取操作,可以使用将接收到的数据单元与基本数据单元相关联的信息来对压缩的接收到的数据单元进行解压缩。例如,响应于针对候选数据单元的读取操作,可以访问将候选数据单元与其基本数据单元相关联的信息,并且基本数据单元被检索(并且在必要时被解压缩),然后应用于压缩的候选数据单元以对其进行解压缩。

图5是示出根据本发明的实施方案的确定要哈希化的数据单元的代表性部分的方法500的示例的流程图。确定要哈希化的数据单元的一部分的方法的其他实施方案(例如,方法500的变型)是可能的并且意图落入本发明的范围内。方法500可以由哈希生成逻辑304来实施。

要哈希化的数据单元的代表性部分可以由数据单元的数据的多个组块组成,其中每个组块是连续的、不间断的数据区段。然而,组块本身不一定彼此连续,尽管这是可能的。在一些实施方案中,由于从本文的讨论中应当清楚,集合中的任何两个组块彼此连续的可能性很小。可以使用MinHash的变型来选择组块。

在步骤502中,可以将哈希函数(例如,简单质数乘法哈希函数)应用于数据单元的组块。可以应用其他类型的哈希函数。在步骤504中,可以确定一组M个最大/最小哈希值,并且可以确定并记录与最小/最大值相对应的组块在数据单元内的位置。步骤502和504是通过执行关于图6描述的方法600来共同实施的。

在步骤506中,可以基于与该组M个最大/最小值相对应的组块来创建代表性部分,例如,如关于图8所描述的方法800所描述的。

图6是示出根据本发明的实施方案的将哈希函数应用于数据单元的组块以确定数据单元的最大/最小哈希值的方法600的示例的流程图。将哈希函数应用于数据单元的组块以确定数据单元的最大/最小哈希值的方法的其他实施方案(例如,方法600的变型)是可能的并且意图落入本发明的范围内。方法600可以由哈希生成逻辑304来实施。

在步骤601中,可以在概念上将数据单元(例如,页面、块、文件)划分为具有K个数据元素(例如,字节)的S个子集。例如,4KB(4096个字节)的数据页在概念上可以被划分为具有8(即,K=8)个字节的512(即,S=512)个子集。在步骤602中,可以将子集变量s初始化为0,并且在步骤604中,可以将位置变量k初始化为0。

在步骤606中,可以为与子集s内的位置k相对应的连续数据元素组块确定哈希值H[k]。现在将参考图7示出这种情况,图7将在方法600的整个描述中被引用。

图7是示出根据本发明的实施方案的数据单元702的示例的框图,所述数据单元具有应用于数据单元的组块以确定数据单元的最大/最小哈希值的哈希函数。数据单元的其他实施方案是可能的并且意图落入本发明的范围内,所述数据单元具有应用于数据单元的组块以确定数据单元的最大/最小哈希值的哈希函数。数据单元702包括多个数据元素b

方法600的步骤606可以将哈希函数应用于与子集s

在步骤608中,可以确定迄今为止针对在子集中的任一者中的位置k计算的最大值;即,maxH[k]=max(H[k],maxH[k])。对于第一子集s

在步骤610中,可以记录与位置k的最大值相对应的数据单元内的位置。即,可以记录maxlocH[k]。例如,所述位置可以由数据单元内的LBA偏移指定。参考图7,对于首次通过步骤606至610,即,对于s

在步骤612中,可以确定是否已经到达子集中的最后一个位置,例如,是否k=K-1。即,如果K=8并且k=0是第一位置,则k=7(即,K-1)是最后一个位置。如果尚未到达子集内的最后一个位置,则位置变量k可以在步骤614中递增1,并且方法600可以返回到步骤606并对当前子集内的下一个位置执行步骤606至610。例如,参考图7,对于子集s

对于给定子集,步骤606至610可以重复K次。例如,如果K=8,则步骤606至610的执行可以为给定子集产生H0至H7。参考图7,s

在步骤606至610已经重复K次之后,步骤612将确定当前位置k是子集中的最后一个位置,并且方法600将进行到步骤616,其中将确定当前子集是否是是数据单元的最后一个子集;即,是否s=S-1。例如,如果S=512并且s=0是第一子集,则s=511(即,S-1)是最后一个子集。

如果在步骤616中确定当前子集不是最后一个子集,则子集变量可以在步骤618中递增1并且方法600可以返回到步骤604,其中位置变量可以被初始化为0,并且可以针对新的当前子集执行步骤606至610。例如,参考图7,如果s=1并且k=0,则可以对子集s

在步骤608中,可以确定迄今为止针对子集中的任一者(例如,s

步骤606至610可以针对子集s1 706重复K=8次,从而可以产生H0 709a、H1 709b、H2 709c、H3 709d、H4 709e、H5 709f、H6(未示出)和H7(未示出)。maxHx和maxlocHx的值将取决于为前两个子集s

在步骤606至610已经针对s=1重复K次之后,步骤612将确定当前位置k是子集内的最后一个位置,并且方法600将进行到步骤616,其中可以确定当前子集是否是是数据单元的最后一个子集。由步骤604至616定义的循环可以执行S次;即,对于每个子集,直到处理完数据单元的所有子集。对于图7的示例,当N=4096、S=512和K=8时,如果在步骤616中确定子集是最后-个子集,即,S=511,则方法600可以结束。

在方法600的执行结束时,可能有两个向量:maxH值的向量maxH[0:K-1];以及maxlocH值的对应向量maxlocH[0:K-1]。例如,如果K=8,则maxH[0:7]=[maxH0,maxH1,maxH2,maxH3,maxH4,maxH5,maxH6,maxH7],并且maxlocH[0:7]=[maxlocH0,maxlocH1,maxlocH2,maxlocH3,maxlocH4,maxlocH5,maxlocH6,maxlocH7]。这些向量可以用于例如使用关于图8描述的方法800创建数据单元的代表性部分。

应当理解,在本文其他地方更详细描述的一些实施方案中,在步骤608中确定的最大哈希值不用作最终为数据单元生成的哈希值的一部分并且与从其他数据单元生成的哈希值进行比较。相反,产生最大哈希值的数据组块的位置用于构造代表性数据部分,对于所述代表性数据部分,生成了数据单元的哈希值,如本文其他地方更详细描述的。

图8是示出根据本发明的实施方案的从要哈希化的数据单元的组块创建数据单元的代表性部分的方法800的示例的流程图。从要哈希化的数据单元的组块创建数据单元的一部分的方法的其他实施方案(例如,方法800的变型)是可能的并且意图落入本发明的范围内。方法800可以由哈希生成逻辑304来实施。

在步骤801中,可以选择maxH[0:K-1]向量的唯一最大值的数量M,其中MM个最大值以避免在创建代表性部分时使用重复的最大值。对于被认为相似的数据单元,可以基于数据单元之间期望的相似度来预定义M的值;即,从代表性部分产生匹配哈希值。M的值越大,数据单元之间产生数据单元的代表性部分的匹配哈希值使得它们被认为相似所需的匹配位数(对应于确定的最大值的位置)就越多。因此,较大的M值将产生较少的匹配哈希值;即,更少的正确肯定和错误肯定,而较小的M值将产生更多的正确肯定和错误肯定。在一些实施方案中,可以从K个最大值中选择具有最高值的M个唯一最大值。

在步骤802中,可以根据从中生成相应最大值的数据元素的组块在数据单元内的位置对M个最大值进行排序,从而产生向量maxH[0:M-1]和向量maxlocH[0:M-1]。在步骤804中,可以将向量位置变量m初始化为0。

在步骤806中,可以获得与maxH[0:M-1]向量中的位置m处的最大值相对应的数据元素的组块-即,从在maxlocH[0:M-1]向量中指定的位置m的存储器位置访问它。

在步骤808中,对于位置m的组块,可以将来自紧接在数据单元(例如,相邻字节)中的组块之前和/或紧接在所述组块之后的连续数据片(即,组块)分别连接到组块的开始和结束以产生扩展组块。在一些实施方案中,原始组块的长度为4个字节,并且紧接在组块之前和紧接在组块之后的连续数据片的长度各自为4个字节,从而产生具有12个字节长度的扩展组块。

在确定数据单元的代表性部分的哈希值之间的匹配时(例如,步骤406),添加未涉及生成最大哈希值的连续数据片可以减少错误肯定的数量。例如,在其中步骤606生成相对较小的数据组块(例如,4个字节)的哈希值的实施方案中,两个数据单元可以生成相同但是实际上并不那么相似(没有相似到定义相似性的程度)的最大哈希值。因此,为了降低为两个数据单元生成的代表性部分在所述两个数据单元不那么相似时产生相同哈希值(尽管小组块产生相同的最大哈希值)的可能性,可以在组块的任一端上添加连续数据片以产生扩展组块。如果两个数据单元真正相似,则从根据扩展组块创建的代表性部分产生的哈希值应当仍然相同。然而,如果两个数据单元并不真正相似,则从根据扩展组块创建的代表性部分产生的哈希值将不太可能相同。

在步骤810中,可以将扩展组块附加到代表性部分。对于第一位置m=0的扩展组块,代表性部分被初始化为扩展组块的值。

在步骤812中,可以确定当前位置m是否是maxH[0:M-1]中的最后一个位置。如果不是,则向量位置变量可以递增,并且方法800可以返回到步骤806,并且针对maxH[0:M-1]中的下一个位置重复步骤806至810。如果在步骤812中确定当前位置m是maxH[0:M-1]中的最后一个位置,则方法800可以结束。

在一些实施方案中,数据的组块可以以任何顺序从数据单元(以及添加到其中的连续数据片)获得,然后根据它们在从中获得它们的数据单元内的先前位置(例如,LBA)按顺序布置以产生代表性部分。在一些实施方案中,数据的组块(以及添加到其中的连续数据片)根据值(例如,从最高到最低或反之亦然)不是根据数据单元内的位置来布置以形成代表性部分。

在方法800完成时,已经创建了代表性部分。如果M=5并且扩展组块的长度为12字节,则代表性部分的长度可以为60字节。如本文其他地方更详细描述的,可以为代表性部分生成哈希值。例如,可以针对代表性部分执行方法400的步骤404至420。在数据单元的长度为4096个字节的实施方案中,可以为长度仅为60个字节的数据单元的代表性部分生成哈希值,而不是为4096个字节生成哈希值。

本发明的一些实施方案可以被认为是MinHash的变型。MinHash的一些实施方案为数据单元(例如,页面)的每个数据元素(例如,字节)生成单独的哈希值,而本文描述的本发明的实施方案可能不会为单独的数据元素生成哈希值,而是为数据元素的组块生成哈希值,但是本发明不限于此。在一些实施方案中,可以为单独的数据元素生成哈希值。此外,MinHash的一些实施方案针对为其生成哈希值的每个数据片生成多个哈希值,而本文描述的本发明的实施方案可能不会针对为其生成哈希值的每个数据段生成多个哈希值,而是为每个这样的数据片(例如,组块)仅生成单个哈希值,但是本发明不限于此。在一些实施方案中,可以为每个组块生成多个哈希值。为每个组块仅生成单个哈希值可以减少计算开销,从而节省计算资源。

应当理解,可以修改系统300和方法400、500、600和800的各种参数以实现期望的相似性去重属性,包括但不限于K、S、M、N、数据元素的大小,以及组块中的数据元素的数量。

本发明的各种实施方案可以以适当的组合彼此组合。另外,在一些情况下,流程图、流图示和/或描述的流程处理中的步骤顺序可以在适当时被修改。应当理解,本文描述的方法中的任一者(包括方法400、500、600和800或其部分)可以使用关于图1至图3和图7描述的系统和/或数据结构或其组件中的一者或多者来实施。此外,本发明的各个方面可以使用软件、固件、硬件、其任何合适的组合和/或具有所描述的特征并执行所描述的功能的其他计算机实施的模块或装置来实施。当被执行时执行本文描述的方法、其步骤或此类方法或步骤的部分的逻辑可以被实施为软件、固件、硬件或其任何合适的组合。

本发明的实施方案的软件实施方式可以包括存储在一个或多个计算机可读介质上并由一个或多个处理器执行的可执行代码。计算机可读介质中的每一者可以是非暂时性的并且包括计算机硬盘驱动器、ROM、RAM、快闪存储器、便携式计算机存储介质(诸如CD-ROM、DVD-ROM、快闪驱动器、SD卡和/或具有例如通用串行总线(USB)接口的其他驱动器),和/或任何其他适当的有形或非暂时性计算机可读介质或计算机存储器,可执行代码可以在其上存储并由处理器执行。本发明的实施方案可以结合任何合适的操作系统(OS)使用。

如本文所使用,以单数形式列举并且前面带词“一”或“一个”的元件或操作应当被理解为不排除多个元件或操作,除非明确叙述此类排除。对本公开的“一个”实施方案或实施方式的参考并非意图解释为排除也包含所列举特征的附加实施方案的存在。此外,对一般形式的“[a]、[b]或[c]中的至少一者”或其等同物的描述或叙述通常应当被解释为包括单独的[a]、单独的[b]、单独的[c],或[a]、[b]和[c]的任意组合。另外,使用序数术语(例如“第一”、“第二”等)来限定具有多个相同名称的实例的项目的术语不一定指示实例之间的优先级、优先顺序或时间顺序,除非另有指示,而是此类序数术语可能仅用于区分单独的实例。

考虑本文中公开的本发明的说明书或实践,本发明的其他实施方案对于本领域技术人员来说将是显而易见的。本说明书和示例意在仅被视作是示例性的,其中本发明的真实范围和精神由所附权利要求书所指示。

技术分类

06120116114900