CN107787489A - 包括层级的文件存储系统 - Google Patents
包括层级的文件存储系统 Download PDFInfo
- Publication number
- CN107787489A CN107787489A CN201680035806.1A CN201680035806A CN107787489A CN 107787489 A CN107787489 A CN 107787489A CN 201680035806 A CN201680035806 A CN 201680035806A CN 107787489 A CN107787489 A CN 107787489A
- Authority
- CN
- China
- Prior art keywords
- data
- thesaurus
- hash
- daily record
- diary
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/174—Redundancy elimination performed by the file system
- G06F16/1744—Redundancy elimination performed by the file system using compression, e.g. sparse files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/172—Caching, prefetching or hoarding of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
- G06F16/137—Hash-based
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/211—Schema design and management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/282—Hierarchical databases, e.g. IMS, LDAP data stores or Lotus Notes
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Debugging And Monitoring (AREA)
Abstract
提供了数据存储系统和过程,包括用于处理对存储系统的写入和读取请求的过程。存储系统可以包括数据存储库,诸如日志存储库、散列存储库和日记存储库。数据可以被写入日志存储库,日志存储库可以被转换成散列存储库,并且散列存储库可以被合并成日记存储库。存储系统可以使用优化来写入和存储数据,以提供更低的等待时间、更低的写入放大和更高的吞吐量。
Description
背景技术
在具有数据存储需求的计算系统中,存储系统可以被实现为存储数据。数据可以在存储系统中以各种格式写入。在一些情况中,存储系统与数据存储库相关联,该数据存储库可以使用非易失性存储器(诸如固态存储设备或SSD设备)来实现。读取或写入数据的请求可以由存储系统接收。在一些情况中,存储系统与演示相对较高等待时间(诸如读取写入或正在写入系统的信息的较长延迟,或相对较高的写入放大,例如,写入比所必须的数据实例更多的数据实例或写入多个数据)的设备相关联。
发明内容
提供本发明内容是为了以简化形式介绍下文将在具体实施方式中进一步描述的概念的选择。该发明内容并不旨在确定所要求保护的主题的关键特征或必要特征,也不旨在用作确定所要求保护的主题的范围的辅助手段。
如结合以下某些方面所描述的,提供了多层存储系统,诸如包括多个逻辑数据存储级别的存储系统。各方面包括在一些情况中在存储系统中生成数据存储库,例如,日志存储库、散列存储库和日记以及管理器。可以公开暴露API以允许读取或追加到存储系统。
附图说明
以下参考附图对本发明进行详细描述,其中:
图1A是根据一方面的存储系统的说明性操作环境的图。
图1B是存储系统的各方面的图。
图2是根据一方面的存储系统的日志存储库的各方面的图。
图3是根据一方面的存储系统的散列存储库的各方面的图。
图4是根据一方面的存储系统的日记存储库的各方面的图。
图5是图示了存储系统的各方面的图。
图6是图示了根据一方面的用于写入操作的过程的各方面的流程图。
图7是图示了根据一方面的用于存储数据的过程的各方面的流程图。
图8是图示了根据一方面的用于存储数据的过程的各方面的流程图。
图9是图示了根据一方面的应用编程接口的各方面的流程图。
具体实施方式
本发明的主题在本文中用细节进行描述以符合法定要求。然而,描述本身并不旨在限制本专利的范围。相反,发明人已经设想,所要求保护的主题还可以结合其他当前或未来的技术以其他方式来实现,以包括与本文中所描述的步骤类似的不同步骤或步骤的组合。
本发明的各方面通过减少存储和检索数据所花费的时间量来改善计算机和计算机存储的操作。下文对各种存储系统进行描述,其包括具有各种数据存储库的存储系统。存储系统100中的一个数据存储库可以被称为日志存储库,其可以在数据被复制或移动到存储系统100中的其他数据存储库之前将数据存储在存储系统100中。基于文件系统100中的一个或多个日志存储库的重写,存储系统100中的另一数据存储库可以被称为作为散列存储库。基于文件系统100中一个或多个散列存储库的重写,另一数据存储库被称为日记或日记存储库。数据存储库可以是分代或分层的,包括数据是日志存储库的第一部分,重写到散列存储库和/或重写到日记存储库的各方面,例如,在存储系统中出现压缩过程时。
如下文所描述的,存储系统100包括多个数据存储库,诸如日志存储库200、散列存储库300和日记存储库400。在各方面中,存储系统100生成日志存储库200、散列存储库300和日记存储库400,每个数据存储库(日志存储库200、散列存储库300、日记存储库400)是存储系统100中的逻辑存储库或数据级别。数据存储库可以包括以特定文件格式写入的数据的实例。在一些情况中,数据实例被写入到一个或多个盘区存储库,其接受写入的数据并且提供与各种存储器或存储设备或容器相关联的存储。
存储系统可以利用非易失性存储器(诸如固态驱动器(SSD))来存储信息,例如作为与一个或多个盘区存储库相关联的物理存储设备或容器。非易失性存储器可以包括但不限于诸如SSD系统、闪存设备(NAND或NOR)或EEPROM设备之类的设备。存储系统可以与物理存储容器进行交互,诸如存储设备或部件(包括一个或多个硬盘驱动器、以及服务器或能够请求信息从存储装置读取或写入存储装置的其他部件,其包括与程序、应用或应用编程接口(API)的通信在内)。例如,内部或后端数据可以使用存储系统(诸如下文所描述的存储系统100)来存储。在一些方面中,包括第三方应用以及分布式和/或基于云的应用的程序或应用可以使用基于web的功能性和/或公共可用的API来从存储系统中读取或写入该存储系统。
如果存储系统提供更快的读取或写入,更低水平的等待时间和/或写入放大的减少,则可以认为存储系统具有更高或更好的性能。这里所公开的方法包括:存储系统提供与读取和/或写入与存储系统相关联的一个或多个存储设备相关联的较低水平的磨损和/或较低水平的等待时间。附加地,通过实现诸如下文描述的那些存储系统之类的存储系统,可以导致等待时间或延迟更低、最小化的写入放大、以及更高的吞吐量,例如系统的更高和/或更快的处理写入和/或读取的水平。
写入放大可以出现在随机写入操作期间,其中可能出现额外的或多个写入实例(例如,当在从应用或存储系统的写入操作期间底层闪存转换层迫使出现对NAND闪存的多于一次的写入时)。在一些情况中,由于底层存储介质的原因,执行一次写入操作迫使存储系统或驱动器执行多于一次的写入操作,从而导致比预期更多的写入操作。
如下文所描述的,在各方面中,写入操作在存储器中的数据存储库的末尾处或在先前写入操作之后顺序地执行。例如,可以在先前写入之后顺序地向存储系统100中的日志存储库200进行写入,以使写入操作被最小化或优化,和/或执行必要的写入操作所需的时间被最小化。随着时间的过去所需的写入操作越少,导致相关联的存储设备或设备(诸如SSD)的磨损越少或越慢,该存储设备或设备可以是已知的或者被设计成容忍一定数目的写入操作(每个字节或者存储空间块)。在一些情况中,两个或更多个设备被交替地写入。
本文中所描述的示例性存储系统可以提供用于例如从与存储系统(诸如存储设备122)相关联的一个或多个存储设备读取数据的较低响应时间。存储系统还可以降低写入操作和/或写入放大的数量,减少磨损,和/或降低将数据写入存储系统所需的时间量。在一些情况中,与存储系统100相关联的具体存储设备上的字节可以被可靠地写入的次数可以被称为耐久性。读取操作和/或写入操作的速度可以被称为与存储系统(诸如一个或多个SSD)相关联的一个或多个存储设备的性能。
按照下文所描述的各方面的存储系统可以增加与存储系统相关联的存储设备的耐久性和/或性能。下文所描述的各方面可以优化诸如写入操作之类的操作,以减少写入放大,并且因此通过最小化磨损而不牺牲或者同时实现相对高的性能来延长设备的寿命。下文所描述的各方面可以基于需要更高性能或更高/更长耐久性的存储系统来使用或优化。
在操作期间,多个数据存储库(诸如日志存储库200、散列存储库300、日记存储库400)可以作为诸如存储系统100之类的一个数据存储系统出现。诸如下文所描述的示例之类的API可以被用来从存储系统100中的数据存储库读取数据,该数据存储库包括与一个或多个存储设备相关联的数据存储库,同时作为单个读取操作呈现给用户或系统。下文所描述的示例性系统可以降低从存储系统100读取数据或内容的响应时间,降低一个或多个写入操作或写入放大的数量从而减少磨损,和/或降低写入数据所需的时间量。
图1A示出了本文中所描述的本发明的各方面的示例性操作环境。存储系统100可以包括管理器110、链路118和存储器120。在一方面中,存储系统100包括多个数据级别或数据存储库,诸如日志存储库200、散列存储库300和日记存储库400,每个数据级别或数据存储库具有一个控制器,例如,控制单元112、114、116。存储系统100中的存储器120或存储器120的各方面可以与存储系统100和/或每个数据存储库相关联。控制单元(诸如控制单元112)表示对存储系统100中的数据的控制,并且可以包括管理器110的一个或多个部件或子单元和/或各方面。在各方面中,管理器110包括一个或多个控制单元112、114、116,其与存储系统100中的一个或多个数据实例相关联。
管理器110可以被配置成在一些情况中通过将写入请求传递到日志存储库200来协调写入操作与存储系统100的各部分(例如,协调写入操作与日志存储库200)。管理器110广泛地是指任何软件或软件的各部分,其在存储系统100的各方面的顶部上运行和/或访问存储系统100的各方面。管理器110可以使用嵌入式或机载本地处理器和/或固件来实现。在一些方面中,管理器110可以耦合到日志存储库200、散列存储库300、数据存储库400和存储器120,或者与日志存储库200、散列存储库300、数据存储库400和存储器120通信,包括检测或确定与数据存储库相关联的条件和/或基于存储系统100所做出的确定进行动作。
在各方面中,日志存储库200包括多个数据实例,每个数据实例包括元数据部分和数据部分,如下文关于图2所描述的。可以基于一个或多个日志存储库200来生成散列存储库300。如关于图3所描述的,散列存储库300可以是单个文件,其具有头部、散列、散列元数据部分和散列数据部分。关于图4所讨论的日记存储库400可以基于多个散列存储库300来生成。在各方面中,日记存储库400使用包括日记索引部分和日志数据部分的文件格式,并且日记索引部分包括散列元数据部分,其具有指向对应日记数据部分的偏移量。在各方面中,日记索引部分是一个文件,并且日记数据部分包括一个或多个单独的文件。
在一些情况中,存储系统100使用密钥(诸如特定数字或值)来表示存储在存储系统100中的数据片段。例如,某个数据片段可以具有诸如值“20”之类的密钥,其用作用于查找数据的机构。当应用或程序请求某个密钥(包括由用户动作引起的请求)时,该密钥被转换成偏移量,从而允许单个读取操作读取正确的数据。在一些方面中,散列表(或散列表的内存表示)转换该密钥。在一些情况中,这允许对与数据存储库相关联的存储设备的一个计算和/或一个访问,以从存储系统100读取所请求的数据。在各方面中,日志存储库200和散列存储库300可以具有内存散列表,诸如布谷鸟散列表。例如,在日志存储库200中,元数据可以被存储在指向相关联的数据的值部分中,而在内存散列表中没有存储对应的值。
下文所描述的示例具有三个数据存储库(或更多个),但是给出了单个存储系统100的外观或功能性。例如,API可以被暴露并且用于与日志存储库200、散列存储库300以及日记存储库400交互。存储系统100的总体配置或每个数据存储库的功能性或优化(无论是否由管理器110引起或实现)都可以由一个或多个控制单元执行。每个数据存储库可以具有控制器或控制单元,或者不同级别的多个控制器或控制单元。
在各方面中,存储系统(诸如存储系统100)接收通过任何链路或总线(例如,图1A中的链路118)或I/O端口接收的数据,该链路或总线包括PCI Express总线,与主板相关联的直接总线,来自的原始闪存或闪存转换的输入,或用于接收数据的其他链路或连接。服务器、处理器或其他设备可以使用链路118向存储系统100传达读取或写入请求,并且链路118可以将程序、应用和API与存储系统100耦合或链接,在一些情况中,以允许下文所描述的示例性API读取来自存储系统100的一个或多个数据存储库(日志存储库200、散列存储库300、日记存储库400)的数据。存储系统100在各方面中包括存储器120,并且其可以包括其中存储器120在数据存储库之间分布或划分、并且其中在与日志存储库200、散列存储库300和/或日记存储库400相关联的存储器中存在一个或多个缓冲器的各方面。
如图1B所示,存储设备122、124、126表示关联存储系统100中使用的一个或多个非易失性存储器部件。与存储系统100相关联的存储设备可以包括一个或多个SSD或其他非易失性存储设备。在一个方面中,活动的日志存储库200可以接收写入到盘区存储库(例如,与一个或多个存储设备(例如,存储设备122)相关联的盘区存储库)的数据。存储设备(诸如存储设备122、124、126)的任何组合可以与写入日志存储库200、散列存储库300和日记存储库400中的一个或多个存储库的数据相关联。在一些情况中,一个或多个分布式存储设备可以与存储系统100相关联。示例性存储设备122、124、126被示出用于说明的目的,并且任何数目的存储设备或一个存储设备122可以与文件系统100的一个或多个盘区存储库相关联。在一方面中,文件系统100中的每个日记存储库400与一个存储设备(诸如存储设备126(例如是SSD))相关联。
存储系统100可以通过适合于存储系统100的过程、部件和/或存储器120与存储设备122、124、126之间的通信的任何通信信道或链路(诸如链路128)来与存储设备122、124、126进行通信。存储设备122、124、126仅仅是示例性存储设备。在各方面中,存储设备122、124、126中的多于一个的存储设备与用于接收和发送信息的链路(诸如链路128)相关联。在各方面中,日志存储库200数据实例、散列存储库300数据实例和日记存储库400数据实例作为追加块被以压缩格式写入与一个或多个物理存储容器(诸如存储设备122)相关联的盘区存储库中,其中压缩格式的追加块与对应的逻辑未压缩大小相关联。
在一方面中,程序或应用接收追加数据的请求,并且数据被写入日志存储库200。例如,如果日志存储库200达到数据的容量极限或阈值极限,则日志存储库200可以被变换成散列存储库300。在各方面中,日志存储库200通过存储系统100被确定为已满。存储系统100可以确定日志存储库200不是活动的,并且存储系统100可以确定日志存储库200没有接收到写入请求。可以在文件系统100中生成新的日志存储库,然后在一些情况中,可以出现初始的日志存储库200的压缩。来自日志存储库200的数据在一些情况中在管理器100的指导下被重写到散列存储库300。在这种情况下,数据从数据存储库的一个级别或存储被重写到另一存储库。日志存储库200到散列存储库300的实例的转换或重写可以被称为次要压缩。
如上文所陈述的和下文所描述的,本发明的各方面可以使用各种数据存储库,但是给出单个存储系统的外观或功能性。在示例中,单个读取单元可以与多个数据存储库相关联。API使用数据块或数据部分的标识符以及相关联的密钥值来获得偏移量,其允许用户在三个数据存储库200、300、400中的任一个存储库中插入或检索数据。存储系统100接收对从数据存储库200、300、400读取数据的请求,并且密钥值存储库处理数据在数据存储库的层或级别中的内容管理。允许跨越一个或多个数据存储库200、300、400读取存储系统100中的数据的API可以被称为统一API。在一些情况中,响应于程序或应用的数据请求,存储系统100一次对多个数据存储库(诸如日志存储库200、散列存储库300和/或日记存储库400(或散列存储库300内的多个散列存储实例))的使用可以更快地返回数据。如下文所描述的,允许对存储系统100进行写入操作的API可以是能够添加数据的仅追加API,或者存储系统100(例如,通过管理器110)可以实现对日志存储库200的写入操作作为仅追加操作。下文示出了可以公开暴露的一个或多个API的示例:
Read(Id,StartReadOffset,EndReadOffset)
Append(Id,Data)
Delete(Id)
Enumerate()
日志存储库
在一方面中,存储系统100中的一个数据存储库是日志存储库200。图2示出了日志存储库200的一方面的表示210。在本文中所描述的示例中,日志存储库200是在存储系统100中的存储级别。在日志存储库200中,数据被写入一个或多个块,诸如图2中的块212。在各方面中,日志存储库200部件包括基于日志的存储系统。信息或内容可以以多个块(诸如块214、216)被写到日记存储库200。日志存储库200在不受数据所属的块约束的情况下进行写入。块可以是任何大小,并且在一些情况中,块的大小是基于硬件设备的规格,例如,以匹配SSD的写入块。日志存储库200可以是预写日志,其中写入可以快速出现,但是需要更多的存储器资源来跟踪与文件系统100相关联的一个或多个存储设备(例如闪存)上的数据的位置。下文所描述的散列存储库300和日记存储库400的各方面可以减少数据存储的内存要求,但是可能需要来自一个或多个存储设备(诸如闪存存储)的更多读取来定位数据。
在各方面中,以占用或者是一个块(诸如,在示例中为擦除块)的大小的数量或组块来完成写入。在各方面中,例如,通过占用大约一个擦除块、两个擦除块或另一数目的擦除块以与一个块(诸如擦除块)的大小成比例的数量来完成写入。擦除块可以包括例如一个或多个数据块或盘区,其又包括一个或多个块(在一些情况中,由存储设备或系统一次擦除的最小分配单元)。例如,一个或多个存储设备(例如,存储设备122)可以与存储系统100相关联。系统中的块和/或擦除块的精确大小可以基于(多个)分区大小和/或系统的配置来进行变化。在一些情况中,盘区可以等同于可以追加到日志存储库200或追加块的块大小,或者盘区可以等同于用于日志存储库200中的写入操作的当前或活动的追加块。数据块或擦除块的特定大小不需要执行本文中所描述的本发明的各方面,并且可能受到存储设备考虑的影响。在本发明的各方面中,如果数据与擦除块大小不匹配或者与块大小(诸如擦除块大小)不成比例,则擦除块的一部分可以留空或空白,以使得下一次写入能够出现在另一擦除块的开始。
在一个示例中,写入操作至少以写入块的大小执行,诸如4千字节,而擦除块可以是256千字节。在与存储系统(诸如存储设备122)相关联的一些存储设备中,可以再次写入整个擦除块以添加一个字节或一个写入块,而在本文中所描述的各方面可以将新的写入操作顺序地添加到日志存储库200,包括对现有数据的编辑或删除,而非重写日志存储库200中的整个块。次序可以是依序的(诸如操作被接收或请求的次序),或者次序可以以允许一定程度的分组或排序或未决写入操作的方式基于写入操作集合的次序,例如,基于与存储设备相关联的擦除块的大小(或与大小成比例)来以块大小写入更高比例的数据。
当程序、应用或API导致或执行任何大小或任意大小的写入时,可以在与存储系统(诸如存储系统100)相关联的存储设备上导致更多的磨损。可以使用各种方法或途径,其中一些被称为磨损均衡,以减少磨损。存储系统100的控制器或管理器110可以在数据被写到与一个或多个存储设备相关联的盘区存储库之前、或者当数据被写到与一个或多个存储设备相关联的盘区存储库时,将要被作为块(诸如下文所描述的数据块)写入的数据组织或标识为将包括一个或多个擦除块的数量。在一些方面中,写入请求或命令可以被延迟或分组以便增加或优化用于将日志存储库200写到盘区存储库的整个擦除块增量的数量。例如,可以根据解决“背包”问题的途径完成与数据存储库(诸如日志存储库200)相关联的写入,例如,其中系统使用或尝试使用每个擦除块的最高数目的数据块来优化日志存储库200中的数据存储。
日志存储库200(或本文中所描述的其他数据存储库)可以与一个或多个存储设备(例如,图1B中的存储设备122、124、126)相关联。图2中所示的日志存储库200中的每个块(例如,块212)包括元数据(例如,元数据218)和数据(例如,数据220)。附加块214包括元数据222和数据224,并且另一块216包括元数据226和数据228,多达日志存储库200中的任何数目的块。
日志存储库200的内存方面可以包括日志存储库200中的数据的内存表示,其可以允许在一个或多个日志存储库200上执行读取操作。在一些方面中,散列被用来定位数据,诸如布谷鸟散列或跳房子散列。任何散列都可以用来查找数据。附加地,布谷鸟散列可以添加具有某种复杂水平的新数据,诸如具有0(1)或恒定时间复杂度的数据。可以使用具有读取能力和写入能力的跳房子散列或其他散列。在启动时,可以重新读取日志存储库(诸如日志存储库200),并且可以重新填充布谷鸟散列。
日志存储库(诸如日志存储库200)维持每个块的偏移量,其可以包括存储偏移量。偏移量可以指向或标识存储器中的数据的位置,例如,在何处读取特定数据。日志存储库200按插入次序维持一个数据单元内的数据。用于定位最后存储或写入的数据或读取数据的偏移量可以根据一个或多个固态驱动器、嵌入式编程和/或固件的特点来配置。
本发明的各方面处理在长度上变化和/或随着时间而增长的数据值。例如,在仅追加存储系统中,可以将数据添加到最终数据或最新近数据,但不能将其放置或插入到存储系统100中现有数据的中间。可以以任何数量添加或追加数据,并且可以在一段时间内添加数据而没有时间限制(或者相对较长的时间限制)。因此,本发明的各方面被配置成以可变长度和/或随时间接收对日志存储库200的数据写入。
在一些情况中,数据被写入日志存储库(诸如日志存储库200),使用最小大小(诸如四千字节)的数据组块,同时跨一定数量的写入来组合数据,以便优化一次写入的数据的大小。数据可以被延迟和/或在缓冲区中组合或通过其他设备或过程来组合,以便优化写入操作。例如,等待更多的写入操作以累积可以提供更多的选项,其用于将数据对准到某些块大小(同时浪费更少的空间);但是组合或分组更多的写入操作可以增加写入操作或日志存储库200中的数据存储的复杂度。没有依序写入或主要依序写入的数据的数量可以是优化写入块大小、同时牺牲快速写入和/或读取(诸如更多或纯粹依序地)数据的某些方面的折衷。
如下文在一个示例中所描述的,存储系统100可以容忍一些故障。日志存储库200可以在一些情况中例如基于写入与一个或多个存储设备(诸如存储设备122)相关联的盘区存储库的数据来重新创建或重建其状态。如果数据是可恢复的,则日志存储库200可以验证数据并且日志存储库200可以在一些情况中绕过故障或损坏操作。日志存储库200可以在损坏时恢复并且验证日志存储库200中存储的数据,或之后(如果可以恢复),并且继续解决与存储系统100相关联的任何存储设备中的任何损坏或由于与存储系统100相关联的任何存储设备而导致的任何损坏。在一些情况中,尽管出现故障,但是日志存储库200可以基于所保存的数据来例如通过继续操作和恢复的组合根据运转需要而恢复和/或处理可能的最大数量的数据。
在存储系统(诸如存储系统100)中,单个写入操作可能失败。在各方面中,恢复过程可能出现。失败的写入可以通过存储系统100(例如,控制器或管理器110)检测或者通过该系统来报告。例如,日志存储库200可以在写入故障之前恢复到其大小。在一些方面中,尝试将文件大小修改为失败的写入之前的时间,并且将故障报告给日志存储库200中的控制器。日志存储库200的控制器(例如,控制器112)可以使得新的日志存储库200在存储系统100中生成,其可以与存储系统100中与一个或多个存储设备(诸如存储设备124)相关联的不同的盘区存储库相关联。在各方面中,再次在新的日志存储库200中执行一个或多个失败的写入操作,其可以隐藏系统用户的故障。
如上文所描述的,由日志存储库200接收的数据通常被依序存储。日志存储库200可以生成诸如图2所示的文件格式之类的文件格式的数据的实例。日志存储库200中的数据的实例被一次可以写入一个操作(例如,数据被先入先存),除非在将日志存储库200的写入实例(其一起被称为批处理写入)写到与一个或多个存储设备相关联的盘区存储库之前,存储系统100中的优化(例如,要写入的一个或多个数据块的大小)证明在存储系统100中累积了多于一个的写入功能。当日志存储库(诸如日志存储库200)装满数据或达到某个大小或空间极限或对象极限时,日志存储库200可以被密封,以使不能将附加数据写到日志存储库200。在一些情况中,当布谷鸟散列未能将数据插入到日记存储库200中时,或者当达到预先确定的大小(诸如介于1千兆字节和20千兆字节之间的值)时,或者当存储系统200接收到指示日志存储库已满的另一信号时,日志存储库被认为是满的。在一些情况中,日志存储库200被写到与存储设备(诸如存储设备122)相关联的盘区存储库,并且当存储设备达到某个大小或空间或对象极限时,达到极限。
日志存储库200(或存储系统100中的其他数据存储库)中的数据在对日志存储库200的写入操作期间不被删除。如上文所讨论的,写入操作是仅追加的并且基本上(或完全)依序的,并且没有数据在对日志存储库(诸如日志存储库200)写入期间被删除。相反,可以将删除操作记录为删除操作,而此时不进行删除操作。在删除时,数据可以或不可以驻留在日志存储库200中。然而,删除记录将确保当诸如散列存储库300或日记400之类的其他数据结构出现变化时,与删除操作相关联的数据将被删除或不被写入。当日志存储库200被填满和/或被密封时,关于删除操作的信息被包含在日志存储库200中或者被注释到日志存储库200中,并且当日志存储库200中的数据被转换或者变换到散列存储库(诸如下文所讨论的散列存储库300)时,可以执行删除操作。
散列存储库
可以将日志存储库200中的数据从日志存储库200转换或复制到图3中所示的散列存储库300,该散列存储库300包括散列存储库300的一方面的表示310。日志存储库(诸如日志存储库200)在一些情况中通过基于日志存储库200中的数据来生成散列存储库300的实例而被转换成散列存储库(诸如散列存储库300)。散列存储库300在各方面中使用不可变的数据结构。在各方面中,在被称为“散列存储库”的散列存储库300中生成多个单独的“散列存储库”(或者包括可以标识数据的标识符的时隙的散列表或映射)。散列存储库300中的每个散列存储库可以是从日志存储库200复制的数据的内存优化。可以将散列存储库300的实例写到与一个或多个存储设备(在一些情况中,相同的存储设备,诸如与日志存储库200的实例相关联的存储设备122)相关联的盘区存储库。在一些情况中,这包括在与存储系统100相关联的一个或多个盘区存储库中重写数据。散列存储库300比日志存储库使用更少的存储器来跟踪数据,因为散列存储库可以在与存储系统100相关联的一个或多个存储设备(诸如可以是闪存存储的存储设备124)中以“散列次序”布局。
当数据从日志存储库200传送或复制到散列存储库300时,文件系统100中的数据的占用区域可以被减少。可以执行对在日志存储库200中记录或注释的改变、更新和删除操作,例如,通过记录或执行删除操作(在一些情况中,通过不将与删除操作相关联的数据写到散列存储库300)。当从日志存储库200复制数据时,散列存储库中的数据的大小和/或模式可以被优化。稍后,在一些情况中,一旦已经被复制到散列存储库(诸如散列存储库300)的数据被写入,就不会对散列存储库做出该数据的稍后编辑或删除。相反,这些编辑或删除在日志存储库200中累积。在某个时刻,许多散列存储库累积,从而需要散列存储库300被压缩以减少数据的重复副本。在将一个或多个散列存储库300压缩到日记存储库400期间,可以进行这些改变。
如上文所描述的,日志存储库200中的数据被依序写入,包括可以作为将日志存储库200转换为散列存储库300的一部分而被处理的删除的编辑和指示符。附加地,日志存储库200中的数据可以被重写为散列存储库300中的数据的实例,其通过对数据进行分组以优化一起存储的数据组块的大小、并且由于一次处理(日志存储库200中的)数据的几个部分,来优化每个散列存储库中的数据的数量(并且最小化与存储系统100相关联的一个或多个盘区存储库中的空的或浪费的空间的数量)。在示例中,每个散列存储库具有在布谷鸟散列中使用的预先确定的大小的某一数目的块,诸如100,000个块。每个数据片段可以具有密钥,诸如例如128或256位长的标识符(例如,全球唯一标识符或GUID)。散列存储库中的每个时隙可以包括与内存数据的位置相对应的密钥。
散列存储库300图示了散列存储库300的示例性文件格式。散列存储库300包括具有头部312、散列314、元数据316和数据部分318的数据的实例。在一个示例中,头部312相对较小(诸如几个字节的数据),并且散列314是包括插入0(1)和读取0(1)的散列,诸如跳房子散列或布谷鸟散列。散列存储库300可以以擦除块的大小或接近擦除块的大小的增量的方式写到盘区存储库。散列存储库300可以与一个或多个盘区存储库相关联,该一个或多个盘区存储库与存储系统100相关联。通过以块的大小的组块的形式将数据推送到盘区存储库,与盘区存储库相关联的非易失性存储器(诸如存储设备124)不会导致重新排序由散列存储库300存储的数据。
在各方面中,日志存储库200被配置成增长或接收对数据的追加,并且其可以存储未知数目的项目或未知数量的数据。另一方面,存储在散列存储库300中的数据具有一定大小和结构;散列存储库可以使用存储器中的基本偏移量值来访问数据。如图3的方面所示,元数据316包括可以标识数据块的一个或多个块或盘区头部320、322以及追加块头部(例如,追加块头部324、326、328)。在各方面中,存在散列存储库300的多个实例(或散列存储库300可以包括多个散列存储库),其写到一个或多个盘区存储库,该一个或多个盘区存储库可以与一个或多个存储设备(诸如存储设备124)相关联(同时一个或多个其他存储设备(诸如存储设备122、126)与一个或多个其他盘区存储库相关联,该一个或多个其他盘区存储库与日志存储库200和/或日记存储库400相关联地使用)。
散列存储库300将数据维持在不可变的数据结构中。与日志存储库200类似,散列存储库300可以利用散列,并且内存部件可以是诸如布谷鸟散列或其他散列(如以图3中的散列314所示)之类的散列。在各方面中,存储器中的散列存储库能够创建一个或多个数据块或盘区标识符(诸如盘区头部320),其可以指向散列存储库300的数据部分318中的特定数据的位置。存储系统100的方面被配置成使得元数据316可以被用来从散列存储库300读取信息或内容。
在示例中,盘区头部320与第一盘区或数据块相关联,而第二盘区头部322与第二盘区或数据块相关联。追加块头部324和追加块头部326分别表示与第一盘区相关联的第一追加块头部和第二追加块头部。追加块头部328表示与第二盘区相关联的第一追加块头部。图3中的盘区头部和追加块头部表示可以在存储系统100的散列存储库(例如,散列存储库300)的各方面中使用的一个或多个头部。针对散列存储库300所示的文件格式是示例,并且可以使用几个头部(与散列存储库中的数据所需的头部一样多)。
在一个方面中,散列存储库300的一方面的表示310示出了写到盘区存储库(例如,与文件系统100相关联的盘区存储库)的内容,该盘区存储库可以与磁盘或存储设备相关联。散列314可以采用被快速访问的格式,并且如果存储系统100需要在存储器中重新创建散列314(例如当计算系统或设备被重新启动时),则散列314可以被使用。在一些情况中,因为只有散列存储库300的散列314被存储在存储器中,所以散列存储库300在存储器中包括比日志存储库200更少的数据。在这方面中,元数据316被写到盘区存储库。可以通过在存储器中的散列存储库300中找到可以向适当的盘区头部(例如,盘区头部322)提供偏移量的所请求的信息,并且从盘区存储库读取盘区头部322,来执行读取操作。盘区头部322可以指示存在多少追加块头部(众所周知的恒定大小),并且可以读取所有追加块头部(例如,324、326)。追加块头部可以指示从数据部分318读取的偏移量。
日记存储库
如关于图4所示的方面所描述的,存储系统100包括日记存储库400,其由日记存储库400的一方面的表示410示出。来自散列存储库300的内容可以被复制或重写为日记存储库400中的内容。在各方面中,日记存储库400与存储系统100中的一个或多个盘区存储库相关联,该存储系统100中的一个或多个盘区存储库可以与一个或多个存储设备(诸如存储设备126)相关联。日记存储库400用于保留较旧的数据(有时被称为冷数据),因为它在其他数据存储库外老化。例如,散列存储库300可以与盘区存储库相关联,该盘区存储库在方面中与相同的存储设备(例如,存储设备124)相关联(该相同的存储设备与日记存储库400相关联),或与一个或多个其他存储设备相关联。日记存储库400可以包括多个日记存储库400。一个或多个日记存储库400可以与文件系统100中的一个或多个盘区存储库相关联,该一个或多个盘区存储库可以与一个或多个存储设备相关联。在这里所描述的示例中,日记存储库400是尚未在存储系统100中删除的数据的最终目的地或停留地点。例如,散列存储库300中的预先确定的数量的散列存储库(在数据被写到日志存储库200,然后被转换为散列存储库300时,随着时间而累积)可以达到使得管理器110引导散列存储库300与另一数据存储级别(在这种情况下是日记存储库400)合并的数量或数据的数量。
日记存储库400将信息存储在文件中,诸如以下两类文件:一个或多个索引文件、以及一个或多个数据或内容文件(例如,如图4所示,索引文件412和数据文件414、416)。日记存储库400中可以存在数据文件的几个实例,诸如代表性数据文件414、416。索引文件(诸如索引文件412)包含描述数据文件的元数据。图4中的索引文件412的示例性表示包括与第一追加块头部420、第二追加块头部422和第三追加块头部424相关联的第一盘区头部418。在一方面中,日记存储库400的内存方面在索引文件(诸如索引文件412)中查找盘区或数据块元数据的位置。在一个示例中,日记存储库400使用散列(诸如具有链接的线性散列)作为快速查看以找到盘区或块元数据的位置。索引文件(例如,索引文件412)包含具有指示或标识对应数据存储在数据文件(诸如数据文件414)中何处的偏移量的所有盘区和追加块元数据。索引文件412可以是内存对象,其指向数据文件414中的对象。在所示的示例中,追加块头部420、422、424与盘区头部418相关联,每个追加块头部标识数据文件414、416中的数据的位置。
在日记存储库400中,可以独立于一个或多个数据文件414、416来更新索引文件412。例如,当数据文件414达到最大大小时,创建新的数据文件416,并且索引文件412可以被更新,或者索引文件412可以基于对多个数据文件414、416中的一个或多个数据文件的改变而被更新。单独地,日记存储库400可以压缩或重新压缩其本身,例如以便在日记存储库400中移除被删除或不必要的块或盘区。在一些情况中,对数据的一部分的写入操作流可以跨越一个或多个数据存储库200、300、400。例如,用户使得程序或应用提供要由存储系统100执行的写入操作。用户在第一时间点对数据的一部分进行第一写入操作,并且与第一写入操作相关联的数据被写到日志存储库200中,然后被复制到散列存储库300中的散列存储库,并且例如如存储系统100所确定的那样被复制到日记存储库400。数据存储库之间的该移动可以指示该数据尚未在间隔(诸如最小的时间段)内被更新。在该示例中,在第二时间点,用户使得对数据的第一部分进行与第一写入操作相关联的后续写入操作(诸如写入操作的流或编辑),该后续写入操作使用仅追加操作而被添加到日志存储库200。在该示例中,数据流可能存在或存在于多于一个数据存储库(例如,日志存储库200、日记存储库400)中。存储系统100被配置成读取数据流,该数据流包括日记存储库400和日志存储库200中的数据,从而作为统一存储系统呈现给用户或API。
压缩
图1A中所示的管理器110可以在各方面中控制存储系统100的压缩过程。压缩过程包括步骤中的一个或多个步骤,诸如结合图5、图6和图7中的示例性过程描述的步骤。数据存储库200、300、400可以被认为是存储系统100的各代,其可以包括作为数据存储级别的分代或分层数据存储库。在一方面中,数据存储库200、300、400在存储系统100中彼此关联,并且可以通过一个或多个压缩过程重写为散列存储库300和/或日记存储库400的实例。
管理器110在各方面中是压缩管理器,并且它可以包括用于协调日志存储库200与散列存储库300的转换、将一个或多个散列存储库300合并到日记存储库400中以及存储系统100的压缩的指令或软件。当多于一个散列存储库已经累积时,压缩可能是有用的或重要的,以便使得与散列存储库300相关联的存储器120中和/或与存储系统100相关联的一个或多个存储设备中的空间可用。管理器110可以使得日记存储库400压缩到另一日记存储库400中。单个管理器110在各方面中充当整个存储系统100的控制管理器。存储器120可以在数据存储库200、300、400之中分布或划分,使得每个数据存储库包括存储器120的各方面或与每个数据存储库相关联的单独的存储器。例如,被描述为存在于存储器中的数据存储库的各方面在一些情况中可以存在于与数据存储库相关联的存储器中。
在各方面中,管理器110控制用于将数据从一个数据存储库转换或重写(包括合并)到不同的数据存储库的策略。用于转换或重写或用于实现或执行策略的机构可以是存储系统100中的每个数据存储库200、300、400的一部分。如上文所描述的,管理器110确定日志存储库200何时变为散列存储库300。管理器110确定或控制成为日记存储库400的散列存储库300、或成为日记存储库400的一个或多个散列存储库300。管理器110还可以确定新的或附加的数据存储库何时被创建,诸如第二日志存储库200何时开始,并且管理器110可以确定数据存储库(诸如日记存储库400)何时压缩或重新压缩自身。(多个)压缩过程使得移除已删除的数据块并且减少存储系统100的存储器大小或占用区域。
例如,在日志存储库200处接收数据。管理器110可以在存储系统100中接收到数据之前和/或之后控制或命令该数据。日志存储库200可能无法将新条目插入到日志存储库散列(诸如布谷鸟散列)中,或者日志存储库200的大小可以达到预先确定的大小。预先确定的大小可以在存储系统100中预先设置,当一个或多个存储设备与存储系统100相关联时被编程或设置,或者随着时间或者基于存储系统100中的条件而动态变化。如上文所陈述的,存储在日志存储库200的数据可以被压缩成存储在散列存储库300中的数据。
管理器110可以控制日志存储库200并且允许执行读取操作,但是基于日志存储库200达到的大小或其他极限来禁止对存储在日志存储库200中的数据进行附加的写入操作。散列存储库300在管理器110的指导下或者由管理器110配置下从日志存储库创建。通过写到与相同存储设备(例如,存储设备122)或一个或多个新的或不同的存储设备相关联的一个或多个盘区存储库,日志存储库200中的数据可以直接复制或推送到散列存储库300。存储器120中的充满缓冲可以在压缩存储在日志存储库200中的数据期间出现,其取决于考虑与希望与整个或完整块大小的数据组块一起工作相平衡的性能。管理器110可以实现优化,诸如使得散列存储库300以块或擦除块的大小的组块、或者在一段时间内尽可能接近块或擦除块的大小的组块的方式写入要与散列存储库300相关联的数据。
散列存储库300包括一个或多个散列存储库,诸如上文关于图3描述的示例性散列存储库300。当日志存储库200中的数据已经被移动到散列存储库300时,可以写入到散列存储库300的脚注包括可以在崩溃的事件中使用的特定号码(诸如幻数),以检查或确认散列存储库300中的数据。管理器110可以生成幻数和/或将脚注写到散列存储库300。附加地,管理器110在各方面中例如通过擦除与用于损坏的数据块或字节的数据存储库200、300(例如,一个或多个SSD)相关联的一个或多个存储设备122、124、126来具有完整性,并且如果检测到损坏,则可以将数据标识为本地丢失或损坏,并且远程复制(或提供数据冗余的其他来源)可以用来替换数据。
在一方面中,当散列存储库300中的一个或多个散列存储库达到预先确定的寿命时,它们被压缩到日记(例如,日记存储库400)中。在各方面中,管理器110可以使得散列存储库被添加到现有日记存储库400,和/或管理器110可以使得日记存储库400基于一个或多个散列存储库300来被创建。当数据被添加到日记存储库400时,可以创建或更新新的索引412。在一些情况中,当日记存储库400包含已经被删除的一定数量或百分比的数据块时,日记存储库400重写自身(在管理器110的指导下或者不在管理器110的指导下)。日记存储库400可以在与日记存储库400相关联的一个或多个盘区存储库中的总体空闲空间水平达到极限时重写自身,例如以便移除未使用的数据并且智能地组合剩余的数据。
重写可以牵涉到索引文件(诸如索引文件412)以及日记存储库400中的数据文件中的一些或全部数据文件(诸如数据文件414、416)。例如,重写日记存储库400数据实例可以牵涉到重写索引文件412和数据文件414而非数据文件416。基于与日记存储库400相关联的一个或多个盘区存储库中的空间水平(可用或不可用)、或时间数量或时间约束、或要对存储在存储系统100中的一个或多个数据存储库中的数据执行的删除操作的数量,可以由管理器110来命令或执行重写。例如,管理器110指导一个或多个日记(诸如日记存储库400)压缩到其他日记中。在各方面中,单个数据文件(例如,图4中的数据文件414)被重新创建(并且先前数据文件被删除),其可以允许一个或多个相关联的盘区存储库(与一个或多个存储设备122、124、126相关联)中的较小百分比的空间被日记存储库400占用,以被保留或用于压缩。
图5在500处图示了存储系统100的方面。图5示出了日志存储库部件510,其包括日志存储库部件510的实例512的表示,其包括数据和元数据,该数据和元数据可以被写到盘区存储库514。图5还包括散列存储库部件516,该散列存储库部件516包括散列存储库部件516的实例518的表示,其具有可以被写到盘区存储库514的头部、散列、元数据和数据。另一示例性数据存储库由日记存储库部件520图示,该日记存储库部件520包括图5中的日记存储库部件520的实例522的表示,其包括索引和数据文件,该索引和数据文件还能够被写到盘区存储库514。如别处所描述的,盘区存储库514可以与存储系统100中的一个或多个存储设备或容器(诸如存储设备122)相关联。
图6在600处图示了本发明的各方面。如610处所示,用户使得程序或应用向存储系统100发送写入操作。数据可以被缓存,诸如在与日志存储库200相关联的存储器中,以优化写入操作和日志存储库200中的数据组块的大小(在612处)。在614处,生成日志存储库实例,其包括元数据部分和数据部分,并且在616处,定义一个或多个日志存储库200数据实例的元数据部分的布谷鸟散列,并且在618处,日志存储库实例被写入到盘区存储库中。在620处,确定出现了具有与日志存储库200相关联的物理写入的写入故障、或者确定日志存储库容量阈值已被满足。
图7在700处图示了本发明的各方面。如710处所示,本发明的各方面包括:生成用于一个或多个日志存储库数据实例的散列存储库300实例,其包括单个文件,该单个文件具有头部、散列部分、散列元数据部分和散列数据部分。在一些情况中,如620处所示进行确定之后,如710所示生成散列存储库300数据实例。
在712处,确定几个日志存储库数据实例的元数据部分的大小,并且在714处,计算用于元数据部分的磁盘偏移量。如716处所示,复制几个日志存储库数据实例的元数据部分和数据部分,并且如718处所示,确定基于所计算出的磁盘偏移量的元数据部分和数据部分。如720处所示,散列存储库300数据实例被写入盘区存储库。在722处,确定多个散列存储库数据实例作为散列存储库数据实例已经满足阈值极限时间,或者确定多个散列存储库数据实例的计数已经满足阈值极限。例如,可以确定散列存储库300中的一个或多个散列存储库已经达到预先确定的寿命,或者确定散列存储库的数目超过所定义的极限,或者确定散列存储库300中的散列存储库所占据的存储的总大小已经超过了极限。
如图8所示,本发明的说明性方面800包括:在810处,生成用于多个散列存储库数据实例的日记存储库数据实例,其包括具有指向日记数据部分的偏移量的日记索引部分和日记数据部分。在一些情况中,日记存储库400数据实例可以基于在722处做出的确定来生成。各方面还包括:如812处所示,将多个散列元数据部分的散列元数据部分合并成日记存储库数据实例的索引文件部分,以及如814处所示,将散列元数据部分的散列数据部分添加到数据文件中。在816处,日记存储库400数据实例被写入到盘区存储库中。
如图8的818处所示,确定物理存储库中的空间约束阈值极限已被满足(诸如与存储系统100中的一个或多个数据存储库(诸如日记存储库400)相关联的一个或多个存储设备(例如,存储设备126)中的极限)、或者确定预先定义的时间极限阈值已被满足。如820处的一个方面所示,通过重写日记存储库数据的索引文件部分和数据文件,日记存储库数据实例可以被压缩。压缩可以包括:执行与日记存储库数据实例相关联的一个或多个未决删除操作,例如,通过不复制或写入与一个或多个删除操作相关联的数据。
示例性读取路径
在图9中示出了在本发明的各方面中使用的示例性读取路径900。存储系统100可以首先在最近写入的日志存储库200中查找数据。在各方面中,日志存储库200中的数据可能包括最近的或最新的数据,诸如稍后的编辑,其包括对另一数据存储库(诸如日记存储库400)中的数据的删除。在910处,用户使得存储系统100接收读取存储系统100中的数据的请求。在912处,在存储系统100中标识与读取请求相关联的块或盘区。存储系统100中的管理器110或其他指示符可以用于确定该盘区是否被日志存储库200存储。如果盘区由日志存储库200存储,则读取功能可以仅使用日志存储库200来完成,从而提供快速响应时间并且不必执行步骤914至918。
如果数据块或盘区未被成功地定位为由日志存储库200所存储,则如914处所示,散列存储库300中的一个或多个散列存储库可以下次被检查或彼此并行地进行检查,并且一旦被定位,读取操作即可以完成。在散列存储库300中存在多个散列存储库的情况下,读取操作可能必须在查看日记存储库400之前在多个散列存储库中的每个散列存储库中查找盘区,其可能减缓读取操作(尽管这些读取可以被并行执行)。散列存储库300中的散列存储库可以依次或同时被读取,其取决于存储系统100中设置的折衷和准则。例如,同时读取多个散列存储库可能较慢。由于散列存储库300具有少量的内存元数据,所以在一些情况中,读取操作不需要去往或检查与文件系统100相关联的一个或多个存储容器(诸如可以是闪存的存储设备126),以确定数据是否驻留在特定散列存储库300中。
在一些情况中,为了最小化对存储系统100执行读取操作所需的步骤,在散列存储库300中具有更少的散列存储库是优选的。在918处,如果在日志存储库或散列存储库中未成功读取盘区,则检查日记存储库400,并且当该盘区被定位时,它可以从包括日记存储库400的任何数据存储库200、300、400(如820处所示)或者从多于一个的数据存储库(例如,日志存储库200、散列存储库300和/或日记存储库400的组合)读取。在本发明的各方面中,可以对日志存储库200、散列存储库300和/或日记存储库400并行执行存储系统100中的读取操作。
如上文所描述的,一个或多个API可以用于追加数据、读取数据、删除数据和/或枚举数据。API可以作为统一存储系统与存储系统100交互,并且存储系统100可以使用上文所描述的功能性来响应于包括编辑和删除在内的写入操作而执行数据存储。API允许用户将数据追加到存储系统100中的数据块(当相关联的程序或应用通过总线118或其他方式将用户请求传达到存储系统100时)。在示例中,用户请求读取数据片段,例如,对被表示为读取单元或由读取单元表示的数据片段的请求,并且通过该请求,用户(或与用户请求相关联的系统或应用)提供用于数据的标识符(诸如密钥值)、偏移量和用于数据的读取长度值。存储系统100使得日志存储库200、散列存储库300和日记存储库400能够被检查或考虑包含标识符的任何数据片段。
示例
在本文中所描述的存储系统100的各方面中,一种用于将数据存储在多层存储系统中的计算机实现的方法,包括:生成包括多个数据实例的日志存储库数据实例,其中数据实例包括元数据部分和数据部分;以及将日志存储库数据实例写入到盘区存储库中。该方法包括:生成用于一个或多个日志存储库数据实例的散列存储库数据实例,其中散列存储库数据实例是具有头部、散列部分、散列元数据部分和散列数据部分的单个文件;以及将散列存储库数据实例写入到盘区存储库。在各方面中,该方法还包括:生成用于多个散列存储库数据实例的日记存储库数据实例,其中日记存储库数据实例是包括日记索引部分和日记数据部分的文件格式,日记索引部分包括具有指向对应的日记数据部分的偏移量的多个散列元数据部分;以及将日记存储库数据实例写入到盘区存储库。
在一些情况中,将日志存储库数据实例写入到盘区存储库包括:定义用于多个数据实例的元数据部分的布谷鸟散列。在各方面中,日志存储库数据实例的大小实质上是日志存储库数据实例的存储设备(诸如存储设备122)的块大小的大小。在一些情况中,诸如布谷鸟散列之类的散列包括指向对应的散列元数据部分的文件偏移量,并且散列元数据部分包括与对应的散列数据部分的散列元数据偏移量。写入日记存储库数据实例可以包括:将日志存储库数据实例追加到现有日志存储库数据实例的末尾。写入日志存储库数据实例、散列存储库数据实例和日记存储库数据实例可以包括:将日志存储库数据实例、散列存储库数据实例和日记存储库数据实例写入到一个或多个物理存储容器(诸如一个或多个存储设备122、124、126)中以压缩格式的追加块中,其中压缩格式的追加块与对应的逻辑未压缩大小相关联。
在各方面中,生成用于一个或多个日志存储库数据实例的散列存储库数据实例是基于将一个或多个日志存储库数据实例转换为散列存储库数据实例,其包括:确定日志存储库数据实例的元数据部分的大小,计算用于元数据部分的磁盘偏移量,复制日志存储库数据实例的元数据部分和数据部分,以及基于所计算出的磁盘偏移量来写入元数据部分和数据部分。生成散列存储库数据实例还包括:检查日志存储库数据实例中的删除记录,并且不复制已经被删除的数据。在一个示例中,生成日记存储库实例是基于将多个散列存储库数据实例合并到日记存储库数据实例,其可以包括:用来自散列存储库数据实例元数据部分的信息更新日记存储库实例中的元数据,以及将散列元数据部分的散列数据部分添加到数据文件中。
在另一示例中,压缩日记存储库数据实例是基于重写日记存储库数据的索引文件部分和数据文件,并且压缩日记存储库实例包括:执行与该日记存储库实例相关联的一个或多个未决删除操作。在一些情况中,盘区存储库包括作为存储设备(诸如存储设备122、124、126)的一个或多个固态驱动器。
在另一方面中,计算机存储介质包括计算机可执行指令,其使得一个或多个处理器执行一种用于将数据存储在多层存储系统中的方法。该方法包括:将日志存储库数据实例转换为散列存储库数据实例,其中日记存储库数据实例包括元数据部分和数据部分,并且其中转换日志存储库数据实例包括:确定日志存储库数据实例的元数据部分的大小,计算用于元数据部分的磁盘偏移量,复制元数据部分和数据部分,以及基于所计算出的磁盘偏移量来写入元数据部分和数据部分。该方法还可以包括:将多个散列存储库数据实例合并到日记存储库数据实例,其中散列存储库数据实例包括具有头部、散列、散列元数据部分和散列数据部分的单个文件。合并多个散列存储库数据实例可以包括:将多个散列元数据实例的散列元数据部分合并到日记存储库数据实例的索引文件部分中,以及将多个散列元数据实例的散列数据部分添加到数据文件中。
在另一方面中,该方法包括:基于重写日记存储库数据的索引文件部分和数据文件来压缩日记存储库数据实例。在一些情况中,基于确定日志存储容量阈值已被满足、或者确定与对关联于日志存储库200的存储设备的物理写入相关联的写入故障的出现,触发将日志存储库数据实例转换为散列存储库数据实例。将散列存储库数据实例合并到日记存储库数据实例可以基于以下各项来触发:确定多个散列存储库数据实例作为散列存储库数据实例已经满足阈值极限时间,确定多个散列存储库数据实例的计数已经满足阈值极限,或者确定阈值数量的删除密钥与散列存储库数据实例相关联。在一些情况中,基于确定物理存储库(诸如与日记存储库400相关联的一个或多个存储设备126)中的空间约束阈值极限已被满足或者确定触发压缩的预先定义的时间极限阈值已被满足,来触发压缩日记存储库数据实例。
本发明的示例性方面包括一种用于将数据存储在多层存储系统中的系统,该系统包括:处理器和存储器,该存储器被配置成用于向处理器提供计算机程序指令;以及日志存储库部件(例如,图5中的日志存储库部件),该日志存储库部件被配置成用于生成包括多个数据实例的日志存储库数据实例,其中每个数据实例包括元数据部分和数据部分;以及将日志存储库数据实例写入到盘区存储库(例如,如图5中的日志存储库数据实例512和盘区存储库514所示)中。系统还可以包括散列存储库部件,其被配置成用于:生成用于一个或多个日志存储库数据实例的散列存储库数据实例,其中散列存储库数据实例(例如,散列存储库数据实例518)是具有头部、散列部分(诸如布谷鸟散列部分、或具有插入0(1)和读0(1)的其他散列)、散列元数据部分和散列数据部分的单个文件;以及将散列存储库数据实例写入到盘区存储库514中。散列存储部件可以基于与日志存储库部件相关联的第一条件来生成。系统可以包括日记存储库部件,其被配置成用于:生成用于多个散列存储库数据实例的日记存储库数据实例(例如,日记存储库数据实例522),其中日记存储库数据实例是包括日记索引部分和日记数据部分的文件格式,该日记索引部分包括具有指向对应的日记数据部分的偏移量的多个散列元数据部分;以及将日记存储库数据实例写入到盘区存储库514中。每个数据存储部件可以与单独的盘区存储库和/或与单独的存储设备或容器相关联,该单独的存储设备或容器与盘区存储库514相关联。
它们的系统可以包括盘区存储库部件,其被配置成用于存储日志存储库数据实例、散列存储库数据实例和日记存储库数据实例,包括将日志存储库数据实例以压缩格式作为追加块写入一个或多个物理存储容器中,其中压缩格式的追加块与对应的逻辑未压缩大小相关联。该系统还可以包括压缩部件,其中生成用于一个或多个日志存储库数据实例的散列存储库数据实例是基于压缩部件将一个或多个日志存储库数据实例转换为散列存储库数据实例,其中转换一个或多个日志存储库数据实例包括:确定一个或多个日志存储库数据实例的元数据部分的大小,计算元数据部分的磁盘偏移量,复制一个或多个日志存储库数据实例的元数据部分和数据部分,以及基于所计算出的磁盘偏移量来写入元数据部分和数据部分。
该系统可以包括:生成日记存储库实例是基于压缩部件将多个散列存储库数据实例合并到日记存储库数据实例,其中合并多个散列存储库数据实例包括:将多个散列元数据部分的散列元数据部分合并到日记存储库数据实例的索引文件部分中,以及将散列元数据部分的散列数据部分添加到数据文件中。在各方面中,压缩部件基于重写日记索引部分和日记数据部分来压缩日记存储库数据实例。
从上述内容可以看出,本发明很好地适用于实现上文所陈述的所有的目的和目标,以及系统和方法明显并且固有的其他优点。将理解的是,某些特征和子组合具有实用性,并且可以在不参考其他特征和子组合的情况下采用。这通过权利要求的范围进行设想并且落入权利要求的范围内。
Claims (15)
1.一种用于将数据存储在多层存储系统中的计算机实现的方法,所述方法包括:
生成日志存储库数据实例,所述日志存储库数据实例包括多个数据实例,其中数据实例包括元数据部分和数据部分;
将所述日志存储库数据实例写入盘区存储库中;
生成用于一个或多个日志存储库数据实例的散列存储库数据实例,其中所述散列存储库数据实例是单个文件,所述单个文件具有头部、散列部分、散列元数据部分和散列数据部分;
将所述散列存储库数据实例写入所述盘区存储库中;
生成用于多个散列存储库数据实例的日记存储库数据实例,其中所述日记存储库数据实例是文件格式,所述文件格式包括日记索引部分和日记数据部分,所述日记索引部分包括多个散列元数据部分,所述多个散列元数据部分具有偏移量,所述偏移量指向对应的日记数据部分;以及
将所述日记存储库数据实例写入所述盘区存储库中。
2.根据权利要求1所述的计算机实现的方法,其中将所述日志存储库数据实例写入盘区存储库中包括:定义用于所述多个数据实例的元数据部分的散列,其中所述散列是布谷鸟散列。
3.根据权利要求1所述的计算机实现的方法,其中所述日志存储库数据实例的大小基本上与存储设备的块大小的大小成比例,所述存储设备与所述日志存储库数据实例相关联。
4.根据权利要求1所述的计算机实现的方法,其中所述散列部分包括文件偏移量,所述文件偏移量指向对应的散列元数据部分,并且其中所述散列元数据部分包括与对应的散列数据部分的散列元数据偏移量。
5.根据权利要求1所述的计算机实现的方法,其中写入所述日记存储库数据实例包括:将所述日记存储库数据实例追加到现有日记存储库数据实例的末尾。
6.根据权利要求1所述的计算机实现的方法,其中写入所述日志存储库数据实例、所述散列存储库数据实例和所述日记存储库数据实例包括:将所述日志存储库数据实例、所述散列存储库数据实例和所述日记存储库数据实例写入到一个或多个物理存储容器中压缩格式的追加块中,其中压缩格式的所述追加块与对应的逻辑未压缩大小相关联。
7.根据权利要求1所述的计算机实现的方法,其中生成用于所述一个或多个日志存储库数据实例的所述散列存储库数据实例是基于:
将所述一个或多个日志存储库数据实例转换成所述散列存储库数据实例,其中转换所述一个或多个日志存储库数据实例包括:
(a)确定所述一个或多个日志存储库数据实例的所述元数据部分的大小;
(b)计算用于所述元数据部分的磁盘偏移量;
(c)复制所述一个或多个日志存储库数据实例的所述元数据部分和所述数据部分;以及
(d)基于计算出的磁盘偏移量来写入所述元数据部分和所述数据部分。
8.根据权利要求1所述的计算机实现的方法,其中生成所述日记存储库数据实例是基于:
将所述多个散列存储库数据实例追加到所述日记存储库数据实例,其中追加所述多个散列存储库数据实例包括:
将所述多个散列元数据部分的散列元数据部分合并成所述日记存储库数据实例的所述索引文件部分;以及
将所述散列元数据部分的散列数据部分添加到数据文件中。
9.根据权利要求8所述的计算机实现的方法,还包括:
基于重写所述日记存储库数据的所述索引文件部分和所述数据文件来压缩所述日记存储库数据实例,其中压缩所述日记存储库数据实例包括:执行与所述日记存储库数据实例相关联的一个或多个未决删除操作。
10.根据权利要求1所述的计算机实现的方法,其中所述盘区存储库包括一个或多个固态驱动器。
11.一种或多种计算机存储介质,所述计算机存储介质具有在其上实现的计算机可执行指令,所述计算机可执行指令当被一个或多个处理器执行时,使得所述一个或多个处理器执行用于将数据存储在多层存储系统中的方法,所述方法包括:
将日志存储库数据实例转换成散列存储库数据实例,所述日志存储库数据实例包括元数据部分和数据部分,其中转换所述日志存储库数据实例包括:
(a)确定所述日志存储库数据实例的所述元数据部分的大小;
(b)计算用于所述元数据部分的磁盘偏移量;
(c)复制所述元数据部分和所述数据部分;
(d)基于计算出的磁盘偏移量来写入所述元数据部分和所述数据部分;
将多个散列存储库数据实例合并到日记存储库数据实例,散列存储库数据实例包括单个文件,所述单个文件具有头部、散列、散列元数据部分和散列数据部分,其中合并所述多个散列存储库数据实例包括:
将所述多个散列元数据实例的散列元数据部分合并成所述日记存储库数据实例的索引文件部分;以及
将所述多个散列元数据实例的散列数据部分添加到数据文件中。
12.根据权利要求11所述的计算机存储介质,还包括:
基于重写所述日记存储数据的所述索引文件部分和所述数据文件来压缩所述日记存储库数据实例。
13.根据权利要求11所述的计算机存储介质,其中基于以下各项中的一项来触发将所述日志存储库数据实例转换成散列存储库数据实例:
确定日志存储库容量阈值已被满足;或者
确定与物理写入相关联的写入故障的出现,所述物理写入与所述日志存储库相关联。
14.根据权利要求11所述的介质,其中基于以下各项中的一项来触发将所述散列存储库数据实例合并到所述日记存储库数据实例:
确定多个散列存储库数据实例作为散列存储库数据实例已经满足阈值极限时间;或者
确定多个散列存储库数据实例的计数已经满足阈值极限。
15.根据权利要求12所述的介质,其中基于以下各项中的一项来触发压缩所述日记存储库数据实例:
确定物理存储库中的空间约束阈值极限已被满足;
确定存在删除的阈值数量;或者
确定触发压缩的预先定义的时间极限阈值已被满足。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/741,154 US9824092B2 (en) | 2015-06-16 | 2015-06-16 | File storage system including tiers |
US14/741,154 | 2015-06-16 | ||
PCT/US2016/037458 WO2016205261A1 (en) | 2015-06-16 | 2016-06-15 | File storage system including tiers |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107787489A true CN107787489A (zh) | 2018-03-09 |
CN107787489B CN107787489B (zh) | 2021-06-08 |
Family
ID=56289595
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680035806.1A Active CN107787489B (zh) | 2015-06-16 | 2016-06-15 | 包括层级的文件存储系统 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9824092B2 (zh) |
EP (1) | EP3311306A1 (zh) |
CN (1) | CN107787489B (zh) |
WO (1) | WO2016205261A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109241015A (zh) * | 2018-07-24 | 2019-01-18 | 北京百度网讯科技有限公司 | 用于在分布式存储系统中写入数据的方法 |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10235431B2 (en) * | 2016-01-29 | 2019-03-19 | Splunk Inc. | Optimizing index file sizes based on indexed data storage conditions |
US10296250B2 (en) * | 2016-06-08 | 2019-05-21 | Intel Corporation | Method and apparatus for improving performance of sequential logging in a storage device |
US10182017B2 (en) * | 2016-06-30 | 2019-01-15 | Mellanox Technologies Tlv Ltd. | Estimating multiple distinct-flow counts in parallel |
US10733148B2 (en) * | 2017-03-07 | 2020-08-04 | Salesforce.Com, Inc. | Predicate based data deletion |
US11210270B2 (en) | 2017-03-09 | 2021-12-28 | Microsoft Technology Licensing, Llc | Mapping storage across storage providers |
US10218642B2 (en) | 2017-03-27 | 2019-02-26 | Mellanox Technologies Tlv Ltd. | Switch arbitration based on distinct-flow counts |
US11138076B2 (en) | 2017-06-30 | 2021-10-05 | Redis Ltd. | Methods, systems, and media for controlling append-only file rewrites |
CN107330097B (zh) * | 2017-07-05 | 2020-11-10 | 郑州云海信息技术有限公司 | 一种分布式重删装置、数据指纹存储、读取方法及系统 |
CN109800178B (zh) | 2017-11-17 | 2023-05-16 | 爱思开海力士有限公司 | 垃圾收集方法以及用于混合地址映射的存储器系统 |
CN109800180B (zh) * | 2017-11-17 | 2023-06-27 | 爱思开海力士有限公司 | 用于地址映射的方法和存储器系统 |
US10831735B2 (en) * | 2018-07-25 | 2020-11-10 | EMC IP Holding Company LLC | Processing device configured for efficient generation of a direct mapped hash table persisted to non-volatile block memory |
CN109996089B (zh) * | 2019-02-20 | 2021-09-28 | 视联动力信息技术股份有限公司 | 一种处理操作日志的方法、系统以及一种流媒体服务器 |
EP3682340A4 (en) | 2019-09-12 | 2020-12-02 | Advanced New Technologies Co., Ltd. | LOG-STRUCTURED STORAGE SYSTEMS |
SG11202002587TA (en) * | 2019-09-12 | 2020-04-29 | Alibaba Group Holding Ltd | Log-structured storage systems |
CN111008183B (zh) * | 2019-11-19 | 2023-09-15 | 武汉极意网络科技有限公司 | 一种用于业务风控日志数据的存储方法及系统 |
CN111208946A (zh) * | 2020-01-06 | 2020-05-29 | 北京同有飞骥科技股份有限公司 | 支持kb级别小文件并发io的数据持久化方法及系统 |
CN113448919B (zh) * | 2020-03-25 | 2024-04-12 | 伊姆西Ip控股有限责任公司 | 用于建立和验证索引文件的方法、设备和计算机程序产品 |
US11625370B2 (en) * | 2020-04-07 | 2023-04-11 | Vmware, Inc. | Techniques for reducing data log recovery time and metadata write amplification |
KR20220037184A (ko) | 2020-09-17 | 2022-03-24 | 삼성전자주식회사 | 스토리지 장치, 스토리지 시스템 및 스토리지 시스템의 동작 방법 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030018878A1 (en) * | 2001-07-19 | 2003-01-23 | Sean Matthew Dorward | Method and apparatus for archival data storage |
CN101055589A (zh) * | 2007-05-30 | 2007-10-17 | 北京航空航天大学 | 嵌入式数据库的存储管理方法 |
CN101751307A (zh) * | 2008-12-12 | 2010-06-23 | 比兹肯解决方法有限公司 | 数据存储系统、方法以及数据存储和备份系统 |
CN101799783A (zh) * | 2009-01-19 | 2010-08-11 | 中国人民大学 | 一种数据存储处理方法、查找方法及其装置 |
CN102947821A (zh) * | 2010-03-26 | 2013-02-27 | 日电(中国)有限公司 | 索引服务器及其方法 |
CN104221014A (zh) * | 2012-02-24 | 2014-12-17 | 森普利维蒂公司 | 内容派生的存储器中数据放置的方法和装置 |
CN104572983A (zh) * | 2014-12-31 | 2015-04-29 | 北京锐安科技有限公司 | 基于内存的散列表的构建方法、文本查找方法及相应装置 |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5893086A (en) * | 1997-07-11 | 1999-04-06 | International Business Machines Corporation | Parallel file system and method with extensible hashing |
US6658625B1 (en) | 1999-04-14 | 2003-12-02 | International Business Machines Corporation | Apparatus and method for generic data conversion |
US7873619B1 (en) | 2008-03-31 | 2011-01-18 | Emc Corporation | Managing metadata |
US8219524B2 (en) * | 2008-06-24 | 2012-07-10 | Commvault Systems, Inc. | Application-aware and remote single instance data management |
US9342528B2 (en) | 2010-04-01 | 2016-05-17 | Avere Systems, Inc. | Method and apparatus for tiered storage |
US20100199036A1 (en) | 2009-02-02 | 2010-08-05 | Atrato, Inc. | Systems and methods for block-level management of tiered storage |
US9110919B2 (en) | 2009-10-30 | 2015-08-18 | Symantec Corporation | Method for quickly identifying data residing on a volume in a multivolume file system |
US8463825B1 (en) | 2010-04-27 | 2013-06-11 | Tintri Inc. | Hybrid file system for virtual machine storage |
US8935487B2 (en) * | 2010-05-05 | 2015-01-13 | Microsoft Corporation | Fast and low-RAM-footprint indexing for data deduplication |
CN103688246A (zh) | 2011-05-17 | 2014-03-26 | 桑迪士克科技股份有限公司 | 具有在活跃slc和mlc存储器分区之间分布的小逻辑组的非易失性存储器和方法 |
WO2013070803A1 (en) | 2011-11-07 | 2013-05-16 | Nexgen Storage, Inc. | Primary data storage system with data tiering |
US9767032B2 (en) | 2012-01-12 | 2017-09-19 | Sandisk Technologies Llc | Systems and methods for cache endurance |
US11347443B2 (en) | 2012-04-13 | 2022-05-31 | Veritas Technologies Llc | Multi-tier storage using multiple file sets |
US9262423B2 (en) | 2012-09-27 | 2016-02-16 | Microsoft Technology Licensing, Llc | Large scale file storage in cloud computing |
US9043334B2 (en) * | 2012-12-26 | 2015-05-26 | Industrial Technology Research Institute | Method and system for accessing files on a storage system |
-
2015
- 2015-06-16 US US14/741,154 patent/US9824092B2/en active Active
-
2016
- 2016-06-15 EP EP16733259.2A patent/EP3311306A1/en active Pending
- 2016-06-15 CN CN201680035806.1A patent/CN107787489B/zh active Active
- 2016-06-15 WO PCT/US2016/037458 patent/WO2016205261A1/en active Application Filing
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030018878A1 (en) * | 2001-07-19 | 2003-01-23 | Sean Matthew Dorward | Method and apparatus for archival data storage |
CN101055589A (zh) * | 2007-05-30 | 2007-10-17 | 北京航空航天大学 | 嵌入式数据库的存储管理方法 |
CN101751307A (zh) * | 2008-12-12 | 2010-06-23 | 比兹肯解决方法有限公司 | 数据存储系统、方法以及数据存储和备份系统 |
CN101799783A (zh) * | 2009-01-19 | 2010-08-11 | 中国人民大学 | 一种数据存储处理方法、查找方法及其装置 |
CN102947821A (zh) * | 2010-03-26 | 2013-02-27 | 日电(中国)有限公司 | 索引服务器及其方法 |
CN104221014A (zh) * | 2012-02-24 | 2014-12-17 | 森普利维蒂公司 | 内容派生的存储器中数据放置的方法和装置 |
CN104572983A (zh) * | 2014-12-31 | 2015-04-29 | 北京锐安科技有限公司 | 基于内存的散列表的构建方法、文本查找方法及相应装置 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109241015A (zh) * | 2018-07-24 | 2019-01-18 | 北京百度网讯科技有限公司 | 用于在分布式存储系统中写入数据的方法 |
Also Published As
Publication number | Publication date |
---|---|
US9824092B2 (en) | 2017-11-21 |
WO2016205261A1 (en) | 2016-12-22 |
CN107787489B (zh) | 2021-06-08 |
US20160371291A1 (en) | 2016-12-22 |
EP3311306A1 (en) | 2018-04-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107787489A (zh) | 包括层级的文件存储系统 | |
CN101743546B (zh) | 用于提供快照的文件系统的分层存储管理 | |
US8280858B2 (en) | Storage pool scrubbing with concurrent snapshots | |
US10776315B2 (en) | Efficient and flexible organization and management of file metadata | |
US10248356B2 (en) | Using scratch extents to facilitate copying operations in an append-only storage system | |
US10628378B2 (en) | Replication of snapshots and clones | |
US8799238B2 (en) | Data deduplication | |
US8712963B1 (en) | Method and apparatus for content-aware resizing of data chunks for replication | |
US8639669B1 (en) | Method and apparatus for determining optimal chunk sizes of a deduplicated storage system | |
US10176190B2 (en) | Data integrity and loss resistance in high performance and high capacity storage deduplication | |
US8996790B1 (en) | System and method for flash memory management | |
US7577808B1 (en) | Efficient backup data retrieval | |
JP6598996B2 (ja) | データ準備のためのシグニチャベースのキャッシュ最適化 | |
CN106662981A (zh) | 存储设备、程序和信息处理方法 | |
TW201329714A (zh) | 用於元資料持久性的方法 | |
US9619322B2 (en) | Erasure-coding extents in an append-only storage system | |
US8904128B2 (en) | Processing a request to restore deduplicated data | |
US11841801B2 (en) | Metadata management in non-volatile memory devices using in-memory journal | |
JP6598997B2 (ja) | データ準備のためのキャッシュ最適化 | |
EP2669806B1 (en) | Storage system | |
US20230237020A1 (en) | Container-based erasure coding | |
KR101456104B1 (ko) | 비휘발성 메모리를 위한 듀얼 버퍼링 파일 관리 방법, 파일 관리 시스템 및 대용량 저장 장치 | |
US11803525B2 (en) | Selection and movement of data between nodes of a distributed storage system | |
US20240143213A1 (en) | Fingerprint tracking structure for storage system | |
TWI475419B (zh) | 用於在儲存系統上存取檔案的方法和系統 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |