用于在存储器管理中去重的参考块至参考集的聚合的制作方法

文档序号:12718437阅读:295来源:国知局
用于在存储器管理中去重的参考块至参考集的聚合的制作方法与工艺

本申请关联于美国专利申请第_号,提交于__,题为“pipelined reference set construction and use in memory management(管线参考集构造和在存储器管理中的使用)”;美国专利申请第_号,提交于__,题为“integration of reference sets with segment flash management(参考集与段闪存管理的集成)”;以及美国专利申请第_号,提交于__,题为“garbage collection for reference sets in flash storage systems(用于闪速存储系统中的参考集的垃圾收集)”,其每一个通过引用整体并入本文。

技术领域

本公开涉及管理存储设备中数据块集。特别地,本公开描述了用于存储应用和数据去重的基于相似性的内容匹配。更特别地,本公开涉及将参考数据块聚合为参考数据集,用于闪存管理的去重。



背景技术:

基于相似性的内容匹配可应用于文档,用于标识文档集之间的相似性,与精确匹配相反。内容匹配的概念先前使用于搜索引擎实现和建立基于动态随机存取存储器(DRAM)的高速缓存,诸如基于散列查找的去重,其仅标识精确匹配,与标识近似匹配的基于相似性的去重相反。然而,在存储设备中利用基于相似性的去重需要解决与参考数据集管理和构造相关的问题。

已有方法通过比较输入数据集的每个对应数据块与存储器中存储的数据块执行数据块聚合。此外,已有方法执行输入数据集的每个数据块的精确内容匹配。精确内容匹配包括比较关联于输入数据集的每个数据块的内容与存储于存储器的数据块的内容。具有精确匹配的数据块被编码,而不具有精确匹配的数据块不被编码并且被独立地存储在存储器中。这些已有方法包括多个缺陷,诸如性能方面、需要过多的处理时间、需要使用大量的不必要的存储器、一个或多个可包括相同内容的最小变型的数据块之间的冗余数据等。因此,本公开通过有效地将参考块聚合为参考数据集来解决关联于存储设备中数据聚合的问题。



技术实现要素:

本公开涉及用于硬件有效数据管理的系统和方法。根据本公开的主题的一个创新方面,系统具有一个或多个处理器和存储器,所述存储器存储指令,当执行时使系统:从数据存储中检索参考数据块;基于标准将参考数据块聚合为第一集;基于包括该参考数据块的第一集的一部分来生成参考数据集;并且在该数据存储中存储该参考数据集。

总体上,本公开描述的主题的另一创新方面可实现于一种方法,其包括:从数据存储中检索参考数据块;基于标准将该参考数据块聚合为第一集;基于包括该参考数据块的第一集的一部分来生成参考数据集;并且在该数据存储中存储该参考数据集。

一个或多个方面的其他实现包括对应系统、装置和计算机程序,配置以执行编码于计算机存储设备的该方法的动作。

这些和其他实现的每一个可选地包括如下特征的一个或多个。

例如,该操作进一步包括:接收包括新数据块集的数据流;对新数据块集执行分析;基于该分析通过关联新数据块集与该参考数据集来编码新数据块集;更新记录表,其将新数据块集的每个编码数据块关联于该参考数据集的对应参考数据块;确定不同于该参考数据集的新集的数据块;将不同于该参考数据集的新集的数据块聚合为第二集;基于包括不同于该参考数据集的新数据块集的数据块的第二集而生成第二参考数据集;分配使用计数变量至第二参考数据集;以及在该数据存储中存储第二参考数据集。

例如,该特征可包括:包括标识新数据块集和该参考数据集之间是否存在相似性的分析;包括关联于包括于该参考数据集的多个参考数据块的预定义阈值的标准;以及包括关联于要存储于该数据存储的多个参考数据集的阈值的标准。

这些实现在多方面特别地有利。例如,本文描述的技术可用于将参考数据块聚合为参考数据集,用于存储器管理中的去重。

应当理解,本公开使用的语言在原理上被选择用于可读和指导性目的,而非限制本文公开主题的范围。

附图说明

本公开以示例的形式说明,并且在附图中以限制的形式,其中相同参考数字用于指代相似元素。

图1是说明根据本文描述的技术用于管理存储设备中的参考数据集的参考数据块的示例系统的高级框图。

图2是说明根据本文描述的技术的示例存储控制器单元的框图。

图3A是说明根据本文描述的技术用于管理存储设备中的参考数据块的示例系统的框图。

图3B是说明根据本文描述的技术的示例数据精简(data reduction)单元的框图。

图4是根据本文描述的技术用于生成参考数据集的示例方法的流程图。

图5是根据本文描述的技术用于聚合数据块为参考数据集的示例方法的流程图。

图6A-图6C是根据本文描述的技术用于基于变化数据流适应性将参考块聚合为参考数据集的示例方法的流程图。

图7是根据本文描述的技术用于在管线体系结构中编码数据块的示例方法的流程图。

图8A和图8B是根据本文描述的技术用于在管线体系结构中生成参考数据集的示例方法的流程图。

图9是根据本文描述的技术用于在闪速存储管理中跟踪参考数据集的示例方法的流程图。

图10是根据本文描述的技术用于更新关联于参考数据集的计数变量的示例方法的流程图。

图11是根据本文描述的技术用于分配编码数据段至非暂存数据存储中的新位置的示例方法的流程图。

图12是根据本文描述的技术用于编码关联于闪存管理和垃圾收集集成的数据段的示例方法的流程图。

图13是根据本文描述的技术用于引退关联于闪存管理的参考数据集的示例方法的流程图。

图14A为说明用于压缩参考数据块的现有技术示例的框图。

图14B为说明用于去重参考数据块的现有技术示例的框图。

图15为说明根据本文描述的技术的增量编码的示例图形表示。

图16为说明根据本文描述的技术的近似编码的示例图形表示。

图17为说明根据本文描述的技术的参考数据块的增量和自压缩的示例图形表示。

图18A和图18B为说明根据本文描述的技术利用闪存管理的垃圾收集的参考块集的跟踪和引退的示例性图形表示。

具体实施方式

用于提供有效数据管理体系结构的系统和方法在下文描述。特别地,在本公开,用于管理存储设备(特别是闪存存储设备)中的参考数据块集的系统和方法在下文描述。尽管本公开的系统、方法描述于使用闪存存储的特定系统体系结构的环境,应当理解,系统和方法可应用于其他体系结构和硬件组织。

概览

本公开描述了基于相似性的内容匹配,用于存储应用和数据去重。特别地,通过解决参考数据集管理和构造的问题来提供用于有效数据管理的改进方法,本公开克服了当前方法在数据管理中的缺陷。更特别地,本公开对提供于本公开的解决方案提供了附加的改进,其使实体在其备份存储中维持数据,同时减少成本、存储空间和功率。

本公开不同于现有的实现,其至少解决如下问题:在存储应用中计算基于相似性的匹配;以唯一方式对输入数据块应用压缩和去重;解决改变参考数据集的问题,其取决于利用新一代参考数据集存储改变数据流;以及集成参考数据集的管理与存储设备(诸如但不限于闪速存储设备)中的用于空间和运行时效率的垃圾收集。

此外,基于相似性的去重算法通过推断关联于参考数据块的内容的抽象表示来操作。因此,参考数据块可用作模板,用于去重其他(即,未来)输入数据块,导致被存储的总数据量的降低。当去重数据块从存储被召回时,精简的(例如,去重)表示从存储被检索并与参考数据块提供的信息合并以重新生成原始数据块。

参考数据块抽象地表示数据流,因此,由于数据流的特性随时间变化,参考数据块集也会变化。随着时间,一部分参考数据块停止关联于参考数据集,而新数据块加入参考数据集,其导致生成新参考数据集。由去重系统实现的数据精简可作为度量来估计参考数据集是否为输入数据流的良好表示。例如,其可通过将每个去重数据块相对于被编码(例如精简)的内容而记录参考数据块来完成。该记录然后可被使用,以使在存储数据块的后续召回时,其可立即正确组装为原始形式。其呈现了以下需求,即参考数据块仍可用,只要至少一个数据块潜在地需要其进行重构。需求可具有多个结果。第一,参考数据块的当前集可响应于数据流被呈现用于存储而随时间变化;然而,可能过去的参考数据块仍仅由参考数据集的存储数据块的较小子集使用。第二,存储设备所应用的所有参考数据块的集在设备生命周期连续地增长。这导致集在存储设备的多年生命周期的无界增长。由于闪速存储设备的特性,无界增长关联于在存储设备中存储所有数据始终是不可行的。尽管闪速存储设备相比于传统存储设备和硬盘驱动在速度和随机读取访问上是优越的,闪速存储设备在生命周期内具有存储容量限制和持久性降低。闪速存储设备的持久性降低由闪速存储设备关联于写擦除周期的容差,而闪速存储设备的性能受到闪速存储设备中的自由可写数据块的可用性影响。

用于引退不再可用的旧参考数据块的方法需要被应用。方法可包括关联于参考数据块的参考计数,通过跟踪数据块依赖参考数据块和/或参考数据块集的次数,以使其可确定参考数据块何时不再被数据块依赖并且可由此从集中引退。并且,在新数据块加入存储时,参考计数需要递增以反映参考数据块和/或参考数据集的使用计数。类似地,当数据块被删除(或重写)时,对应参考数据块和/或参考数据集的使用计数需要被递减。关键在于,使用计数被正确同步并且可靠地保持以防止设备关闭或电源故障。

A.用于在存储器管理中去重的参考块至参考集的聚合

一种实现参考数据块聚合为参考数据集的方法可由聚合共享相似度的参考数据块为参考数据集来执行。参考数据集需要用于去重算法的预定义数量的数据块以合适地执行。例如,去重算法需要具有某一数量的参考数据块(例如10,000)以执行数据编码/精简。因此,本公开利用包括一个或多个数据块(例如参考数据块)的参考数据集工作,而非独立地利用每个参考数据块进行。

参考数据集可具有如下特性:1)参考数据集可用于在一段时间主动运行去重算法并且2)随着数据流变化,新参考数据集可被建立/生成。然而,不再主动使用的先前参考数据集可被保留,因为先前存储数据块依赖该参考数据集用于数据召回。接下来,3)使用计数可相对于参考数据集而不是每个参考数据块来保持。其又可显著降低使用计数的管理开销。最后,4)一旦参考数据集存在,其可在使用计数降至零之后被引退(即,不再有数据块依赖它)。

在某些实施例,根据系统的资源约束,参考数据集的数据块可被定制以包括参考数据集中数据块的预定义数量以及参考数据集的最大数量。在进一步实施例,系统可包括聚集系统,其中多个不同的参考数据集在聚集中共享以获得更宽的范围。

B.管线参考集构造和存储器管理中的使用

管线参考数据集构造和使用可通过执行重叠参考数据集的构造和使用来实现。例如,在当前参考数据集用于去重输入数据流(例如数据块序列)时;新参考数据集可被并行构造。本公开不需要新参考数据集重新开始,替代地新参考数据集可利用当前参考数据集中参考数据块的普通子集构造,同时增加响应于数据流的变化而构造的新参考数据块。以这种方式,当去重算法认为当前参考数据集不再有效时,其可开始利用新参考数据集。上述两个创新的参考数据集管理技术可被使用并与闪存管理存储的去重相集成。

C.利用段闪存管理的参考集的集成

利用闪存管理的实现本公开的一个实施例可由将依赖参考数据集的数据块聚合为段来执行。段指代闪速存储的块,其可按序填充并擦除为单元。每个数据块可关联于参考数据集(以及其中的特定参考数据块)并且可被依赖用于数据召回。因此,系统可跟踪参考数据集的使用(即参考数据块的组),而不是由每个输入数据块单独跟踪参考数据块的使用。在基于闪存的存储系统,输入数据块按序写入闪存,因此,写入时间上接近的数据块中存在特定地点。在某些实施例,段可指代多个(例如2个)闪速存储的存储器中的参考数据集。

此外,段可以标识符标记(例如参考数据集标识符),从而系统可跟踪哪个段利用哪个参考数据集。其可导致可观的效率-信息的量可由三个等级减少(每个段控制数千个数据块)并且由于段等级管理已在闪存管理固有,跟踪附加的信息片段(参考集使用)的额外的负载为最小。因此,参考数据集经由简单整数标识符紧凑地表示,并且参考数据集可由多种数据段使用(而非独立的数据块)和紧密地跟踪。在一个实施例,系统使用16个集,其每个可包括16,384个参考数据块。参考数据块可为4KB(千字节)大小并且标识符(例如,参考数据集标识符)可为4比特大小。标识符可关联于闪存的每个段,其为256MB大小。其允许参考数据集的空间有效和低开销管理。

D.用于闪速存储系统中的参考集的垃圾收集

在某些实施例,利用闪存管理和垃圾收集实现本公开可如下文所述来执行。在垃圾收集时间,有效数据块被移动至闪速存储中的新位置。重要提示,闪存段的数据块被按序填充并使用同一参考数据集。由于垃圾收集算法工作于闪存的每个段,垃圾收集算法对包含其中的数据块做出如下两个决定之一。该决定可基于关联于段的参考数据集的状态(例如参考数据集R)。垃圾收集算法做出的决定可为:1)如果参考数据集(例如参考数据集R)继续被可用,则移动精简的数据块至闪存的新位置和/或2)如果参考数据集(例如参考数据集R)被期望马上引退,则利用参考数据集(例如R)重构原始数据块并且利用较新的参考数据集对其重新去重。结果,一旦参考数据集(例如R)置于引退的路径中,参考数据集(例如R)的使用计数将稳定减少,并且一旦其达到零(即,没有剩余活动用户),R可被引退并且其对应标识符变为可重用。

在某些实施例,当参考数据集准备好引退时,垃圾收集算法可使参考数据集利用垃圾收集算法更快地引退。在进一步实施例,本公开可在数据块总体执行统计分析以确定普通参考数据集并使用其调整参考数据集选择算法。

因此,本公开提供参考数据集跟踪和闪存管理之间的集成-每段参考数据集以改进存储并处理参考数据集信息的开销。并且,参考数据集处理和垃圾收集之间的集成使系统引退较旧的参考数据集并跟踪参考数据集在整个存储设备中的使用,用于通过决定在运行时是否复制现有精简的数据块或利用不同的参考数据集将其再次精简来优化数据移动。

系统

图1是说明用于管理存储设备的参考数据集的参考数据块的示例系统的高级框图。在描述的实施例,系统100可包括客户端设备102a、102b至102n;存储控制器单元106和数据存储仓库110。在说明的实施例,系统100的这些实体经由网络104可通信地耦合。然而,本公开不限于该配置,多种不同的系统环境和配置可被应用并在本公开的范围内。其他实现可包括附加的或更少的计算设备、服务和/或网络。应当理解,图1以及其他附图用于说明实施例,引用号码或数字之后的字母表示,例如“102a”为元素或组件的特定引用,其由特定参考数字指代。在参考数字出现于文本而没有跟随的字母的事件中,例如“102”,应当理解,其为通用参考数字的元素或组件的不同的实施例的通用引用。

在某些实施例,系统100的实体可使用基于云的体系结构,其中一个或多个计算机函数或例程由远程计算系统和设备在本地计算设备的请求下执行。例如,客户端设备102可为具有硬件和/或软件资源的计算设备,并且可访问其他计算设备和资源在网络104中提供的硬件和/或软件资源,包括例如,其他客户端设备102、存储控制器单元106和/或数据存储仓库110或系统100的其他任何实体。

网络104可为传统类型,有线或无线,并且可具有多个不同的配置,包括星形配置、令牌环配置或其他配置。此外,网络104可包括局域网(LAN)、广域网(WAN)(例如,互联网)和/或多个设备(例如,存储控制器单元106、客户端设备102等)可通信的其他互联数据路径。在某些实施例,网络104可为对等网络。网络104还可耦合于或包括电信网络的部分,用于利用多种不同的通信协议发送数据。在进一步实施例,网络104可包括蓝牙TM(或低能量蓝牙)通信网络或蜂窝通信网络,用于发送和接收数据,包括经由短消息传递服务(SMS)、多媒体消息传递服务(MMS)、超文本传输协议(HTTP)、直接数据连接、WAP、电子邮件等。尽管图1的示例说明了一个网络104,在实现中一个或多个网络104可连接系统100的实体。

在某些实施例,客户端设备102(任何或所有102a、102b至102n)为具有数据处理和数据通信能力的计算设备。在说明的实施例,客户端设备102a、102b至102n分别经由信号线118a、118b至118n可通信地耦合于网络104。客户端设备102a、102b至102n可为包括一个或多个存储器和一个或多个处理器的任何计算设备,例如,膝上型计算机、桌面计算机、平板计算机、移动电话、个人数字助理(PDA)、移动电子邮件设备、便携式游戏机、便携式音乐播放器、具有一个或多个处理器嵌入其中或与其耦合的电视或能够进行存储请求的其他任何电子设备。客户端设备102可执行应用,其对数据存储仓库110作出存储请求(例如,读取、写等)。客户端设备可直接耦合于包括独立的存储设备(例如,存储设备112a至112n)(未示出)的数据存储仓库110。

客户端设备102还可包括图形处理器;高分辨率触摸屏幕;物理键盘;前面和后面照相机;模块;存储可利用固件的存储器;以及多种物理连接接口(例如,USB、HDMI、耳机插孔等)等的一个或多个。附加地,用于管理客户端设备102的硬件和资源的操作系统,用于提供访问硬件和资源的应用的应用编程接口(API),用于生成和显示用户交互和输入的接口的用户界面模块(未示出),以及应用,包括例如操作文档、图像、电子邮件的应用,以及网络浏览的应用等,可被存储并可操作于客户端设备102。尽管图1的示例包括三个客户端设备,102a、102b和102n,应当理解,任何数量的客户端设备102可出现于系统。

存储控制器单元106可为硬件,其包括(微)处理器、存储器和网络通信能力,例如,如以下参考图2更详细地描述。存储控制器单元106经由信号线120耦合于网络104,用于与系统100的其它组件通信和协同。在某些实施例,存储控制器单元106经由网络104发送数据至客户端设备102a、102b至102n的一个或多个和/或数据存储仓库110,并从中接收数据。在一个实施例,存储控制器单元106经由信号线124直接发送数据至数据存储仓库110和/或存储设备112a至112n并从中接收数据。尽管,示出了一个存储控制器单元,应当理解,多个存储控制器单元可被适用于分布式体系结构或其他。为该应用的目的,由系统执行的系统配置和操作描述于单个存储控制器单元106的环境。

在某些实施例,存储控制器单元106可包括存储控制引擎108,用于提供有效数据管理。存储控制引擎108可提供计算功能、服务和/或资源,以发送、接收、读取、写入和转换来自系统100的其他实体的数据。应当理解,存储控制引擎108不限于提供以上所述的功能。在多种实施例,存储设备112可直接连接于存储控制器单元106或可通过独立的控制器(未示出)和/或由信号线122经由网络104连接。存储控制器单元106可为计算设备,配置以形成客户端设备106可用的某些或所有存储空间。如描述于示例系统100,客户端设备102可经由网络104或直接(未示出)耦合于存储控制器单元106。

此外,系统100的客户端设备102和存储控制器单元106可包括附加的组件,其在图1未示出以简化附图。并且,在某些实施例,并非所有示出的组件都会出现。进一步,多种控制器、块和接口可以任何合适的形式实现。例如,存储控制器单元可采用以下一个或多个的形式,例如,微处理器或处理器和计算机可读介质,其存储可由(微)处理器、逻辑门、开关、专用集成电路(ASIC)、可编程逻辑控制器和嵌入微控制器执行的计算机可读程序代码(例如,软件或固件)。

数据存储仓库110和可选的数据存储仓库220可包括非暂存计算机可用(例如,可读、可写等)介质,其可为任何非暂存装置或设备,其可包含、存储、通信、传播或传输指令、数据、计算机程序、软件、代码、例程等,用于由或结合处理器处理。尽管本公开将数据存储仓库110/220称为闪存,应当理解,在某些实施例,数据存储仓库110/220可包括非暂存存储器,诸如动态随机存取存储器(DRAM)设备,静态随机存取存储器(SRAM)设备或某些其他存储器设备。在某些实施例,数据存储仓库110/220还可包括非易失性存储器或相似的永久存储设备和媒体,例如,硬盘驱动、软盘磁盘驱动、压缩盘只读存储器(CD-ROM)设备、数字多样性盘只读存储器(DVD-ROM)设备、数字多样性盘随机存取存储器(DVD-RAM)设备、数字多样性盘可重写(DVD-RW)设备、闪存设备或某些其他非易失性存储设备。

图2是说明配置以实现本文描述的技术的存储控制器单元106的示例的框图。如所描述,存储控制器单元106可包括通信单元202、处理器204、存储器206、数据存储仓库220和存储控制引擎108,其由通信总线224可通信地耦合。应当理解,以上配置由示例形式提供,并且多个进一步配置也被考虑并且是可能的。

通信单元202可包括一个或多个接口设备,用于与网络104和系统100的其它实体和/或组件有线和无线连接,包括例如,客户端设备102和数据存储仓库110等。例如,通信单元202可包括但不限于CAT型接口;无线收发器,用于利用Wi-FiTM;蜂窝通信等发送和接收信号;USB接口;其多种组合等。在某些实施例,通信单元202可将处理器204链接至网络104,其又可耦合于其他处理系统。通信单元202可利用(包括例如本文其他部分讨论的)多种标准通信协议提供至网络104和系统100的其他实体的其他连接。

处理器204可包括算术逻辑单元、微处理器、通用控制器或某些其他处理器阵列,以执行计算并提供电子显示器信号至显示器设备。在某些实施例,处理器204为具有一个或多个处理核的硬件处理器。处理器204耦合于总线224,用于与另一组件通信。处理器204处理数据信号并且可包括多种计算体系结构,包括复杂指令集计算机(CISC)体系结构、精简指令集计算机(RISC)体系结构或实现指令集组合的体系结构。尽管图2的示例仅示出了单个处理器,然而也可包括多个处理器和/或处理核。应当理解,其他处理器配置也是可能的。

存储器206存储可由处理器204执行的指令和/或数据。在某些实施例,存储器206可存储可由处理器204执行的指令和/或数据。存储器206还能够存储其他指令和数据,包括例如,操作系统、硬件驱动器、其他软件应用、数据库等。存储器206可耦合于总线224,用于与系统100的处理器204和其他组件通信。

存储器206可包括非暂存计算机可用(例如,可读、可写等)介质,其可为任何非暂存装置或设备,其可包含、存储、通信、传播或传输指令、数据、计算机程序、软件、代码、例程等,用于由或结合处理器204处理。在某些实施例,存储器206可包括非暂存存储器,诸如动态随机存取存储器(DRAM)设备、静态随机存取存储器(SRAM)设备、闪存或某些其他存储器设备。在某些实施例,存储器206还包括非易失性存储器或相似的永久存储设备和媒体,例如,硬盘驱动器、软盘磁盘驱动器、压缩盘只读存储器(CD-ROM)设备、数字多样性盘只读存储器(DVD-ROM)设备、数字多样性盘随机存取存储器(DVD-RAM)设备、数字多样性盘可重写(DVD-RW)设备、闪存设备或某些其他非易失性存储设备。

总线224可包括通信总线,用于在计算设备组件之间或在计算设备之间传输数据,网络总线系统包括网络104或其部分、处理器网格、其组合等。在某些实施例,客户端设备102和存储控制器单元106可经由结合总线224实现的软件通信机构协同和通信。软件通信机构可包括和/或实现例如,进程间通信、本地函数或过程调用、远程过程调用、基于网络的通信、安全通信等。

存储控制引擎108为软件、代码、逻辑或例程,用于提供有效数据管理。如描述于图2,存储控制引擎108可包括数据接收模块208、数据精简单元210、数据跟踪模块212、数据聚合模块214、数据引退模块216、更新模块218和同步模块222。

在某些实施例,组件208、210、212、214、216、218和/或222电子地可通信地相互耦合于通信单元202、处理器204、存储器206和/或数据存储仓库220,用于协同和通信。这些组件208、210、212、214、216、218和222还经由网络104耦合于系统100的其他实体(例如客户端设备102、存储设备112)用于通信。在某些实施例,数据接收模块208、数据精简单元210、数据跟踪模块212、数据聚合模块214、数据引退模块216、更新模块218和同步模块222为可由处理器204执行的指令集或包括于一个或多个定制处理器的逻辑,以提供其相应功能。在其它实施例,数据接收模块208、数据精简单元210、数据跟踪模块212、数据聚合模块214、数据引退模块216、更新模块218和同步模块222存储于存储器206并且可由处理器204访问和执行以提供其相应功能。在任何该实施例,数据接收模块208、数据精简单元210、数据跟踪模块212、数据聚合模块214、数据引退模块216、更新模块218和同步模块222适用于与处理器204以及计算设备200的其他组件协同和通信。

在一个实施例,数据接收模块208接收输入数据和/或检索数据,数据精简单元210降低/编码数据流,数据跟踪模块212跟踪系统100中的数据,数据聚合模块214聚集包括数据块的参考数据集,数据引退模块216利用垃圾收集引退数据块和/或包括数据块的参考数据集,更新模块218更新关联于数据流的信息,而同步模块222提供可靠性至存储控制器单元106的一个或多个其他组件。模块、例程、特征、属性、方法以及其他方面的特定命名和划分不是强制性的或至关重要的,而实现本发明或其特征的机制可具有不同的名称、划分和/或格式。

数据接收模块208为软件、代码、逻辑或例程,用于接收输入数据和/或检索数据。在一个实施例,数据接收模块208为可由处理器204执行的指令集。在另一实施例,数据接收模块208存储于存储器206并可由处理器204访问和执行。在任一实施例,数据接收模块208适用于与处理器204以及包括数据精简单元210的其他组件的计算设备200的其他组件协同和通信。

数据接收模块208从一个或多个数据存储(诸如但不限于系统100的数据存储仓库110/220)接收输入数据和/或检索数据。输入数据可包括但不限于数据流。在某些实施例,数据接收模块208从客户端设备102接收数据流。数据流可包括数据块集(例如,新数据流的当前数据块,来自存储的参考数据块等)。(例如数据流的)数据块集可关联于但不限于文档、文件、电子邮件、消息、博客和/或客户端设备102执行和渲染和/或存储于存储器的任何应用。此外,数据块集可包括诸如经由客户端设备的应用(诸如电子表格应用、表单、杂志)、制品、书籍、联系方式、数据库、部分数据库、表等而执行和渲染的用户可读文件。在其它实施例,数据流可关联于检索自数据存储(诸如数据存储仓库220和/或闪存存储设备(未示出))的数据块集(例如参考数据块)。

数据精简单元210为软件、代码、逻辑或例程,用于降低/编码数据流,如本文其他部分进一步讨论。在一个实施例,数据精简单元210为可由处理器204执行的指令集。在另一实施例,数据精简单元210存储于存储器206并可由处理器204访问和执行。在任一实施例,数据精简单元210适用于与处理器204以及计算设备200的其他组件协同和通信。在进一步实施例,数据精简单元210可包括参考块缓冲器302、数据输入缓冲器304、签名指纹计算引擎306、匹配引擎308、编码引擎310、压缩散列表模块312、参考散列表模块314、压缩缓冲器316和数据输出缓冲器318,如描述于图3B。

数据跟踪模块212为软件、代码、逻辑或例程,用于跟踪数据。在一个实施例,数据跟踪模块212为可由处理器204执行的指令集。在另一实施例,数据跟踪模块212存储于存储器206并可由处理器204访问和执行。在任一实施例,数据跟踪模块212适用于与处理器204以及包括数据精简单元210的其他组件的计算设备200的其他组件协同和通信。

数据跟踪模块212可跟踪来自系统100的一个或多个数据存储的数据块,数据存储可特定地包括但不限于数据存储仓库110的存储设备112、客户端设备102的存储器(未示出)和/或数据存储仓库220。在某些实施例,数据跟踪模块212可跟踪关联于系统100中的数据块的计数。计数可由数据跟踪模块212通过跟踪一个或多个数据块依赖参考数据块和/或参考数据集的次数来跟踪。此外,数据跟踪模块212可传输跟踪的计数至计算设备200的一个或多个其他组件,用于确定参考数据集的参考数据块何时不再被数据块依赖并且由此可被引退。在一个实施例,数据跟踪模块212跟踪关联于非暂存数据存储(例如,闪存、数据存储仓库110/220)的存储器的段,用于一个或多个客户端设备102的数据召回。例如,客户端设备102可渲染一个或多个应用和请求访问关联于包括存储于非暂存数据存储(即闪存)的数据块(例如数据块集)的段内容,数据跟踪模块212然后可跟踪段和/或参考数据集被召回(即数据召回)的次数以渲染关联于请求的一个或多个内容,如本文其他部分更详细地讨论。

数据聚合模块214为软件、代码、逻辑或例程,用于聚集参考数据集。在一个实施例,数据聚合模块214为可由处理器204执行的指令集。在另一实施例,数据聚合模块214存储于存储器206并可由处理器204访问和执行。在任一实施例,数据聚合模块214适用于与处理器204以及包括数据精简单元210的其他组件的计算设备200的其他组件协同和通信。

在某些实施例,数据聚合模块214与计算设备200的一个或多个其他组件协同,确定一个或多个数据块对存储于对应存储器(诸如非暂存闪存数据存储(例如闪存可为一个或多个存储设备112))的段的一个或多个参考数据集的依赖性。一个或多个数据块对一个或多个参考数据集的依赖性可反映一个或多个数据块对一个或多个参考数据集用于召回的常规重构/编码依赖性。例如,数据块(即编码数据块)可依赖参考数据集用于重构原始数据块以使关联于原始数据块(未编码数据块)的原始信息可被提供用于呈现至客户端设备(例如客户端设备102)。

在进一步实施例,数据聚合模块214标识由客户端设备102的多个数据块所依赖的一个或多个不同的参考数据集。数据聚合模块214可基于一个或多个参考数据集生成聚集,以使不同的参考数据集在聚集中共享以获得更宽范围。在一个实施例,不同的参考数据集可为被系统100的数据块频繁地数据召回的参考数据集(例如,高于最小、最大和/或阈值的范围的数据召回)。

数据引退模块216为软件、代码、逻辑或例程,用于引退参考数据集。在一个实施例,数据引退模块216为可由处理器204执行的指令集。在另一实施例,数据引退模块216存储于存储器206并可由处理器204访问和执行。在任一实施例,数据引退模块216适用于与处理器204以及包括数据精简单元210的其他组件的计算设备200的其他组件协同和通信。

数据引退模块216可确定存储于一个或多个数据存储(诸如但不限于数据存储110/220)的一个或多个参考数据集是否满足引退。在一个实施例,参考数据集基于使用计数变量(例如参考计数)满足引退。例如,当对应使用计数变量递减至特定阈值时,参考数据集可满足引退。

在某些实施例,当参考数据集的使用计数变量的计数递减为零时,参考数据集满足引退。使用计数变量为零可表示没有数据块或数据块集依赖(例如参考)对应存储的参考数据集,用于重新生成。例如,输入数据流不包括依赖用于重构(即未编码)的参考数据集的编码数据块(例如压缩/去重的数据块)。在进一步实施例,数据引退模块216可使参考数据集基于使用计数变量而引退。例如,参考数据集可得到特定计数并且在达到特定计数之后,数据引退模块216可通过在参考数据集应用垃圾收集算法(和/或本领域公知的其他任何数据存储清理算法)而使参考数据集引退。数据引退模块216的附加操作在本文其他部分讨论。

更新模块218为软件、代码、逻辑或例程,用于更新关联于数据流的信息。在一个实施例,更新模块218为可由处理器204执行的指令集。在另一实施例,更新模块218存储于存储器206并可由处理器204访问和执行。在任一实施例,更新模块218适用于与处理器204以及包括数据精简单元210的其他组件的计算设备200的其他组件协同和通信。

更新模块218可接收数据块并更新关联于在数据存储(例如数据存储仓库110/220)中存储的记录表中的数据块的一个或多个标识符。记录表可包括但不限于存储于数据库的具有行和列的表、索引表等。在一个实施例,接收数据块可为编码/精简的数据块。在进一步实施例,更新模块218可更新关联于参考数据集的标识符。标识符可包括但不限于指针。指针可关联于数据块和/或参考数据集并可包括附加的信息,诸如但不限于关于数据块和/或参考数据集的全局信息。在某些实施例,指针可包括信息,诸如指向存储中特定参考数据集的数据块的总数。

在一个实施例,更新模块218从数据跟踪模块212接收关联于来自客户端设备的数据召回的信息。数据召回可关联于数据存储的段的存储器的一个或多个参考数据集。更新模块218然后可更新关联于段的参考数据集的段首部(例如标识符),所述段关联于数据召回。在进一步实施例,更新模块218更新段首部的一部分,其可包括诸如段被数据召回的次数的信息。更新模块218的附加的操作在本文其他部分讨论。

同步模块222可为软件、代码、逻辑或例程,用于提供可靠性至存储控制器单元106的一个或多个其他组件,诸如但不限于数据接收模块208、数据精简单元210、数据跟踪模块212、数据聚合模块214、数据引退模块216和更新模块218。在一个实施例,同步模块222为可由处理器204执行的指令集。在另一实施例,同步模块222存储于存储器206并可由处理器204访问和执行。在任一实施例,同步模块222适用于与处理器204以及包括数据精简单元210的其他组件的存储控制器单元106的其他组件协同和通信。

在一个实施例,同步模块222可防止诸如在存储控制器单元106的一个或多个组件接收、检索、编码、更新、修改和/或存储数据期间的设备关闭(例如客户端设备关闭)和/或电源故障时的数据中断。例如,同步模块222可提供可靠性至更新模块218,而更新模块218更新/修改关联于数据/参考块和/或参考数据集的使用计数变量(例如参考计数)。在进一步实施例,同步模块222可与数据精简单元210的一个或多个缓冲器并行工作。例如,同步模块222可传输数据流至数据输入缓冲器304以在处理期间在系统100中产生电源故障的情况下暂时存储数据流的数据块,该数据流的数据块不会被违背。

图3A是说明了示例硬件有效数据管理系统的框图300A,配置以实现本文介绍的技术。如描述于图3A,数据精简单元210接收参考块,处理参考块并输出参考块的编码/精简的版本并在数据存储仓库220中存储编码的参考数据块。此外,图3A所描述的说明包含本公开的关键点,其包括但不限于基于相似性的内容匹配,用于存储应用和数据去重。基于相似性的内容匹配可应用于多个文档中,用于检测和标识一个或多个文档之间的相似性,与标识文档集中的精确匹配相反。本公开不同于现有实现(如图14A和14B所示),其至少解决如下问题:1)在存储应用中利用基于相似性的匹配,2)以唯一方式应用压缩和去重至数据块,3)解决改变参考数据集的问题,其取决于通过利用迭代参考数据集存储来改变数据流(流量)以及4)集成参考数据集管理与垃圾收集,用于存储设备诸如(闪速存储设备)中的空间和运行时效率。

图3B是说明示例数据精简单元210的框图,配置以实现本文描述的技术。如描述于图3,数据精简单元210可包括参考块缓冲器302、数据输入缓冲器304、签名指纹计算引擎306、匹配引擎308、编码引擎310、压缩散列表模块312、参考散列表模块314、压缩缓冲器316和数据输出缓冲器318。

在某些实施例,组件302、304、306、308、310、312、314、316和318电子地可通信地耦合用于与通信单元202、处理器204、存储器206和/或数据存储仓库220相互协同和通信。这些组件302、304、306、308、310、312、314、316和318还经由网络104耦合用于与系统100的其他实体(例如客户端设备102)通信。在进一步实施例,参考块缓冲器302、数据输入缓冲器304、签名指纹计算引擎306、匹配引擎308、编码引擎310、压缩散列表模块312、参考散列表模块314、压缩缓冲器316和数据输出缓冲器318为可由处理器204执行的指令集或包括于一个或多个定制处理器的逻辑,以提供其相应功能。在其它实施例,参考块缓冲器302、数据输入缓冲器304、签名指纹计算引擎306、匹配引擎308、编码引擎310、压缩散列表模块312、参考散列表模块314、压缩缓冲器316和数据输出缓冲器318存储于存储器206并且可由处理器204访问和执行以提供其相应功能。在任何这些实施例,参考块缓冲器302、数据输入缓冲器304、签名指纹计算引擎306、匹配引擎308、编码引擎310、压缩散列表模块312、参考散列表模块314、压缩缓冲器316和数据输出缓冲器318适用于与处理器204以及计算设备200的其他组件协同和通信。

参考块缓冲器302为逻辑或例程,用于临时性存储数据流。在一个实施例,参考块缓冲器302为可由处理器204执行的指令的集。在另一实施例,参考块缓冲器302存储于存储器206并且可由处理器204访问和执行。在任一实施例,参考块缓冲器302适用于与处理器204以及包括数据精简单元210的其他组件的计算设备200的其他组件协同和通信。

在一个实施例,存储控制引擎108从数据存储仓库220检索参考数据块,用于操作和处理参考数据块。存储控制引擎108然后可传输参考数据块至参考块缓冲器302用于临时存储。在参考块缓冲器302中存储参考数据块临时性地提供检索参考数据块和处理参考数据块之间的系统速率稳定性。在一个实施例,存储控制引擎108从数据存储仓库220检索参考数据集,用于与计算设备200的一个或多个组件协同处理参考数据集。在处理参考数据集之前,存储控制引擎108和/或计算设备200的一个或多个其他组件可传输参考数据集至参考块缓冲器302用于临时性存储。参考块缓冲器302可为队列,其可包括队列中的一个或多个参考数据块和/或一个或多个参考数据集,用于由计算设备200的一个或多个组件处理。

数据输入缓冲器304为逻辑或例程,用于临时性存储输入数据流的一个或多个数据块。在一个实施例,数据输入缓冲器304为可由处理器204执行的指令集。在另一实施例,数据输入缓冲器304存储于存储器206并可由处理器204访问和执行。在任一实施例,数据输入缓冲器304适用于与处理器204以及包括数据精简单元210的其他组件的计算设备200的其他组件协同和通信。

在一个实施例,存储控制引擎108从客户端设备(例如客户端设备10)接收一个或多个数据块,用于处理输入数据流的数据块。存储控制引擎108然后可传输接收数据块至数据输入缓冲器304用于临时存储。在数据输入缓冲器304中存储数据块临时性提供接收数据块和处理数据块之间的系统处理效率。特别地,如果响应于从多个客户端设备接收某些输入数据流,存储控制引擎108的处理速率被增加(例如以等级),数据输入缓冲器可作为队列调度。例如,数据输入缓冲器304可包括队列调度,其将关联于多个客户端设备的一个或多个数据块排队,以使存储控制引擎108基于对应队列调度中位置的数据块来处理数据块。

签名指纹计算引擎306为软件、代码、逻辑或例程,用于生成和分析关联于数据流的数据块的标识符。在一个实施例,签名指纹计算引擎306为可由处理器204执行的指令集。在另一实施例,签名指纹计算引擎306存储于存储器206并可由处理器204访问和执行。在任一实施例,签名指纹计算引擎306适用于与处理器204以及包括数据精简单元210的其他组件的计算设备200的其他组件协同和通信。

在一个实施例,签名指纹计算引擎306接收包括一个或多个数据块的数据流用于分析。签名指纹计算引擎306可生成数据流的一个或多个数据块的每一个的标识符。在某些实施例,签名指纹计算引擎306可生成参考数据集的参考标识符,参考数据集包括一个或多个参考数据块。标识符可包括信息诸如但不限于关联于数据流的每个数据块的指纹和/或数字签名。

签名指纹计算引擎306可通过对数据存储(例如数据存储仓库110,220)进行语法分析来分析关联于输入数据流相关的数据块的标识符信息(例如,数字签名、指纹等)的信息,用于匹配于输入数据流的数据块的一个或多个参考数据块和/或参考数据集(即包括一个或多个参考数据块的参考数据集),如本文其他部分讨论。例如,签名指纹计算引擎306生成输入数据流的数据块的指纹。签名指纹计算引擎306然后通过语法分析和比较输入数据流的数据块的指纹与关联于在存储中存储的多个参考数据块和/或参考数据集的一个或多个指纹来分析指纹并确定匹配是否存在。在进一步实施例,签名指纹计算引擎306可传输分析结果至匹配引擎308用于进一步处理。

匹配引擎308为软件、代码、逻辑或例程,用于标识数据之间的相似性。在一个实施例,匹配引擎308为可由处理器204执行的指令集。在另一实施例,匹配引擎308存储于存储器206并可由处理器204访问和执行。在任一实施例,匹配引擎308适用于与处理器204以及包括数据精简单元210的其他组件的计算设备200的其他组件协同和通信。数据可包括但不限于一个或多个数据块、参考数据块和/或参考数据集,其可关联于经由客户端设备由应用渲染的文件、文档、电子邮件消息。

在一个实施例,与签名指纹计算引擎306协同的匹配引擎308应用基于相似性的算法以检测输入数据和先前在存储中存储的数据之间的相似性。在某些实施例,匹配引擎308通过比较关联于输入数据和先前在存储中存储的数据的近似散列(例如散列概略)来标识输入数据和先前存储的数据之间的相似性。近似散列可为关联于由指纹计算引擎306生成的标识符的信息的一部分。

基于相似性的算法可用于检测输入数据流的数据块的近似散列和关联于参考数据集的近似散列之间的相似性。在进一步实施例,近似散列可反映关联于数据块和/或参考数据集的内容的概略。例如,如果参考数据集的参考数据块和/或输入数据流的数据块集被稍微修改,概略可生成自趋于保持的参考数据集/数据块的最大值。因此,如果输入数据流的数据块基于对应近似散列(例如散列概略)与已有参考数据集相似,其可传输至编码引擎310用于相对于已有参考数据集来编码输入数据流的数据块,如本文其他部分讨论。

在其它实施例,匹配引擎308应用基于相似性的算法至在数据存储中存储的一个或多个参考数据块,用于从参考数据块生成参考数据集。例如,如果存储中的参考数据块基于一标准(诸如对应近似散列(例如散列概略))彼此相似,参考数据块可被聚合为参考数据集,如本文其他部分讨论。

编码引擎310为软件、代码、逻辑或例程,用于编码数据。在一个实施例,编码引擎310为可由处理器204执行的指令集。在另一实施例,编码引擎310存储于存储器206并可由处理器204访问和执行。在任一实施例,编码引擎310适用于与处理器204以及包括数据精简单元210的其他组件的计算设备200的其他组件协同和通信。

在一个实施例,编码引擎310编码关联于数据流的数据块。数据流可关联于文件,其中数据流的数据块为文件的内容定义块。在某些实施例,编码引擎310接收包括数据块的数据流并利用存于非暂存数据存储(诸如但不限于数据存储仓库110)的参考数据集来编码数据流的每个数据块。

编码引擎310与计算设备200的一个或多个其他组件协同,可基于关联于参考数据集和数据块的标识符的信息之间的相似性确定编码数据块的参考数据集。标识符信息可包括信息,诸如数据块/参考数据集的内容、内容版本(例如修订)、关联于内容修改的日历日期、数据大小等。在进一步实施例,编码数据流的数据块可包括应用编码算法至数据流的数据块。编码算法的非限制示例,可包括但不限于去重/压缩算法。在一个实施例,编码引擎310可传输数据流的编码数据块至压缩缓冲器316和/或数据输出缓冲器318。

在其它实施例,编码引擎310可基于参考数据集编码数据块集,同时生成新参考数据集,包括参考数据块的子集和关联于数据流的数据块的集。新参考数据集的参考数据块的子集可关联于当前存储于数据存储的对应参考数据集,如本文其他部分讨论。

压缩散列表模块312为软件、代码、逻辑或例程,用于更新关联于编码数据块的信息。在一个实施例,压缩散列表模块312为可由处理器204执行的指令集。在另一实施例,压缩散列表模块312存储于存储器206并可由处理器204访问和执行。在任一实施例,压缩散列表模块312适用于与处理器204和包括数据精简单元210的其他组件的计算设备200的其他组件协同和通信。

在某些实施例,压缩散列表模块312可包括桶阵列。桶阵列可为关联于存储设备的存储区域,诸如存储桶阵列中的数据块、参考数据块和参考数据集的闪速存储。桶阵列可为有限大小的阵列。在进一步实施例,压缩散列表模块312利用散列函数存储数据。数据可包括但不限于输入数据流的数据块、参考数据集的参考数据块等。在一个实施例中的压缩散列表模块312对数据使用散列函数算法,用于在散列表中存储数据。在其它实施例,散列表可被存储、检索和保持在存储中,诸如但不限于数据存储仓库110。

在一个实施例,压缩散列表模块312可生成参考数据指针(例如标识符),用于编码的数据块,如本文其他部分讨论。关联于编码的数据块的参考数据指针可引用用于编码的数据块的在数据存储中存储的对应参考数据集。在进一步实施例,参考数据指针可由系统100的一个或多个其他组件保持。关联于一个或多个编码的数据块的参考数据指针可稍后被使用,用于从存储(例如数据存储仓库110)中参考和/或检索对应参考数据块和/或参考数据集并用于利用参考数据集和/或参考数据块重构关联于所接收数据流的每个数据块和/或数据块集。

参考散列表模块314为软件、代码、逻辑或例程,用于更新关联于参考数据块的信息。在一个实施例,参考散列表模块314为可由处理器204执行的指令集。在另一实施例,参考散列表模块314存储于存储器206并可由处理器204访问和执行。在任一实施例,参考散列表模块314适用于与处理器204以及包括数据精简单元210的其他组件的计算设备200的其他组件协同和通信。

在某些实施例,参考散列表模块314更新存储于数据存储仓库110的记录表,其中记录表关联编码的数据块与对应参考数据集。在其它实施例,参考散列表314更新关联于参考数据集的指针。关联于参考数据集的指针可包括信息,诸如但不限于关于参考数据集的全局信息和指向参考数据集的数据块的总数。参考散列表模块314的附加功能在本公开全文中讨论。

压缩缓冲器316为逻辑或例程,用于暂时存储压缩数据流。在一个实施例,压缩缓冲器316为可由处理器204执行的指令集。在另一实施例,压缩缓冲器316存储于存储器206并可由处理器204访问和执行。在任一实施例,压缩缓冲器316适用于与处理器204以及包括数据精简单元210的其他组件的计算设备200的其他组件协同和通信。

在一个实施例,压缩散列表模块312从编码引擎310检索编码的(例如被压缩/被精简的)参考数据块,用于编码的参考数据块的进一步处理。在某些实施例,编码引擎310可传输编码的参考数据块至压缩缓冲器316,用于暂时存储。在压缩缓冲器316中暂时存储编码的参考数据块提供接收编码的参考数据块和编码的参考数据块的进一步处理之间的系统稳定性。在某些实施例,编码引擎310编码参考数据集并传输编码参考数据集至压缩缓冲器316。在其它实施例,编码引擎310编码一个或多个关联于数据流的数据块并传输编码数据块至压缩缓冲器316用于暂时存储。压缩缓冲器316可为队列,其可包括队列中的一个或多个参考数据块、参考数据集和/或数据块,用于由计算设备200的一个或多个组件处理。

数据输出缓冲器318为逻辑或例程,用于暂时存储处理数据流。在一个实施例,数据输出缓冲器318为可由处理器204执行的指令集。在另一实施例,数据输出缓冲器318存储于存储器206并可由处理器204访问和执行。在任一实施例,数据输出缓冲器318适用于与处理器204以及包括数据精简单元210的其他组件的计算设备200的其他组件协同和通信。

在一个实施例,压缩散列表模块312和/或参考散列表模块314从编码引擎310接收编码的(例如被压缩/被精简的)数据流。在某些实施例,编码引擎310可传输编码数据流至数据输出缓冲器318用于暂时存储。编码数据流可包括但不限于一个或多个参考数据块、参考数据集和/或当前数据块。此外,在数据输出缓冲器318中存储编码数据流兑现了接收编码数据流和编码数据流的进一步处理之间的系统交换稳定性。在某些实施例,数据输出缓冲器318可为队列计划,用于通过计算设备200的一个或多个组件进一步处理一个或多个参考数据块、参考数据集和/或数据块。

图4是用于生成参考数据集的示例方法400的流程图。方法400可开始于从非暂存数据存储中检索402参考数据块。在某些实施例,数据接收模块208从非暂存数据(例如,闪存、数据存储仓库110/220)接收参考数据块。

接下来,方法400可基于标准聚合404参考数据块至集继续。在某些实施例,数据精简单元210可从数据接收模块208接收参考数据块并执行其功能。该标准可包括但不限于参考数据块之间的相似度。例如,参考数据块可关联于文件,其中文件被划分为基于内容定义的语块并且参考数据块的每个参考块关联于基于内容定义的语块。在一个实施例,参考数据块基于对应参考数据块之间文件的基于内容定义的语块来共享相似度。

在一个实施例,相似度可关联于标识符,诸如但不限于生成并分配至每个参考数据块的近似散列(例如数字签名和/或指纹)。近似散列可包括散列值,其可生成自较长数据串的较小数字。散列值可在数据大小上比参考数据块明显更小。在某些实施例,近似散列由算法通过以下方式生成,即两个参考数据块不可能具有精确匹配散列值。并且,关联于参考数据块的标识符可存储于数据库的表中,例如数据存储仓库110中。

在进一步实施例,签名指纹计算引擎306与匹配引擎308的协同可基于标准通过查询数据存储并比较关联于每个参考数据块的近似散列来聚合一个或多个参考数据块,以确定对应近似散列的副本是否已存在于数据存储。在某些实施例,匹配引擎308可聚合共享相似匹配近似散列的一个或多个参考数据块。例如,两个参考数据块(例如参考数据块A和参考数据块B)可关联于文档,然而,参考数据块A反映文档的较早版本;参考数据块B反映具有修改的文档的较晚版本。因此,由于参考数据块A和参考数据块B共享关联于文档的内容的相似度,参考数据块A和参考数据块B可聚合为集。在某些实施例,步骤404的操作可由与系统100的一个或多个其他实体协同的签名指纹计算引擎306和匹配引擎308执行,如本文其他部分讨论。

接下来,方法400可基于集通过生成406参考数据集继续。集可包括但不限于共享一个或多个参考数据块的近似散列之间的相似度的参考数据块。在一个实施例,编码引擎310可接收聚合的参考数据块并基于聚合的参考数据块生成参考数据集。参考数据集的参考数据块作为模型,通过利用包括参考数据集的模型编码未来输入数据块,用于未来输入数据块。这种基于模型的方法可导致降低存储于例如,数据存储仓库110的存储设备112a至112n的总量。在某些实施例,步骤406的操作可由与系统100的一个或多个其他实体协同的签名指纹计算引擎306和匹配引擎308执行,如本文其他部分讨论。

方法400然后可在非暂存数据存储(例如闪存、数据存储仓库110/220)中通过存储408参考数据集继续。在某些实施例,以上讨论可关联输入数据流的数据块而应用,如以下进一步讨论。在某些实施例,步骤408的操作可由与数据输出缓冲器318和/或系统100的一个或多个其他实体协同的编码引擎310执行,如本文其他部分讨论。

图5是用于聚合数据块为参考数据集的示例方法500的流程图。方法500可开始于接收502包括数据块集的数据流。在某些实施例,数据接收模块208从客户端设备106接收数据流并传输数据流至数据输入缓冲器304以执行其操作。包括数据块集的数据流关联于但不限于由客户端设备102执行和渲染的文档、电子邮件、应用(例如媒体应用、游戏应用、文档编辑应用等)等。例如,数据流可关联于文件,其中数据流的数据块为文件的基于内容定义的语块。在某些实施例,步骤502执行的操作可由与系统100的一个或多个其他实体协同的数据接收模块208执行。

接下来,方法500通过编码504数据块集的每个数据块继续。在某些实施例,与签名指纹计算引擎306和/或匹配引擎308协同的编码引擎310利用存储于非暂存数据存储(诸如但不限于数据存储仓库110)的参考数据集编码数据块集的每个数据块。进一步,数据块集的每个数据块的编码可包括编码算法。编码算法的非限制示例可包括实现去重/压缩的专有编码算法。

例如,编码引擎310可利用编码算法标识关联于数据流的数据块集的每个数据块与存储于数据存储(例如数据存储仓库110)的参考数据集的之间的相似性。相似性可包括但不限于数据内容(例如每个数据块的基于内容定义的语块)和/或关联于数据块集的每个数据块的标识符信息和数据内容和/或关联于参考数据集的标识符信息之间的相似度。

在某些实施例,签名指纹计算引擎306和/或匹配引擎308可使用基于相似性的算法来检测近似散列(例如概略),其具有相似的数据块的属性并且参考数据集具有相似近似散列(例如概略)。因此,如果数据块集基于对应近似散列(例如概略)相似于在存储中存储的已有参考数据集,其可相对于已有参考数据集编码。编码引擎310然后可传输数据块集的编码数据块至压缩缓冲器316和/或数据输出缓冲器318。在某些实施例,在步骤504执行的操作可由与数据精简单元210和/或系统100的一个或多个其他实体协同的编码引擎310执行。

方法然后可通过更新506关联数据块集的每个编码数据块至对应参考数据集的记录表继续。在一个实施例,编码引擎310可传输数据块集的编码数据块至压缩散列表模块312和/或参考散列表模块314以执行其操作。压缩散列表模块312和/或参考散列表模块314可更新存储于数据存储仓库110的记录表,其中记录表将每个编码数据块与存储于存储(即数据存储仓库110)的对应参考数据集关联。

在一个实施例,压缩散列表模块312可生成用于编码数据块的参考数据指针。关联于编码数据块的参考数据指针可参考在数据存储中存储的对应参考数据集,其用于编码数据块。在某些实施例,参考数据指针可链接至在数据存储中存储的记录表的参考数据集的对应标识符。在进一步实施例,一个或多个编码数据块可共享相同参考数据指针,其参考用于编码数据块集的一个或多个编码数据块的对应参考数据集。步骤506执行的操作可由编码引擎310和/或压缩散列表模块312和/或参考散列表模块314与数据精简单元210和/或系统100的一个或多个其他实体的协同执行。

方法500然后可由在非暂存数据存储(例如闪存、数据存储仓库110/220)中存储508编码数据块集继续。存储编码数据块集在某些实施例可为用于编码数据块集的参考数据集的被精简的版本(例如数据大小上更小)。例如,数据块被精简的版本可包括关联于数据块的首部(例如参考指针)和压缩/去重数据内容。在某些实施例,步骤508的操作可由编码引擎310与数据输出缓冲器318和/或系统100的一个或多个其他实体的协同执行,如本文其他部分讨论。

图6A-6C是用于随数据流变化将参考块聚合为参考数据集的示例方法的流程图。现参见图6A,方法600可开始于接收602包括新数据块集的数据流。新数据块集可包括但不限于内容数据诸如文档、电子邮件附件和关联于客户端设备(客户端设备102)执行和渲染的应用的信息。在一个实施例,新数据块集表示数据先前未被存储和/或关联于在数据存储仓库110和/或220中存储的当前参考数据集。在某些实施例,步骤602执行的操作可由数据接收模块208与数据输入缓冲器304和/或数据精简单元210的一个或多个其他实体的协同执行。

接下来,方法600可由对关联于数据流的新数据块集执行604分析继续。在某些实施例,分析可由签名指纹计算引擎306执行。例如,数据接收模块208可传输新数据块集至签名指纹计算引擎306。签名指纹计算引擎306可响应于接收数据流对新数据块集的内容执行分析。此外,分析可包括一个或多个算法,用于确定反映在新数据块集的抽象内容的内容和/或生成新数据块集的每个数据块的标识符(例如,指纹、散列值)。确定新数据块集的内容的算法的非限制示例可包括但不限于使用具有对应于指纹的至少一个重叠的块的集的算法。在另一实施例,确定新数据块集的内容的算法可包括,统计地聚集输入数据块的指纹并从每个聚集标识一个代表性数据块。

在进一步实施例,指纹计算引擎306可分配通用标识符(例如通用指纹或通用数字签名)至新数据块集。通用标识符可关联于散列值,其可利用散列算法生成。指纹计算引擎306检测新数据块集的重复数据部分,聚合重复数据并分配关联于散列值的通用标识符至聚合的重复数据。在某些实施例,散列值可为数字指纹或数字签名,其专门地标识新数据块集的每个数据块和/或专门地标识集(即新数据块集)。在进一步实施例,关联于包括新数据块集的数据流的标识符可存储于数据库的表例如,数据存储仓库110中。

此外,近似散列可由与匹配引擎308协同指纹计算引擎306使用,用于分析新数据块集的冗余。在一个实施例,如果关联于两个或多个数据块的近似散列满足预定义范围(例如0至1),两个或多个数据块被确定为相似。例如,近似散列可为0和1之间的数字,以使当近似度接近1时,两个或多个数据块之间的内容可能大致相同。在进一步实施例,近似散列可为关联于新数据块集的数据块的较小概略。进一步,新数据块集的分析可包括基于相似性的匹配算法,由指纹计算引擎306和/或匹配引擎308执行,其包括对数据存储仓库110语法分析。数据存储仓库110的语法分析可包括比较新数据块集的近似散列与关联于在数据存储仓库110中存储的一个或多个参考数据集的近似散列。在某些实施例,步骤604的操作可由签名指纹计算引擎306与数据精简单元210的一个或多个其他实体协同执行。

方法600然后可通过标识606相似性是否存在于新数据块集和至少一个或多个参考数据集之间继续。在某些实施例,匹配引擎308协同签名指纹计算引擎306可基于分析来标识新数据块集与存储于非暂存数据存储的一个或多个参考数据集之间是否存在相似性。例如,匹配引擎308可比较一个或多个参考数据集和/或存储于数据存储诸如数据存储仓库110的参考数据集的段的近似散列与关联于新数据块集的近似散列。在某些实施例,步骤606的操作可由匹配引擎308与数据精简单元210的一个或多个其他实体协同执行。方法600然后可进入608并基于执行于606的操作而确定是否存在相似性。

如果存在相似性,方法600可进入610。例如,匹配引擎308可确定新数据块集的近似散列与存储于数据存储(例如数据存储仓库110)的一个或多个参考数据集共享相似度。接下来,方法600可基于近似散列利用存储于数据存储(例如闪存,数据存储仓库110/220)的对应参考数据集来编码610新数据块集的每个数据块。

例如,编码引擎310与106的一个或多个其他组件协同,可基于近似散列确定新集的数据块具有近似于存储中所存储的参考数据集的数据块的相似性。近似散列可表示数据块的概略和参考数据块的概略,并且基于其概略之间的相似度可确定新数据集的数据块和存储中的参考数据块在内容上是否相似。在一个实施例,匹配引擎308传输信息至编码引擎310,所述信息表示新数据块集的近似散列和一个或多个参考数据集的近似散列之间的相似匹配。

编码引擎310可基于接收自匹配引擎308的信息编码610新数据块集的每个数据块。在某些实施例,新数据块集可分段为数据块的区块,其中数据块的区块可被专门地编码。在一个实施例,编码引擎310可利用编码算法(例如去重/压缩算法)来编码新数据块集的每个数据块。编码算法可包括但不限于增量编码、近似编码和自增量压缩。

此外,与参考数据集共享相似度的编码数据块可包括编码引擎310,生成和分配指针用于新数据块集的每个对应数据块。未来指针可由存储控制引擎108使用以从存储(例如数据存储仓库110/220)参考和/或检索对应数据块和/或数据块集,用于数据块的重新生成。在一个实施例,一个或多个数据块可共享相同指针。例如,新数据块集的一个或多个数据块可参考存储于数据存储仓库110/220的相同参考数据集,而非在数据存储仓库110/220独立地存储一个或多个数据块,编码引擎308存储一个或多个数据块的压缩版本,其包括参考同一参考数据集的指针(例如参考数据指针)。在另一实施例,如果新数据块集类似于已有参考数据集,编码引擎310可存储增量,该增量表示参考数据集与从中被编码的新数据块集之间的差。步骤610的操作可由编码引擎306与压缩缓冲器316和数据精简单元210的一个或多个其他实体协同执行。

方法600然后可通过更新612记录表继续,该记录表关联新数据块集的每个编码数据块与关联于参考数据集的对应参考数据块。在一个实施例,压缩散列表模块312接收编码数据块并更新存储于数据存储(例如数据存储仓库110/220)的记录表中每个编码数据块的一个或多个指针。在其它实施例,压缩散列表模块312接收编码数据块集并更新关联于在数据存储(例如数据存储仓库110/220)中存储的记录表的编码数据块集的指针。关联于一个或多个编码数据块的指针可被稍后使用,以从存储(例如数据存储仓库110/220)中参考和/或检索对应参考数据块和/或参考数据集并用于重构关联于接收数据流的每个数据块和/或数据块集。

接下来,方法600从图6A的框612至图6C的框622通过基于利用参考数据集编码新数据块集的每个数据块递增622参考数据集的使用计数变量继续。在一个实施例,参考散列表模块314从编码引擎310接收标示符,即一个或多个参考数据集已用于编码一个或多个数据块和/或关联于包括新数据块集的数据流的数据块集。参考散列表模块314然后可记录每个数据块和/或数据块集至对应参考数据集并递增对应参考数据集的使用计数变量。使用计数变量可表示多个数据块和/或数据块集,其参考(例如利用指针指向存储中的参考数据集)存储中的特定参考数据集。在某些实施例,步骤622的操作可由编码引擎306与参考散列表模块314、更新模块218和/或数据精简单元210的一个或多个其他实体协同执行。

方法600可由基于关联于参考数据集的使用计数变量分析624参考数据集是否满足引退继续。在一个实施例,参考散列表模块314可确定参考数据集在预定持续时间内未被一个或多个数据块和/或数据块集参考。因此,如果参考数据集的参考数据块在预定持续时间不再被召回用于重新生成数据块,关联于参考数据集的使用计数变量被修改(即递减)。预定持续时间可包括默认分配和/或管理员定义的阈值。在一个实施例,参考散列表模块314应用使用计数引退算法(例如,垃圾收集算法)至在存储中存储的每个参考数据集。在预定持续时间被满足之后,并且参考数据集在预定持续时间期间未被一个或多个数据块或关联于数据流的数据块集参考,使用计数引退算法可自动递减和/或递增关联于参考数据集的使用计数变量的计数。在其它实施例,响应于参考数据集关联于数据召回,使用计数引退算法可递增关联于参考数据集的使用计数变量的计数。数据召回可表示客户端设备102请求渲染文档,其可需要一个或多个数据块被重构。步骤624的操作是可选的,并且由参考散列表模块314与编码引擎306和数据精简单元210的一个或多个其他实体协同执行。

方法600然后可进入626并确定对应参考数据集的引退是否满足。如果参考数据集满足引退,方法600可通过基于使用计数变量引退628满足引退的参考数据集继续。在一个实施例,基于递减为特定阈值的使用计数变量参考散列表模块314确定满足引退的参考数据集。在某些实施例,当参考数据集的使用计数变量的计数递减为零时,参考数据集可满足引退。使用计数变量为零可表示没有数据块或数据块集依赖和/或参考对应参考数据集。例如,没有数据块(例如压缩/去重的数据块)依赖参考数据集用于重构数据块的原始版本。步骤628的操作是可选的并由参考散列表模块314与数据引退模块216和数据精简单元210的一个或多个其他实体协同执行。然后方法600可结束。

然而,如果在框626没有参考数据集满足引退,方法600可进入确定630附加的输入数据流是否出现。如果存在附加的输入数据流,方法600可返回图6A的步骤602,否则方法600可结束。

回到图6A的步骤608,如果没有相似性存在,方法600可进入图6B的框614,由基于标准将新数据块集的数据块聚合为集继续,并且其中数据块不同于当前存储在存储(例如数据存储仓库110)的参考数据集。不同于当前在存储中存储的参考数据集的数据块可包括关联于与在存储中存储的参考数据集的相关的内容不同的内容的数据块。标准可包括但不限于关联于每个数据块的内容、管理员定义的规则、考虑数据块和/或数据块集的数据大小、关联于每个数据块的散列的随机选择等。例如,数据块集可基于预定义范围的每个对应数据块的数据大小而被聚合起来。在某些实施例,一个或多个数据块可基于随机选择而聚合。在进一步实施例,多个标准可用于聚合。步骤614的操作可由匹配引擎308与数据聚合模块214和计算设备200的一个或多个其他实体协同执行。

接下来,方法600可基于包括不同于当前存储于非暂存数据存储(例如,数据存储仓库110/220)的参考数据集的新数据块集的数据块的集,通过生成616新参考数据集继续。在一个实施例,匹配引擎308传输集至编码引擎310,而编码引擎310然后生成新参考数据集,其可包括满足标准的一个或多个数据块。例如,新参考数据集可基于满足所分配的预定义范围内的数据大小的一个或多个数据块而生成。在一个实施例,编码引擎310基于共享一个或多个数据块的每一个之间的相似度以内的内容的一个或多个数据块而生成新参考数据集。在某些实施例,响应于生成新参考数据集,签名指纹计算引擎306可生成标识符(例如,指纹、散列值等),用于新参考数据集。步骤616的操作可由匹配引擎308与数据聚合模块214和计算设备200的一个或多个其他实体协同执行。

方法600然后可由为新参考数据集分配618使用计数变量继续。在一个实施例,编码引擎310为新参考数据集分配使用计数变量。新参考数据集的使用计数变量可表示关联于数据块或数据块集参考新参考数据集次数的数据召回数量。在进一步实施例,使用计数变量可为关联于参考数据集的散列和/或首部的一部分。当新参考数据集的使用计数变量的计数递减为特定值(例如,零)时,新参考数据集可满足引退。在某些实施例,初始计数可由管理员分配至使用计数变量。步骤618的操作可由参考散列表模块314与数据引退模块216和数据精简单元210的一个或多个其他实体协同执行。

接下来,方法600然后可在非暂存数据存储中存储620新参考数据集。例如,编码引擎310可生成新参考数据集并存储在数据存储仓库110和/或220中。方法600然后可进入图6C的框630并确定附加的输入数据流是否出现。如果存在附加的输入数据流,方法600可返回图6A的步骤602,否则方法600可结束。

图7是用于在管线体系结构中编码数据块的示例方法700的流程图。方法700可通过接收702包括数据块集的数据流而启动。例如,数据接收模块208从客户端设备(例如,客户端设备102)接收包括数据块集的数据流。在某些实施例,数据流可关联于但不限于内容数据,诸如由客户端设备执行和渲染的文档文件和电子邮件附件。在进一步实施例,步骤702的操作可由数据接收模块208与数据输入缓冲器304和系统100的一个或多个其他实体协同执行,如本文其他部分讨论。

接下来,方法700可继续从非暂存数据存储检索704参考数据集。

在一个实施例,匹配引擎308响应于对数据流执行分析而检索参考数据集。例如,签名指纹计算引擎306可对数据流的内容中执行分析,包括集的每个数据块的内容和/或相互关联于数据块集的内容。在一个实施例,分析可包括散列值和/或指纹匹配算法,由指纹计算引擎306执行,其包括比较关联于包括数据块集的数据流的散列值和/或指纹与关联于在数据存储仓库110中存储的一个或多个参考数据集的散列值和/或指纹。在某些实施例,匹配引擎308通过比较关联于数据流和先前在存储中存储的参考数据集的近似散列(例如,概略),标识数据流和先前在存储中存储的参考数据集之间的相似性。在进一步实施例,步骤704的操作可由签名指纹计算引擎306与匹配引擎308和数据精简单元210的一个或多个其他实体协同执行。

方法700可继续基于参考数据集编码706数据块集。编码可包括但不限于通过对数据执行去重、压缩等的一个或多个来修改数据。在某些实施例,编码引擎310基于参考数据集编码数据块集,同时生成包括参考数据块子集和关联于数据流的数据块集的新参考数据集。在一个实施例,参考数据块子集可关联于对应参考数据集。例如,在编码数据块集之前,编码引擎310可分析存储于数据存储110/220的一个或多个参考数据集。

在某些实施例,参考数据集的分析可基于一个或多个预定义条件。例如,预定义条件可包括标识参考数据集中的普通参考数据块,所述普通参考数据块为被系统100的至少一个实体召回的用于重构原始数据块(即,在被编码之前返回原始状态的数据块或数据块集)多于阈值次数(例如,每分、每小时、每天、每周、每月、每年)的数据(高于阈值)。在某些实施例,普通参考数据块可被标记或分配表示相对重要性的标识符。标识符可包括但不限于与包括关于数据块的信息的数据块相关联的指针、首部。进一步,相对重要性可表示与作为同一参考数据集的一部分的邻接参考数据块相比,高于阈值的关联于参考数据集的对应参考数据块被利用用于重构数据块。

方法700然后可继续利用存储于非暂存数据存储的参考数据集编码706数据块集。利用参考数据集编码的数据块集的相似度与关联于数据块集的内容和参考数据集之间的相似度共享。在一个实施例,编码引擎310基于参考数据集编码新数据块集,同时生成包括一个或多个普通参考数据块和新数据流的数据块子集的第二参考数据集。在进一步实施例,参考数据块子集包括预定量的数据块。在其它实施例,新数据块集的编码基于新数据块集和参考数据集之间的相似度。

进一步,编码引擎310可编码与存储于非暂存数据存储的一个或多个参考数据集共享相似度的数据块集,同时生成新参考数据集,其包括:1)不与当前在存储中存储的一个或多个参考数据集共享相似度的编码数据块;和2)关联于在存储中存储的一个或多个参考数据集的普通参考数据块。因此,新参考数据集同时包括1)不与当前存储的一个或多个参考数据集共享相似度的数据块和2)关联于在存储中存储的一个或多个参考数据集的普通参考数据块。其功能以支持系统100主动构造新参考数据集用于改变数据流,因为参考块抽象表示数据流。由于参考数据块抽象表示数据流,随着数据流的特性改变,参考块集也随时间变化,期望某些块停止作为参考集的成员,同时新块被增加,产生新参考集。因此,重要度量用于确定参考集是否为输入数据流的较好的表示,这对主动管理参考集是重要的。否则,系统可包括在存储中存储的旧数据,并且不具有存储输入的相关数据的能力。在某些实施例,步骤706的操作可由签名指纹计算引擎306与匹配引擎308、编码引擎310和数据精简单元210的一个或多个其他实体协同执行。

接下来,方法700可在非暂存数据存储中存储708数据块集和新参考数据集。

在一个实施例,压缩散列表模块312和参考散列表模块314可更新和/或存储关联于表中数据块集和新参考数据集的对应标识符,用于参考和检索数据块集和/或新参考数据集。在某些实施例,编码引擎310与压缩缓冲器316和数据输出缓冲器318协同,在数据存储仓库110/220存储数据块集和新参考数据集。

图8A和8B是用于在管线体系结构生成参考数据集的示例方法的流程图。现参见图8A,方法800可开始于接收802数据块集。在一个实施例,数据接收模块208与数据输入缓冲器304协同,从一个或多个客户端设备(例如,客户端设备102)接收数据块集。数据块集可关联于,但不限于由客户端设备(例如,客户端设备102)的应用渲染的文档文件,其类型诸如但不限于word doc、pdf、jpeg等。接下来,方法800可继续执行804数据块集的相似性分析。在某些实施例,分析可由签名指纹计算引擎306执行。例如,数据接收模块208可传输数据块集至签名指纹计算引擎306以执行其相应功能。签名指纹计算引擎306可对数据块集的内容执行分析。分析可包括,用于确定关联于数据块集的内容的一个或多个算法。在某些实施例,指纹计算引擎306可基于每个块的内容生成用于数据块集的每个数据块的标识符。

在进一步实施例,指纹计算引擎306可为数据块集分配通用标识符。标识符可关联于散列值,其可利用散列算法生成。在某些实施例,关联于数据块集的标识符可存储于数据库,例如,数据存储仓库110。在其它实施例,标识符可为数字指纹或数字签名,其专门地分类数据块集的每个数据块和/或专门地分类集(即,数据块集)。标识符可由指纹计算引擎306和/或匹配引擎308使用,用于分析数据块集的冗余。例如,分析可包括由指纹计算引擎306应用基于匹配的算法,其包括比较数据块集的标识符与关联于在数据存储仓库110中存储的一个或多个参考数据集的标识符。

接下来,方法800继续标识806相似性是否存在于数据块集和至少一个或多个参考数据集之间。在某些实施例,匹配引擎308与签名指纹计算引擎306协同,可基于分析而标识数据块集和存储于非暂存数据存储的一个或多个参考数据集之间是否存在相似性。例如,匹配引擎308可响应于从指纹计算引擎306接收的数据而生成数据块集的近似散列,其中没有精确匹配在数据块集和在存储中存储的参考数据集之间被标识。匹配引擎308然后可比较存储于数据存储诸如数据存储仓库110的一个或多个参考数据集的近似散列与关联于数据块集的近似散列。在一个实施例,匹配引擎308可比较存储于数据存储(诸如数据存储仓库110)的一个或多个参考数据集的近似散列与关联于数据块集的每个数据块的独立的近似散列。在某些实施例,步骤806的操作可由匹配引擎308与数据精简单元210的一个或多个其他实体协同执行。

方法800然后可进入808,用于确定是否存在相似性。例如,匹配引擎308可基于标识符(例如,近似散列)确定数据块集的内容与在数据存储中存储的一个或多个参考数据集共享相似度。相似度可包括输入数据流的数据块集与在存储中存储的参考数据集的数据块集之间相似内容的阈值。在一个实施例,相似度可通过比较数据块的近似散列(即,概略)与参考数据集的近似散列来确定。如果相似性存在,方法800可进入块810。接下来,方法800可利用存储于非暂存数据存储的对应参考数据集编码810数据块集的每个数据块。对应参考数据集可为与一个或多个输入数据流的数据块共享相似度的参考数据集。例如,输入数据集的数据块可包括文档的修正内容(即,文档当前版本),其先前存储于存储并由参考数据集关联。输入数据集可基于满足阈值(即,文档‘输入数据集’的当前版本的概略近似于先前版本‘参考数据集’的概略)而保存与参考数据集(即,文档先前保存的版本)的相似度。如果阈值被满足编码引擎308可使用参考数据集以编码输入数据集(即,压缩去重),以使重复副本不被存储,但压缩版本被存储)。在某些实施例,数据块集包括数据块的段/区块,其中数据块的段/区块可利用参考数据集专门地编码。

匹配引擎308可传输信息至编码引擎310,信息表示数据块集的内容和一个或多个参考数据集之间的相似匹配。编码引擎310然后可基于接收自匹配引擎308的信息编码数据块集的每个数据块。在一个实施例,编码引擎310可利用编码算法(诸如但不限于增量编码、近似编码和自增量压缩)编码数据块集的每个数据块。在某些实施例,与参考数据集共享相似度的编码数据块可包括编码引擎310,生成和分配用于数据块集的每个对应数据块的指针。指针可由存储控制引擎108使用以从存储(例如,数据存储仓库110/220)中参考和/或检索对应参考数据块和/或参考数据块集用于未来的数据召回。在进一步实施例,数据块集的一个或多个数据块可参考存储于数据存储仓库110/220的相同参考数据集,而非独立地在数据存储仓库110/220中存储一个或多个数据块,编码引擎308存储一个或多个数据块的压缩版本,其包括参考参考数据集的指针(例如,参考数据指针)。步骤810的操作可由编码引擎306与压缩缓冲器316和数据精简单元210的一个或多个其他实体协同执行。

方法800然后可继续更新812关联数据块集的每个编码数据块与对应参考数据集的记录表。在一个实施例,压缩散列表模块312接收编码数据块并更新存储于数据存储(例如,数据存储仓库110/220)的记录表的每个编码数据块的一个或多个指针。在其它实施例,压缩散列表模块312接收编码数据块集并更新关联于在数据存储(例如,数据存储仓库110/220)中存储的记录表的编码数据块集的指针。

方法800可从图8A的块812转移至图8B的块822,以确定822附加的数据块是否被输入。如果存在附加的输入数据块,方法800可返回步骤802(图8A),否则方法800可结束。

回到图8A的步骤808,如果不存在相似性,方法800可通过基于标准将数据块集的数据块聚合为集而进入图8B的块814,并且其中数据块不同于先前存储于存储(例如,数据存储仓库110/220)的参考数据集。标准可包括但不限于关联于每个数据块的内容、考虑数据块和/或数据块集的数据大小、关联于每个数据块的散列的随机选择等。例如,数据块集可基于预定义范围内每个对应数据块的数据大小聚合起来。步骤814的操作可由匹配引擎308与数据聚合模块214和计算设备200的一个或多个其他实体协同执行。

接下来,方法800可继续基于一个或多个预定参数标识816关联于一个或多个参考数据集的参考数据块子集。在一个实施例,编码引擎310可分析和标识关联于在数据存储110/220中存储的一个或多个参考数据集的参考数据块子集。分析可包括标识一个或多个参考数据集的参考数据块,其由系统100的一个或多个实体频繁地数据召回(即,具有数据召回阈值和/或阈值范围的参数),用于重构原始数据块(即,在被编码之前返回原始状态的数据块或数据块集)。在某些实施例,参考块可被标记或分配表示相对重要性的标识符。与作为同一参考数据集的一部分的其他邻接参考数据块相比,相对重要性可表示高于阈值的关联于参考数据集的对应参考数据块被利用,用于重构数据块。编码引擎310然后可将被标记或分配表示相对重要性的标识符的参考数据块聚合为参考数据块子集。在某些实施例,参考块基于关联于每个参考数据块的内容的相似度而被分组为子集。

方法800然后可生成818新参考数据集,同时编码与一个或多个参考数据集共享相似度的数据块集中的数据块。在一个实施例,可利用和一个或多个参考数据集共享相似度的数据块集的数据块串行生成新参考数据集。在某些实施例,编码引擎310生成新参考数据集,同时编码与一个或多个参考数据集共享相似度的数据块集的数据块。新参考数据集可包括来自一个或多个参考数据集的参考数据块子集和不同于先前存储于非暂存数据存储(例如,数据存储仓库110/220)的参考数据集的数据块集的数据块。

例如,编码引擎310可利用参考数据集编码数据块集,其中利用参考数据集编码的数据块集与参考数据集共享相似度内容。编码引擎310在编码与一个或多个参考数据集共享相似度的数据块集时还可同时生成新参考数据集,其包括不与一个或多个参考数据集共享相似度(即,不同的内容)的编码数据块以及关联于一个或多个参考数据集的参考数据块子集。

因此,新参考数据集包括数据块(即,包括不同于先前存储的一个或多个参考数据集的内容)和关联于在非暂存数据存储中存储的一个或多个参考数据集的参考数据块子集。在某些实施例,步骤818的操作可由匹配引擎308、编码引擎310和/或数据精简单元210的一个或多个其他实体执行。

方法800然后可继续在非暂存数据存储中存储820新参考数据集。非暂存数据存储可包括但不限于数据存储仓库110/220和/或独立的存储设备112。在一个实施例,压缩散列表模块312接收新参考数据集并生成关联于新参考数据集的标识符。标识符可存储于在数据存储(例如,数据存储仓库110/220)中存储的记录表和/或可为参考数据集的一部分。标识符可用于从存储(例如,数据存储仓库110/220)参考和/或检索新参考数据集并用于重构数据流的输入数据块。方法800可继续确定822附加的数据块是否被输入。如果存在附加的输入数据块,方法800可返回步骤802,否则方法800可结束。

图9是用于跟踪闪速存储管理中的参考数据集的示例方法900的流程图。方法900可开始于检索902一个或多个数据块。在一个实施例,数据接收模块208可从非暂存数据存储(即,数据存储仓库110/220)检索一个或多个数据块。一个或多个数据块可包括但不限于内容数据,诸如文档、游戏相关应用、电子邮件附件和关联于客户端设备(例如,客户端设备102)执行和渲染的应用的附加信息。

接下来,方法900可继续标识904一个或多个数据块和存储于非暂存数据存储(例如,闪速存储)的一个或多个参考数据集之间的关联。在一个实施例,签名指纹计算引擎306与匹配引擎308协同,可从数据接收模块208接收一个或多个数据块,并标识一个或多个数据块和存储于数据存储仓库110/220(例如,闪速存储)的一个或多个参考数据集之间的关联。一个或多个数据块与一个或多个参考数据集的关联可反映一个或多个数据块对一个或多个参考数据集在数据召回上的共同依赖性。例如,数据召回可包括参考一个或多个参考数据集用于重构和/或编码的输入数据流的一个或多个数据块。

方法900可继续在包括一个或多个数据块的数据存储(例如,数据存储仓库110/220)中生成906一个或多个段,其取决于共同参考数据集。在一个实施例,匹配引擎308标识数据块和存储于数据存储(例如,闪速存储、数据存储仓库110/220)的参考数据集之间的关联并在包括共享关联的一个或多个数据块和一个或多个参考数据集的数据存储(例如,闪速存储、数据存储仓库110/220)中生成段。段指代可按序填充和擦除为单元的闪速存储的集/部分。每个数据块可关联于参考数据集(和其中的特定参考数据块),可被依赖用于召回。

在进一步实施例,非暂存数据存储中的段可包括但不限于共享与一个或多个参考数据集关联的一个或多个数据块的预定义存储大小。在某些实施例,每个段具有段首部,其包括信息诸如包括段被擦除、写入和/或读取的次数的标识符、时间戳和数据块信息阵列。数据块信息阵列可包括但不限于关于关联于排除数据块集以外的段和/或信息的每个数据块的信息。在某些实施例,段可关联于段概要首部。段概要首部可包括信息诸如但不限于关于段的全局信息和关联于段的总的数据块。

接下来,方法900可继续跟踪908关联于段的参考数据集用于数据召回。在一个实施例,数据跟踪模块212可在非暂存数据中跟踪段,用于由一个或多个客户端设备102数据召回。例如,客户端设备102可被提交一个或多个应用并请求访问关联于包括存储于非暂存数据存储的数据块的段的内容,数据跟踪模块212然后可跟踪段和/或参考数据集被召回的次数以提交关联于请求的一个或多个内容。因此,系统100可以非暂存闪存数据存储中的存储器的段中的数据块集来跟踪参考数据块的使用,而非单独以每个数据块跟踪参考数据集的使用。在某些实施例,数据跟踪模块212传输关联于数据召回的信息至更新模块218,用于更新关联于与客户端设备102的数据召回相关的段的参考数据集的段首部。在一个实施例,更新模块218更新一部分段首部,其包括段被数据召回的次数。步骤908的操作可由数据跟踪模块212和更新模块218和/或计算设备200的一个或多个其他实体执行。

图10是用于更新关联于参考数据集的计数变量的示例方法1000的流程图。方法1000可开始于确定1002包括一个或多个参考数据集的段。在一个实施例,数据聚合模块214基于共享一个或多个数据块和参考数据集的内容之间的相似度的一个或多个数据块,而确定取决于参考数据集的一个或多个数据块。在某些实施例,数据聚合模块214与匹配引擎308协同,确定一个或多个数据块对存储于诸如非暂存闪存数据存储(例如,可为一个或多个存储设备112的闪存)的对应存储器的段的一个或多个参考数据集的依赖性。一个或多个数据块对一个或多个参考数据集的依赖性可反映一个或多个数据块对存储器中的段的一个或多个参考数据集的共同重构/编码依赖性用于未来数据召回。

接下来,方法1000可继续生成1004标识符标记,用于关联于非暂存数据存储的存储器的段的参考数据集。在一个实施例,数据跟踪模块212生成段的标识符标记,包括取决于存储于非暂存数据存储(例如,闪存、存储设备112等)的参考数据集的一个或多个数据块并在非暂存数据存储中存储标识符标记。例如,标识符标记可为,但不限于段首部,其包括诸如段被擦除、写入和/或读取的次数、时间戳和数据块信息阵列的信息。数据块信息阵列可包括但不限于关于关联于段的每个数据块的信息和/或排除非暂存数据存储(即,固态设备、闪存等)中段的数据块集以外的信息。在某些实施例,步骤1004的操作可由数据跟踪模块212和/或数据聚合模块214与计算设备200的一个或多个其他实体协同执行。

方法1000可继续接收1006参考数据集的数据召回请求。在一个实施例,数据接收模块208接收用于可存储于非暂存数据存储的段的参考数据集的请求。数据召回请求可关联于渲染关联于在客户端设备102上执行的应用的一个或多个内容。接下来,方法1000可继续基于标识符标记关联1008参考数据集的数据召回请求与段。在一个实施例,数据跟踪模块212可利用标识符标记关联来自客户端设备的数据召回请求与存储于非暂存闪存数据存储的段的参考数据集。标识符标记可关联于参考数据集的段首部,其包括标识信息和附加的数据,诸如段被擦除、写入和/或读取的次数。

方法1000可继续执行1010关联于段和参考数据集的数据召回操作。在一个实施例,数据精简单元210可执行关联于包括存储于非暂存数据存储的参考数据集的段的数据召回操作。数据召回操作可包括,以下操作,诸如但不限于重构一个或多个数据块和/或编码输入数据流的一个或多个数据块。响应于执行数据召回操作,方法1000可继续更新1012关联于参考数据集的使用计数变量。例如,数据跟踪模块212可更新关联于包括存储于非暂存数据存储的参考数据集的段的使用计数变量。

在某些实施例,使用计数变量可为段首部的一部分,其关联于包括为数据召回操作而调用的参考数据集的非暂存数据存储的段。如本公开全文讨论,使用计数变量可指示参考(例如,利用指针指向存储中的参考数据集)关联于存储(例如,闪存)中的存储器段的特定参考数据集的多个数据块和/或数据块集。在进一步实施例,关联于参考数据集的使用计数变量可独立存储于数据存储(诸如数据存储仓库110)的记录表。

接下来,方法1000可继续确定1014附加的数据召回是否在队列中。如果存在附加的数据召回出现在队列中,方法1000可返回步骤1006,否则方法1000可结束。

图11是用于分配编码数据段至非暂存数据存储(例如,闪存)中的新位置的示例方法1100的流程图。方法1100可开始于标识1102关联于数据块的段。在一个实施例,数据接收模块208标识包括一个或多个数据块的非暂存数据存储的存储器的段。

接下来,方法1100继续基于关联于段的数据块来确定1104参考数据集。在一个实施例,数据跟踪模块212基于参考数据集的标识符(例如,段首部)确定关联于非暂存数据存储的段的参考数据集。响应于确定参考数据集,方法1100可继续确定1106参考数据集的状态。在一个实施例,数据跟踪模块212可基于预定因素(例如,包括旧数据、应删除数据的存储器段等)来确定参考数据集的状态。例如,数据跟踪模块212可基于参考数据集的状态而标识,比较和重新分配来自部分填充段的一个或多个数据块,并删除参考数据集的一部分的无效数据块(即,旧数据、应删除数据),以使参考数据集的段和/或数据块可被重新分配。预定因素的非限制示例可包括处于引退路径的参考数据集。

接下来,方法1100可继续基于参考数据集编码1108段。在一个实施例,编码引擎310基于参考数据集编码关联于数据块的段。

最后,方法1100可继续分配1108包括参考数据集的段至非暂存闪存数据存储中的新位置。在一个实施例,编码引擎310与输出缓冲器318协同,分配包括满足关联于状态的预定值的参考数据集的段至非暂存数据存储(例如,闪存)中的新位置。例如,可反映参考数据集的四个数据块(A,B,C,D)被写入非暂存数据存储的存储器的段。接下来,四个新数据块(E,F,G,H)和四个替换数据块(A’,B’,C’,D’)被写入存储器的段(例如闪存)。原始四个数据块(A,B,C,D)现在为无效(例如不满足关联于原始参考数据集的状态的预定值)数据,然而,原始四个数据块(A,B,C,D)无法被重写直到完整的存储器(例如闪存)的段被擦除。因此,为利用无效数据(A,B,C,D)写入段,所有良好的数据四个新数据块(E,F,G,H)和四个替换数据块(A’,B’,C’,D’)被读取并写入新段,然后旧段被擦除。在某些实施例,编码引擎310可使用算法,诸如但不限于垃圾收集算法以执行方法1100的以上步骤。垃圾收集算法可包括参考计数算法、标记清除收集算法、标记压缩收集算法、复制收集算法等。步骤1108的操作可由编码引擎310与数据跟踪模块212和计算设备200的一个或多个其他实体协同执行。

图12是用于编码关联于闪存管理和垃圾收集集成的数据段的示例方法1200的流程图。方法1200可开始于接收1202当前数据流的当前数据块。在某些实施例,步骤1202的操作可由签名指纹计算引擎306与匹配引擎308和计算设备200的一个或多个其他实体协同执行。

接下来,方法1200继续基于当前数据块确定1204关联于闪速存储的段的参考数据集。在一个实施例,数据跟踪模块212基于参考数据集的标识符(例如,段首部)确定关联于非暂存闪存数据存储的段的参考数据集。在一个实施例,数据跟踪模块212标识包括参考数据集的非暂存闪存数据存储的存储器的段。例如,非暂存数据存储的存储器中标识的段可反映当前数据块与关联于所标识的段的参考数据集之间的相似度。

响应于确定参考数据集,方法1200可继续确定1206参考数据集的状态。在某些实施例,数据跟踪模块212可确定参考数据集的状态。例如,数据跟踪模块212可基于参考数据集的状态比较并重新分配来自部分填充段的一个或多个数据块,并删除参考数据集的一部分的无效数据块(即,旧数据、应删除数据),以使段和/或参考数据集的数据块可被重新分配。

方法1200可继续重新生成1208关联于参考数据集的原始数据块。在一个实施例,编码引擎310响应于低于预定值的参考数据集的状态而重新生成关联于参考数据集的原始数据块。参考集的状态低于预定值可表示参考日期集被调度用于引退。接下来,方法1200继续利用存储于非暂存数据存储的存储器的其他参考数据集编码1210关联于调度用于引退的参考数据集的原始数据块。另一参考数据集可包括可用存储,用于存储附加的数据块,诸如调度用于引退的参考数据集的原始数据块。在一个实施例,数据聚合模块214标识非暂存数据存储的存储器中的一个或多个可用段用于存储编码原始数据块。步骤1210的操作可由编码引擎310与数据跟踪模块212和计算设备200的一个或多个其他实体协同执行。

接下来,方法1200可利用其他参考数据集继续编码1212关联于当前数据流的当前数据块的段。在一个实施例,编码引擎310标识一个或多个其他段,包括存储于非暂存数据存储(例如,闪存)的存储器的其他参考数据集。在某些实施例,当前数据块可分段为块(即,段)并且编码引擎310可利用非暂存数据存储的存储器中的段的一个或多个其他参考数据集而独立地编码该块。步骤1212的操作可由编码引擎310与计算设备200的一个或多个其他实体协同执行。

图13是用于引退关联于闪存管理的参考数据集的示例方法1300的流程图。方法1300可开始于从数据存储(诸如数据存储仓库110/220)的存储器来检索1302参考数据集。在一个实施例,数据引退模块216与计算设备200的一个或多个其他组件协同,检索存储于非暂存数据存储(例如,闪存)的存储器的一个或多个参考数据集。接下来,方法1300可继续确定1304参考数据集的使用计数变量。在一个实施例,数据引退模块216与数据跟踪模块212协同,确定关联于一个或多个参考数据集的使用计数变量。数据引退模块216可对在数据存储中存储的记录表进行语法分析,并基于关联于参考数据集的标识符来标识参考数据集的使用计数变量。使用计数变量可表示多个数据块和/或数据块集,其参考(例如,利用指针指向存储中的参考数据集)非暂存数据存储(例如,闪存)的存储器中的特定参考数据集。

方法1300然后可继续对关联于在非暂存数据存储中存储的存储器的参考数据集的参考数据块的总体执行1306统计分析。例如,数据跟踪模块212可对关联于在非暂存数据存储(例如,闪存)中存储的存储器的参考数据集的参考数据块的总体执行统计分析。统计分析可包括但不限于标识数据召回次数高于预定阈值的参考数据集的使用计数。在某些实施例,数据引退模块216基于关联于参考数据集的使用计数变量确定参考数据集是否满足引退。步骤1306的操作可由数据跟踪模块212与计算设备200的一个或多个其他实体协同执行。

接下来,方法1300可继续基于使用计数确定1308参考数据集是否满足引退标准。引退标准可包括但不限于关联于数据集的使用持续时间、执行于相关数据集的最后更新/修改、在持续时间内用于相关数据集的存储量、在正常执行期间获取存储于存储器的数据集所必要的时间量和资源、关联于数据集的读/写频率等。在一个实施例,参考散列表模块314可确定一个或多个数据块和/或数据块集在预定持续时间(例如,1分钟、1小时、一天、一周等)内未参考参考数据集。在某些实施例,参考散列表模块314可确定参考数据集高于关联于数据集的读/写的阈值频率并且因此引退可被满足以保存存储设备(即,闪速存储)的生命周期。在进一步实施例,参考散列表模块314可基于在持续时间内用于相关数据集的存储设备(即,闪速存储)的存储量来确定参考数据集满足引退。例如,数据集可基于执行数据集(例如,随时间更新文档以包括附加的信息)的修订而在持续时间内在存储器中增长。在某些实施例,如果用于存储设备的存储量满足阈值并且在持续时间内未被召回,数据集可强制引退,因此,清除旧数据并为相关数据提供存储器空间。方法1300可继续执行参考数据集的引退1310。在一个实施例,数据引退模块216基于使用计数执行满足标准的一个或多个参考数据集的引退。

在某些实施例,参考散列表模块314应用使用计数引退算法至在存储中存储的每个参考数据集。在预定持续时间被满足并且参考数据集在预定持续时间未被一个或多个数据块或关联于数据流的数据块集参考之后,使用计数引退算法可自动递减关联于参考数据集的使用计数变量的计数。在某些实施例,当参考数据集的使用计数变量的计数递减为零时,参考数据集可满足引退。使用计数变量为零可表示没有数据块或数据块集依赖和/或参考对应参考数据集。例如,没有编码数据块(例如,压缩/去重数据块)依赖参考数据集,用于重构编码数据块的原始版本。在进一步实施例,一部分参考数据集基于统计分析被确定用于引退。数据引退模块216然后可引退满足引退的参考数据集的参考数据块的一部分,同时基于一个或多个预定因素(例如,存储空间、参考数据块的大小、参考数据块的引退时间戳等),分配参考数据集中剩余的参考数据块至存储中存储器的新段(例如,具有附加数据块可用空间的新参考数据集)。

方法1300可继续基于耦合系数(force factor)执行1312参考数据集的引退。在一个实施例,数据引退模块216基于耦合系数执行存储于非暂存数据存储(例如,110/220)的存储器的一个或多个参考数据集的引退。耦合系数可嵌入算法,诸如但不限于垃圾收集算法。步骤1312的操作是可选的,并且由数据引退模块216与计算设备200的一个或多个其他实体协同执行。

图14A为框图,说明用于压缩参考数据块的现有技术示例。如描述于图14A,压缩模块接收参考块,用于关联于参考块的数据的线内压缩。线内压缩表示参考块的数据在其存储于存储阵列时被压缩(例如,大小被减少)。参考块在进入压缩模块之前具有4KB(千字节)的数据大小,一旦参考块合并自压缩模块,参考块的大小被显著降低。压缩数据流然后被存储于存储。此外,压缩数据流可包括首部(例如,Hdr),其包括标识信息等。执行线内压缩的缺点在于,在参考块的数据写入存储器之前,压缩模块合并参考块的数据。此外,哈希和散列比较被实时计算,其可增加性能开销。例如,如果避免散列冲突需要按字节比较,则带来附加的性能开销。在当时间(即,毫秒)显著时压缩参考块的基本数据的情况下,线内压缩总体上不被推荐。因此,由于将总的开销性能引入系统,数据流的线内压缩不被推荐。

图14B为说明去重参考数据块的现有技术示例的框图。如描述于图14B,去重(去重)模块接收参考块,用于关联于参考块的数据的线内去重。线内去重为用于降低消除冗余数据所需要的存储的技术。例如,如描述于图14B,参考块在进入去重模块之前具有4KB(千字节)数据大小,一旦参考块自去重模块出现,参考块的大小被显著降低。去重数据流包括首部(例如,Hdr),其包括标识信息,然后存储于存储。

此外,线内去重包括去重散列计算,在参考数据块实时输入客户端设备时生成于客户端设备。如果客户端设备发现块已存储于存储系统,则不存储新块,相反,直接参考已有的参考块。线内去重的优点为,其需要较少的存储,因为数据不重复。然而,因为散列表中的散列计算和搜索操作经历了由于数据摄入显著较慢而带来的显著时间延迟,效率由于设备的备份吞吐量降低而降低。

图15为说明了示例增量编码的图形表示。如描述于图15,数据集1502可包括数据块(0-7),如所说明。例如,数据集1502可关联于导致存储于数据存储诸如数据存储仓库110/220的输入数据流。在存储包括数据块(0-7)的数据集1502之前,编码引擎310可执行子块等级去重,其包括比较数据块(0-7)的近似散列与存储在存储于数据存储的对应参考数据集(未示出)的近似散列。如果基于相似的近似散列存在于数据集1502的数据块和在数据存储中存储的一个或多个已有参考数据集(未示出)之间,编码引擎310然后可利用存储中已有参考数据集的数据块(0,2,3和7)编码关联于基于相似的近似散列的对应数据块,如图15描述的。

编码引擎310可由增量编码算法执行。增量编码算法标识数据块和参考数据集之间的相似近似散列并仅存储变化的数据。例如,编码数据块(0,2,3和7)说明为原始数据集的编码(例如,压缩)数据流1504版本。此外,编码数据流1504可包括用于标识编码数据流的首部。首部还可包括信息,诸如但不限于参考块ID、增量编码比特向量、关联于编码数据流的颗粒数量。

图16为图形表示,说明示例近似编码。如描述于图16,数据集1602可包括所说明的数据块(0-7)。例如,数据集1602可关联于在数据存储(诸如数据存储仓库110)中存储的输入数据流。编码引擎310可执行块等级去重,其包括比较数据块(0-7)的近似散列和/或数字签名/指纹与存储的对应参考数据集1604的近似散列,如图16所说明。如果基于相似的近似散列存在于数据集1602的数据块和参考数据集1604之间,编码引擎310然后可编码关联于基于相似的近似散列的对应数据块,如描述于图16。编码引擎310可在对应关联于基于相似的近似散列的数据块中执行去重和自压缩。编码数据块1606被说明为原始数据集1602的编码(例如,压缩)的数据流版本。进一步,编码数据流1606还可包括用于标识编码数据流的首部。首部还可包括信息,诸如但不限于参考块ID、全零比特向量、关联于编码数据流的颗粒数量。

图17为说明示例参考数据块的增量和自压缩的图形表示。如描述于图17,说明了包括参考数据块(0-7)的参考数据集1702和包括数据块(0-7)的数据集1704。图17目的是用于说明利用增量和自压缩算法编码数据集。例如,编码引擎310可通过计算近似散列1710、1712、1714、1716和1718处理数据集1704的数据块。如果近似散列在参考数据集1702的参考数据块和数据集1704的数据块之间不具有相似匹配,增量压缩可被执行。并且,概略可对数据集计算。概略可基于数据集1704的每个数据块之间近似散列而计算。如果不存在数据集1704的数据块的相似性匹配,概略可不被编码而存储于数据存储。如果相似匹配存在于数据集1704的数据块的近似散列(例如,概略)和参考数据集1702的近似散列(例如,概略)之间,则关联于相似匹配的对应数据集1704的数据块被如所示方式经由1720和1722编码,并且得到数据存储效率的优点。

在图17的环境,数据集1704的数据块关联于相似匹配但相比于参考数据集1702的参考数据块具有少量差别(例如,内容修改),如加粗方形所示。编码引擎310然后可计算相对于参考数据块的差别,并专门地存储修改的数据块1724、1726和1728以及散列值至参考数据集和/或参考数据块。进一步,编码数据集1706可包括用于标识编码数据流的首部。首部还可包括信息,诸如但不限于参考块ID,如图17所示(例如,参考块:3.5、2),全零比特向量和关联于编码数据流的颗粒的数量。

图18A和18B为说明利用闪存管理的垃圾收集的参考块集的示例性跟踪和引退的图形表示。现参见图18A,说明了具有对应闪存段首部的参考块集表和闪速存储设备的多个存储器段。如所描述,关联于闪速存储设备的一部分存储器段被占用。例如,占用的段部分关联于包括(1,2)、(3,1)和(1,1)的部分。关联于闪速存储设备的该段的部分包括对应闪存段首部,其标识该段指向的参考集,关联于参考块集和相关计数。例如,在说明的实施例,闪速存储设备中被占用的段部分由(3,1)表示,反映该段使用参考数据集3并且参考数据集3具有指向它的一个集,如描述于参考块集表。参考块集表还包括信息,表示存储设备的存储器的部分在使用中、在构造中和/或未使用。

现参见图18B,说明了利用闪存管理中的垃圾收集进行参考块集的跟踪和引退。例如,如先前在图18A讨论,关联于闪速存储设备的一部分存储器段被占用。例如,占用的段部分关联于包括(1,2)、(3,1)和(1,1)的部分。然而,在图18B,块(3,1)的段首部现在读取(5,1),表示块(5,1)指向闪速存储设备的存储器的新参考数据集。此外,参考块集表被修改,其现在示出关联于ID-3的ref#1被修改为ref#0,其表示没有存储于闪速存储段的数据块指向对应参考数据集。此外,关联于ID-5的参考数据集现在具有ref#1,表示闪存的一个段指向参考数据集。

系统和方法用于实现下文描述的有效数据管理体系结构。在以上描述中,为进行说明,多个特定细节被提出。然而显而易见,所公开的技术可在不需要特定细节的任何给定子集时而实现。在其它实例,结构和设备以框图形式示出。例如,在以上某些实现,公开的技术引用用户界面和特定硬件来描述。此外,以上公开的技术主要在在线服务的环境下;然而,所公开的技术应用于其他数据源以及其他数据类型(例如,其他资源的集,例如图像、音频、网页)。

说明书对“一个实现”或“一种实现”的引用表示结合实现描述的特定特征、结构或特性包括于公开技术的至少一个实现。说明书多处出现的词语“在一个实现”并不一定都引用同一个实现。

以上详细描述的某些部分根据对计算机存储器的数据位的操作的符号表示和过程而呈现。过程可总体上考虑为导致结果的一致性步骤序列。步骤可包括物理量的物理操作。该量采用电或磁信号的形式,能够被存储、传输、合并、比较、以及以其他方式操作。该信号可采用比特、值、元素、符号、字符、项、数字等形式。

以上和相似项可关联于合适的物理量并且可考虑为应用于该量的标签。除非另外特别地陈述,如从现有讨论显而易见,应理解在描述全文中,利用例如“处理”或“计算”或“运算”或“确定”或“显示”等术语的讨论可指代计算机系统的动作和过程或相似电子计算设备,其操作并将表示为计算机系统的寄存器和存储器的物理(电子)量的数据转换为类似地表示为计算机系统存储器或寄存器或其他该信息存储,传输或显示器设备中的物理量的其他数据。

公开技术还可涉及用于执行本文操作的装置。该装置可被特别构造用于所需要目的或其可包括由存储于计算机的计算机程序选择性地激活或重新配置的通用计算机。该计算机程序可存储于计算机可读存储介质,例如,但不限于任何类型的盘,包括软盘、光盘、CD-ROM和磁盘、只读存储器(ROM)、随机存取存储器(RAM)、EPROM、EEPROM、磁或光卡,包括具有适用于存储电子指令的非易失性存储器或任何类型的媒体的USB密钥的闪速存储器,其每一个耦合于计算机系统总线。

公开技术可采用整体硬件实现,整体软件实现或包含硬件和软件元件的实现的形式。在某些实现,技术实现于软件,其包括但不限于固件,常驻软件,微代码等。

此外,公开技术可采用计算机程序产品的形式,可从非暂存计算机可用或计算机可读介质访问,其提供用于由或结合计算机或任何指令执行系统使用的程序代码。为描述的目的,计算机可用或计算机可读介质可为任何装置,其可包含、存储、通信、传播或传输程序,用于由或结合指令执行系统,装置或设备使用。

适用于存储和/或执行程序代码的计算系统或数据处理系统包括至少一个通过系统总线直接或间接地耦合于存储元件的处理器(例如,硬件处理器)。存储元件可包括在程序代码的实际执行期间应用的本地存储器,成批存储,以及缓存存储器,其提供至少某些程序代码的暂时存储,以降低在执行期间代码必须从成批存储检索的次数。

输入/输出或I/O设备(包括但不限于键盘、显示、指点设备等)可直接或通过中间I/O控制器耦合于系统。

网络适配器还可耦合于系统,以使数据处理系统通过中间私有或公共网络耦合于其他数据处理系统或远程打印机或存储设备。调制解调器,电缆调制解调器和以太网卡仅仅是几种当前可用的网络适配器类型。

最终,本文呈现的处理和显示本身可不关联于任何特定计算机或其他装置。多种通用系统可利用根据本文教导的程序被使用或其证明便于构造更专业化的装置来执行所需的方法步骤。用于多种系统的所需结构将从如下描述显而易见。此外,公开的技术未参考任何特定编程语言描述。应当理解,多种编程语言可用于实现本文描述的技术的教导。

基于说明和描述的目的,本工艺和技术的实现的在前描述被呈现。其并非意图穷举或将本工艺和技术限制在公开的精确形式。多个修改和变型根据上述教导是可能的。本工艺和技术的范围不受详细描述的限制。本工艺和技术可实现于其他特定形式而不偏离其精神或实质特性。同样地,模块、例程、特征、属性、方法以及其他方面的特定命名和划分不是强制性的或至关重要的,并且实现本工艺和技术或其特征的机构可具有不同的名称、划分和/或格式。此外,本技术的模块、例程、特征、属性、方法以及其他方面可实现为软件、硬件、固件或三者的任何组合。并且,在示例为模块的组件被实现为软件时,组件可实现为独立程序,作为较大程序的部分,多个独立程序、静态或动态链接库、可加载核心的模块、设备驱动器和/或计算机编程中现在已知或未来的每个和其他任何方式。附加地,本工艺和技术不限于任何特定编程语言的实现或任何特定操作系统或环境。因此,本工艺和技术的公开意图为说明性而非限制性。

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