CN102945201B - 已验证数据集合的非易失性介质日志记录 - Google Patents

已验证数据集合的非易失性介质日志记录 Download PDF

Info

Publication number
CN102945201B
CN102945201B CN201210333854.2A CN201210333854A CN102945201B CN 102945201 B CN102945201 B CN 102945201B CN 201210333854 A CN201210333854 A CN 201210333854A CN 102945201 B CN102945201 B CN 102945201B
Authority
CN
China
Prior art keywords
data acquisition
stored
daily record
volatile memory
data
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.)
Active
Application number
CN201210333854.2A
Other languages
English (en)
Other versions
CN102945201A (zh
Inventor
D.摩斯
K.梅拉
R.纳加
S.费尔马
S.拉帕尔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN102945201A publication Critical patent/CN102945201A/zh
Application granted granted Critical
Publication of CN102945201B publication Critical patent/CN102945201B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1471Saving, restoring, recovering or retrying involving logging of persistent data for recovery
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0613Improving I/O performance in relation to throughput
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及已验证数据集合的非易失性介质日志记录。将数据集合存储在存储集合中(例如被写入到构成RAID阵列的硬盘驱动器的数据集合)可能会通过非顺序写入而降低所述存储集合的性能,特别在存储器件所迅速写入的数据集合之后有顺次跟随的数据集合的情况下尤其如此。此外,由于数据集合和验证器(例如校验和)的非原子写入和其间的故障(比如RAID写入空洞的发生),存储集合可能会表现出不一致。相反,可以在提交到存储集合之前首先把数据集合和验证器写入以存储在存储器件的非易失性介质上。这样的写入可以被顺序地写入到日志,而不管各个数据集合在存储集合中的位置如何;并且故障恢复可以简单地涉及重新提交日志中的各条一致记录以便校正对存储集合的不完整写入。

Description

已验证数据集合的非易失性介质日志记录
背景技术
在计算领域内,许多情形涉及在一个或更多非易失性存储器件(例如基于盘片的磁性和/或光学硬盘驱动器、固态存储器件以及非易失性存储器电路)上存储数据。数据存储的许多细节可以不同,比如字尺寸、寻址方法、将存储器件的存储空间划分成一个或更多分区以及将存储器件内的已分配空间暴露为计算环境内的一个或更多卷。
在许多这样的存储情形中,可以利用各种技术来检测对于数据的非意定改变。例如,器件的读取或存储逻辑中的错误、缓冲区欠载或溢出、存储介质中的瑕疵或者外部干扰(比如宇宙射线)都可能不时导致在存储于存储介质上的数据中或者在从存储介质读取数据中的非有意的改变。因此,在许多这样的情形中,根据涉及对于对应的数据集合(例如不同的字、扇区、区段或其他数据集合)计算的验证器(例如奇偶校验位或校验和)的检错方案将数据存储在存储器件上。所述验证器可以被用来证实数据集合的内容已经被有效地存储到存储器件上和/或从存储器件中读取。作为一个这样的例子,在存储包括一个比特集合的数据集合的情境中,可以对各个比特应用异或(XOR)运算,从而得到可以存储并且与该数据集合相关联的一个奇偶校验位。当后来读取所述数据集合时,可以对其应用另一次异或运算,并且可以将结果与所述奇偶校验位进行比较。任一个比特的改变都会导致这些XOR计算的失配,从而表明数据已被错误地存储、改动或者从存储器件错误地读取。可以标识许多类型的验证器,其在某些特征方面可能有所不同(例如易于计算,标识出数据集合的哪一个比特被改变的能力,以及能够借以校正错误地读取的数据部分的纠错能力)。
检错方案常常被用在廉价盘冗余阵列(RAID)阵列中,比如共用在一起以便获得各种聚集属性(比如改进吞吐量和自动数据镜像)的硬盘驱动器集合。作为一个这样的例子,RAID4阵列涉及两个或更多盘的集合,其中在所述阵列中包括一个盘,该盘不用来存储用户数据,而是用来存储被存储在其他盘上的数据的验证器。例如,对于一个涉及每个存储一兆兆字节数据的四个盘的RAID4阵列,前三个盘的容量被共用从而形成用于用户数据的三兆兆字节存储空间,而第四个盘被包括在所述阵列中以保存用于存储在前三个盘上的各个数据集合的验证器(例如对于分别存储在其他三个盘上的每三个64比特字,第四个盘包括一个验证所述三个64比特字的完整性的64比特验证器)。RAID阵列控制器包括被配置成实施针对所提供的驱动器集合的所选RAID级别的细节的电路(例如在接收到一个数据集合之后,将所述数据自动分配到三个用户数据盘上,计算所述数据集合的验证器,并且将验证器存储在第四个盘上)。所使用的RAID技术还可以实现附加的保护或特征;例如如果RAID4阵列中的任何单个存储器件发生故障,则可以通过使用剩余的存储器件完全重建存储在故障器件上的数据。
发明内容
提供本发明内容以简化形式介绍下面在具体实施方式中进一步描述的一组概念。本发明内容不意图标识出所要求保护的主题内容的关键因素或本质特征,也不意图被用来限制所要求保护的主题内容的范围。
把数据写入到存储器件可能会存在几个低效源头和潜在问题。作为第一个例子,被写入到存储器件的数据集合可能涉及一个数据序列,比如写入到存储器件上的一个物理地址序列的数据。通过根据该序列写入数据集合(例如作为邻接数据块的顺序写入),存储器件可以获得更快的查找时间、更高的吞吐量以及/或者由于查找时间和写入操作的减少而导致的降低功率消耗和物理损耗。然而由于各种情况,存储器件可能把所述数据序列作为两个或更多子序列写入,并且可能无法实现这些效率。作为第一个例子,针对写入数据集合的请求可能包括两个或更多针对写入所述序列的一部分的请求(例如针对写入地址1000-1015的第一请求和针对写入地址1016到1031的第二请求),并且存储器件可以单独提交(commit)所述序列的每一个部分而不是一起提交整个序列。作为第二个例子,存储器件可能接收到几个写入请求,并且在写入序列的第一部分和序列的第二部分之间可能把一个不同的数据集合写入在一个不同位置处,从而在第一部分与第二部分之间导致两次附加的查找。这些和其他情况可以被标识为错失了提升性能效率、功率效率以及存储器件的使用寿命的机会。
在存储基于验证器的存储集合时可能发生的第二个问题涉及存储数据集合及其验证器(或者反之亦然)之间的延迟。作为第一个例子,许多存储器件只支持每次对一个位置(例如处于硬盘驱动器的写入头下方的位置,或者由固态存储器件中的地址寄存器指定的位置)的写入,并且对于数据的顺序存储涉及在验证器之前写入数据集合,或者反之亦然。作为第二个例子,如果数据集合和验证器被存储在不同的存储器件上,则可能难以把第一存储器件存储数据集合的时刻与第二存储器件存储数据集合的验证器的时刻同步。在这些和其他例子中,存储数据集合和相应的验证器可能不是按照同步方式发生的,而是按照顺序方式发生的。然而在存储数据集合之后并且在存储验证器之前可能发生(一个或多个)存储器件的故障,比如掉电、硬件故障、软件崩溃、或者从阵列当中意外地去除存储器件。因此,验证器与验证器所表示的数据不匹配。由非原子写入导致的这一问题有时被标识为RAID写入空洞,其可能在所导致的许多后果当中显现。例如,(一个或多个)存储器件可能难以确定如何补救这一错误,例如所述失配表示错误的验证器、数据集合的非意定改变(例如存储集合的误比特率(BER)的显现)还是对于数据集合或验证器的错误读取。这一信息缺乏甚至可能危害最近没有被写入的数据集合的一部分的准确性的置信度。例如,如果其中一个存储器件发生故障,则针对(利用错误的验证器)从剩余的存储器件恢复该存储器件上的数据的尝试可能导致错误的数据重建。例如,为了从已经丢失或受到破坏的特定卷恢复数据并且用修复的或替换存储器件来替代,可以通过把相同位置(例如其他器件上的相同物理或逻辑地址)处的各个字与所述地址处的字集合的校验和XOR在一起来计算所丢失的存储器件上的数据的每一个字,并且该结果得到丢失的字。然而如果校验和已经非有意地改变,则所述XOR运算得到错误的结果,并且会用错误的数据来替换所替代卷上的字。作为另一个例子,如果对于包括部分A和B的数据集合存储验证器C,并且在更新A和C时发生灾难性故障,则计算机可能能够识别出数据集合[A,B]与验证器C之间的失配。这一无能可能不仅会削弱在灾难性故障时正参与写入的A和C的置信度,而且还会削弱可能甚至长时间没有被访问过的B的置信度。
这里给出了用于降低由于比如RAID写入空洞之类的问题所导致的数据丢失和恢复时间延长的风险以及提高存储集合的效率的技术。根据这些技术,在存储集合当中的一个或更多存储器件上可以生成一个日志,其被配置成存储将被提交到存储集合的数据集合。所述日志例如可以包括被结构化为一个循环数组的记录序列,其中每一条记录具有用以存储一个数据集合以及为该数据集合计算的验证器的容量。可以首先按照接收顺序把将要写入到存储集合的所有数据集合连同为该数据集合计算的验证器存储在日志中。
这些技术可以通过提供一种机制来减轻RAID写入空洞的后果,通过所述机制可以在提交到存储集合中的位置之前把非原子写入存储在存储器件的非易失性存储器上。如果在把数据集合写入到日志的同时发生故障,则存储在存储集合中的所述数据集合的版本保持完好;并且如果在把数据集合写入到存储集合的同时发生故障,则可以通过重新发起从日志到存储集合写入所述数据集合来恢复所述故障。此外,日志的使用可以通过促进顺序写入来改进存储器件的性能。作为第一个例子,首先将非顺序数据集合顺序地写入到日志,从而即使对于非顺序数据集合也始终提供快速的顺序写入。作为第二个例子,所述日志可以操作为写入请求与存储集合之间的写入缓冲区,从而实现对包括存储在存储器件的邻接物理位置中的数据序列的各个写入请求的合并。例如通过生成存储在非易失性存储器件上的日志的易失性存储器表示,可以获得另外的性能改进,其中所述易失性存储器表示充当抵达高速缓存和/或写入缓冲区。通过使用这里给出的技术,可以可获得这些和其他优点。
为了实现前述和相关目的,下面的描述和附图阐述了特定的说明性方面和实现方式。这仅仅表明可以采用一个或更多方面的多种方式当中的几种。通过结合附图考虑下面的详细描述,本公开内容的其他方面、优点和新颖特征将变得显而易见。
附图说明
图1给出了构成一个存储集合的各个数据集合在存储器件上的示例性存储的图示。
图2给出了一种示例性情形的图示,其中描绘出在存储集合内的写入操作期间发生故障的后果。
图3给出了根据这里给出的技术的构成一个存储集合的各个数据集合在存储器件上的示例性存储的图示。
图4给出了图示根据这里给出的技术的将构成一个存储集合的各个数据集合存储在至少一个存储器件上的第一种示例性方法的流程图。
图5给出了图示根据这里给出的技术的将构成一个存储集合的各个数据集合存储在至少一个存储器件上的第二种示例性方法的流程图。
图6是包括处理器可执行指令的示例性计算机可读存储介质的图示,所述处理器可执行指令被配置成根据这里给出的技术将构成一个存储集合的各个数据集合存储在至少一个存储器件上。
图7是特征在于计算数据集合的验证器的各种技术的一种示例性情形的图示。
图8是特征在于使用存储在存储器件的非易失性介质上的日志的易失性存储器表示的一种示例性情形的图示。
图9是特征在于与存储在存储器件上的日志和所述日志的易失性存储器表示之间的存储器件的写入缓冲区的交互的第一示例性情形的图示。
图10是特征在于与存储在存储器件上的日志和所述日志的易失性存储器表示之间的存储器件的写入缓冲区的交互的第二示例性情形的图示。
图11示出了可以在其中实施这里所阐述的一项或更多项规定的示例性计算环境。
具体实施方式
下面参照附图描述所要求保护的主题内容,其中相同的附图标记始终被用来指代相同的元件。在下面的描述中,出于解释的目的,阐述了许多具体细节以便提供对于所要求保护的主题内容的透彻理解。然而可以明显看出,可以在没有这些具体细节的情况下实践所要求保护的主题内容。在其他事例中,以方框图的形式示出了各个结构和器件以便于描述所要求保护的主题内容。
A、介绍
在计算领域内,许多情形涉及将包括一系列数据集合的存储集合存储在一个或更多存储器件的集合上。例如,用户可能希望在一个硬盘驱动器集合上创建一份档案,并且可以在所述档案内存储一个或更多数据集合(例如字节、字、数据块或序列、文件或记录)。在一些情形中,(一个或多个)存储器件可以完全被分派来存储数据;例如一个两兆兆字节硬盘驱动器可以被配置成提供一个两兆兆字节存储集合。在其他情形中,可以按照促进数据可访问性和/或恢复的方式将所述存储集合冗余地存储在各个存储器件上;例如一个一兆兆字节数据集合可以被完全相同地存储在两个一兆兆字节硬盘驱动器上,以便在任一份拷贝受到破坏的情况下提供备份。可以将多个存储器件配置成按照多种方式互操作来存储所述存储集合。
在廉价盘冗余阵列(RAID)的各种变型中包括了许多这样的存储方案和特征。作为第二个例子,在RAID0存储方案中,两个或更多硬盘驱动器的整个存储空间可以被分派来存储数据,从而第一硬盘驱动器可以提供对于存储在所述存储集合的一个部分中的数据的访问,而第二硬盘驱动器则并行地提供对于存储在所述存储集合的另一个部分中的数据的访问,从而实际上将对于数据集合的访问速率加倍(并且可能包括存储在其他硬盘驱动器上的所述存储集合的各个部分的其他倍增)。作为第二个例子,在RAID1存储方案中,第一硬盘驱动器可以被完全指派来存储一个存储集合,并且操作为镜像的附加盘驱动器可以存储该存储集合的完全相同的拷贝。可以通过对于由不同硬盘驱动器提供的存储集合的同时访问来获得性能改进。此外,可以在任何硬盘驱动器上访问所述存储集合的一份完整拷贝,并且可以在不危害包括在其中的数据可用性的情况下替换(例如由于破坏、无响应、缺失或损坏而)发生故障的任何硬盘驱动器。然而RAID1方案会显著减少存储集合的容量(例如添加硬盘驱动器不会增大存储集合的容量)。附加的RAID变型可以平衡RAID0和RAID1阵列的可访问性、性能和故障恢复属性,同时最大化存储集合的容量。例如,在包括特定尺寸的各个硬盘驱动器的集合的RAID4阵列中,除了其中一个硬盘驱动器之外的所有硬盘驱动器的全部容量可以提供存储空间,而保留的硬盘驱动器则可以存储奇偶校验信息(例如对存储在其他硬盘驱动器上的每一个数据集合的异或(XOR)计算)。这种配置使得存储空间最大化(例如包括四个一兆兆字节硬盘驱动器的RAID4阵列提供三兆兆字节的存储空间),同时还容许一个驱动器的故障;例如如果其中任一个硬盘驱动器完全故障,则可以用替换硬盘驱动器来将其替换,并且可以利用存储在剩余的硬盘驱动器上的数据来重建故障硬盘驱动器上的数据。例如,可以简单地通过对于存储在各个硬盘驱动器上的对应的数据集合重新计算XOR数值来重建故障的奇偶校验硬盘驱动器;并且可以通过使用可用的数据集合和所述XOR奇偶校验数值来重建存储在其他硬盘驱动器当中的故障硬盘驱动器上的数据。
然而在涉及到把包括各个数据集合的存储集合存储在一个或更多存储器件上的情形中,可能会出现影响所述存储集合的性能和/或可靠性的各种低效和问题。图1和2描绘出可以通过这里给出的技术解决的两个这种问题的实例。
在图1的示例性情形100中,可以把包括一系列数据集合104(例如存储集合102的各个字节、字、数据块、文件或记录)的存储集合102存储在存储器件106(例如硬盘驱动器)上。生成或访问存储集合102的过程可以生成涉及各个数据集合104的读取和/或写入请求集合,并且可以被存储器件106接收及实现。例如,硬盘驱动器可以包括悬置在旋转物理介质上方的读取/写入头108,其能够读取在读取/写入头108下方旋转的物理介质的任何扇区(例如径向数据线)下存储的数据。因此,当接收到将要存储在存储集合102中的第一位置110处的第一数据集合104时,硬盘驱动器可以旋转所述物理介质,直到与存储集合102中的位置110匹配的物理位置被旋转到读取/写入头108下方为止,并且随后可以把数据集合104写入到物理介质上。然而这样的硬盘驱动器的性能常常受到在把物理介质旋转到适当位置时的延迟的限制。通过顺序访问可以缓解该延迟;例如可以相继写入构成物理介质上的一个物理位置序列的三个数据集合104,从而把在将各个位置正确地定位在读取/写入头108下方中的旋转延迟的数目从三个减少到一个。由于旋转延迟常常是硬盘驱动器的吞吐量中的速率限制因素,因此顺序访问可以显著改进存储器件106的吞吐量。此外,对于每一个数据集合104,计算验证器112(在图1的示例性情形100中被表示为对于每一个四字节数据集合104计算的一个奇偶校验字节)并且将其与数据集合104存储在一起,其可以被用来验证数据集合104的完整性。图1的示例性情形100通过在扇区中把验证器112附加到数据集合104而给出了效率改进,从而可以通过施行一次旋转查找和写入请求来存储数据集合104和验证器112。
图1图示了特征在于把存储集合102的数据集合104存储到存储器件106的示例性情形110。在该示例性情形100中,由存储器件106接收并处理四个数据集合104的序列。在第一时间点114,接收第一数据集合104以便存储在存储集合102中的第一位置110处,并且存储器件106施行第一次旋转查找以便将读取/写入头108定位在物理介质上的相应位置上方,并且将第一数据集合104及其验证器112写入到物理介质。在第二时间点116,接收第二数据集合104以便存储在存储集合102中的第一位置110处,并且存储器件106施行第二次旋转查找以便将读取/写入头108定位在物理介质上的相应位置上方,并且将第二数据集合104及其验证器112写入到物理介质。分别在第三时间点108和第四时间点110实施附加的旋转查找操作,以便存储第三数据集合104和第四数据集合104。
然而,图1的示例性情形100描绘出在把各个数据集合104写入到存储集合102中的一些低效源头。作为第一个例子,第一数据集合104和第三数据集合104构成一个序列(例如存储在存储集合102中的接连位置110处的数据集合102),第二存储集合102和第四存储集合102也构成一个序列。例如,第一过程可以请求针对存储集合102的第一写入序列,而第二过程同时请求针对存储集合102的一个不同部分的第二写入序列,并且存储器件106可以按照交织方式接收请求。然而在该示例性情形100中,存储器件106按照接收顺序把各个数据集合104写入到物理介质,从而施行四次旋转查找以便写入各个数据集合104。虽然该写入过程可以严格保留接收到各个写入请求的顺序,但是通过施行第一次旋转查找来存储第一数据集合104和第三数据集合104并且施行第二次旋转查找来存储第二数据集合104和第四数据集合104,可以获得吞吐量改进。
图1中描绘的低效的第二个源头来自对于存储集合102不必要地写入数据,其迅速被后续写入覆写。作为第一个例子,第二数据集合104和第四数据集合104都被写入到存储集合102中的相同位置110。对于覆写的识别可以提供通过只写入最近一次写入202而改进存储器件106的性能的机会(特别在所述覆写所写入的数据与早前的写入相同的情况下)。然而在该示例性情形100中,存储器件106无法获得这一识别,并且对于存储集合102中的相同位置110不必要地施行了相同数据集合104的两次写入。作为第二个例子,可以对于第一组数据集合104(其中包括第一数据集合104和第三数据集合104)计算第一验证器112(例如位置0x0044-0047),并且可以对于第二组数据集合104(其中包括第二数据集合104和第四数据集合104)计算第二验证器112(例如位置0xA0F0-A0F3)。由于接收到各个写入请求的序列,存储器件106将每一个验证器110计算并写入两次(例如对于第一数据集合104施行了第一验证器110的第一次计算并且与第一数据集合104存储在一起;对于第二数据集合104施行了第二验证器110的第一次计算并且与第二数据集合104存储在一起;对于第三数据集合104施行了第一验证器110的重新计算并且与第三数据集合104存储在一起;并且对于第四数据集合104施行了第二验证器110的重新计算并且与数据集合104存储在一起)。这些重新计算本来可以避免从而减少计算和写入的次数,这是通过对于第一数据集合104和第三数据集合104计算一次第一验证器112并且对于第二数据集合104和第四数据集合104计算一次第二验证器112而实现的。这些和其他低效可能是由于存储器件106不能标识出减少对于顺序地存储在存储集合102中的各个数据集合104的写入请求所涉及的计算和/或写入的机会而导致的。
图2给出了示例性情形200的图示,其中描绘出可能出现在存储集合102中的第二类问题。在该示例性情形200中,一组存储器件106互操作来存储具有一组验证器112的存储集合102。具体来说,其中三个存储器件106存储与特定位置110相关联的三个数据集合104,并且第四存储器件106存储所述三个数据集合104的验证器112;例如每一个数据集合104可以包括单个比特,并且可以通过将三个比特一起XOR来计算验证器112。(图2的示例性情形200将每一个数据集合104描绘为单个比特以便简化下面的解释,但是可以认识到,数据集合104可以具有任何尺寸。)当写入任何数据集合104时,存储在第四存储器件106上的验证器112被更新以便匹配更新后的数据集合104。然而如该示例性情形200中所示,对于各个存储器件106的写入可能不是按照原子并且严格同时的方式发生的,而是可能在不同时间发生;例如可能接收到针对更新存储在一个存储器件106上的数据集合104和第四数据集合104上的验证器112两者的请求,但是如果一个存储器件106可能空闲而另一个存储器件106正进行写入操作,则第一存储器件106可能在第二存储器件106之前发起和/或完成其写入操作。各个存储器件104之间的性能(例如旋转速度)和状况(例如写入位置与物理介质的当前旋转位置的距离)的变化也可能导致各个存储器件106之间的定时差异。例如,在第一时间点204,可能请求写入202以便更新存储在第三存储器件106上的数据集合104和存储在第四存储器件106上的相应验证器112。然而第三存储器件106可能在第一时间点204开始和/或完成写入202,而第四存储器件106则可能在第二时间点206完成对于验证器112的写入202。
在图2的示例性情形200中描绘的各个存储器件106的不完美同步可能在存储服务发生故障的情况下产生不一致。例如,在第三时间点208,可能请求针对由第三存储器件106存储的数据集合104和由第四存储器件106存储的相应验证器112两者的另一次写入202。然而在该写入过程期间可能发生计算环境的故障210(例如电力故障或者硬件或软件崩溃)。虽然存储器件106和存储阵列常常被设计成耐受许多这样的故障210,但是该故障210可能在第三存储器件106已经完成对更新后的数据集合104的写入之后但是在第四存储器件106写入更新后的验证器112之前发生。在第四时间点212,当各个存储器件106再次可访问时(例如当电力恢复时),由第三存储器件106存储的数据集合104的更新和第四存储器件106对验证器112的更新失败会给出不一致:验证器112与相应的数据不再匹配。在使用单个存储器件106时可能发生类似的情形;例如如果在数据集合104的第一拷贝和第二拷贝的更新之间发生故障210,则存储在具有单个读取/写入头108的存储器件106上的数据集合104的各个冗余拷贝可能会给出不一致。
这种不一致有时也被标识为“RAID写入空洞”,其可能导致几个问题。作为第一个例子,可能无法标识出一个或更多数据集合104和/或验证器112当中的哪一个是错误的(例如所述故障可能类似地发生在第四存储器件106更新了验证器112之后但是在第三存储器件106完成更新数据集合104之前),从而会危害由验证器112所表示的所有数据集合104的完整性——即使在写入202中甚至没有涉及存储在第一和第二存储器件106上的数据集合104。作为第二个例子,这种不一致可能没有被迅速发现,而是可能在存储集合102中持续。随后,如果一个存储器件106变为不可用(例如如果第一存储器件106完全故障或者被移除),针对重建第一存储器件106上的数据的尝试可以利用其他存储器件上的数据,但是所述不一致可能导致错误的数据重建。因此所述阵列就无法提供从单个存储器件106的故障进行恢复的预期能力。这些和其他问题可能由各个存储器件106在把有关的数据集合104存储到存储集合102时的互操作中的不完美同步导致。
B、所给出的技术
这里所给出的技术是用于解决在存储情形中可能出现的其中一些问题和/或低效的技术,其中可能包括在图1和图2的示例性情形中所图示的那些问题和/或低效。根据这些技术,可以在存储存储集合102的其中一个或更多存储器件106上生成日志。可以首先把将要写入到存储集合102的各个数据集合104和验证器112写入到所述日志。此外,所述日志可以被结构化为按照各个数据集合104的写入顺序的序列结构化的各个数据集合104的序列,从而使得接收到针对把各个数据集合104写入在存储集合102的各个(非顺序)位置110中的请求流的存储器件106可以首先把各个数据集合104顺序地存储在日志中。此外,为了把数据提交到存储集合102中的所请求的位置110,可以选择能够可以作为一个批次被写入的若干数据集合。例如,所述日志可以把将要写入到存储集合102的各个数据集合104顺序地排入队列,并且可以从队列的前方周期性地选择能够在相同批次中写入的一组数据集合104。
图3给出了示例性情形330的图示,其中描绘出通过使用存储在存储器件106的非易失性介质上的日志302而把各个数据集合104和相应的验证器112存储到存储集合102。在该示例性情形300中,在被配置成存储构成存储集合102的至少一部分的各个数据集合104的存储器件106上生成日志302,其被配置成在把所述数据集合104和相应的验证器112提交到存储集合102之前存储这样的数据。具体来说,在该示例性情形300中,日志302被结构化为各条记录304的序列,所述记录304存储一个数据集合104、该数据集合104在存储集合102中的位置110以及该数据集合104的验证器112。日志302的各条记录304通过尾部指针306和头部指针308被结构化为一个队列,其中尾部指针306标识队列的开头(即日志304中的最早数据集合104),头部指针308标识队列的末尾(即被写入到日志304的最近数据集合104)。在第一时间点310,日志302最初为空(即头部指针308和尾部指针306指向同一条记录304);在接收到将被存储在存储集合102中的三个数据集合104的序列之后,存储器件106可以按顺序将所述三个数据集合104记录到日志302(例如通过移动头部指针308以分派各条记录304,并且随后把各个数据集合104写入到各条记录304中)。在第二时间点312,可以接收针对写入三个附加数据集合104的请求的序列,并且可以通过递增头部指针308并且把各个数据集合104写入到日志302的各条记录304来将其存储在日志302中。此外,在第三时间点314,存储器件106可以对于每一个数据集合104计算一个验证器112,并且把每一个验证器112写入到日志302(可能利用存储在日志302和/或存储集合102中的其他数据集合104)。在第四时间点316,存储器件106可以将一个批次318的数据集合104提交到存储集合102,这例如是通过从日志392当中选择将要提交的一个批次318的数据集合104并且将所述数据集合104和相应的验证器112写入到存储集合102而实现的。随后可以把针对已被提交到存储集合102的数据集合104的记录304从日志302中去除(例如通过将尾部指针306前提经过所述记录302)。按照这种方式,可以根据这里所给出的技术将数据集合104提交到存储集合102。
图3中对这里给出的其中一些技术的示例性使用的描绘图示了可以从中可获得的一些潜在优点。作为第一个例子,对数据集合的分批可以把能够被写入到存储集合102中的位置110的连续序列的两个或更多数据集合104合并成一个序列,即使在以下情况下也可以实现:针对构成所述序列的各个数据集合104的写入请求与将要存储在存储集合102中的其他位置110处的其他数据集合104交织;这样的数据集合104不是按照严格顺序的次序接收到的;以及/或者在针对写入各个数据集合104的请求之间发生简短的延迟。作为第二个例子,对于数据集合104的分批可以改进存储器件106的效率,这是通过减少在较短时帧内接收到的相同数据的覆写而实现的。例如,可以把针对覆写特定数据集合104的多个请求分组成一个批次,并且可以通过把数据集合104单次写入到存储集合102中的位置110而实现。例如,图3的示例性情形300中对批次318的选择省略了靠近尾部指针的一个数据集合104,但是该数据集合104被存储在日志302中的后续写入202覆写。作为第三个例子,针对写入由相同验证器112表示的各个数据集合104的单独要求如果被分组成同一批次的话可以导致对验证器112的单次计算和写入,而不是对验证器112的几次单独的更新。作为第四个例子,通过保守地选择批次318(例如不是激进地清空日志302,而是在其中留下一些记录304),所述技术可以标识并获得针对将来提高效率的机会。例如,对于批次318没有选择将要写入到位置0x03C0的数据集合104,这是因为其最近被接收并且可能后面很快就有针对写入附加数据集合104的请求。因此,当针对将一个数据集合104写入到位置0x03C1的后续请求被接收到并且被存储在日志302中时,可以对于未来的批次318选择全部两个数据集合104,从而顺次一起提交全部两个数据集合104,而不是发出两次单独的写入202。
在图3的示例性情形300中图示的当前公开的技术的第二个潜在优点是减少了RAID写入空洞的发生和后果。把针对更新数据集合104的请求首先提交到存储器件106的非易失性介质上的日志并且随后将数据集合104和验证器112移动到存储集合102,可以避免其间的不一致。例如,如果在把数据集合104和/或验证器112写入到日志的同时发生故障210,则恢复过程可以检测到日志被不完整地写入,并且可以丢弃日志的不完整部分。虽然这一丢弃可能导致写入202的丢失,但是这样的写入202还没有被提交到存储集合102并且没有对请求所述写入202的过程证实,因此可以被安全地丢失。此外,存储集合102的一致性不会受到在RAID写入空洞中涉及的不完整写入的危害。此外,如果在把日志的内容提交到存储集合102的同时发生故障210,则存储器件106可以通过把存储在日志中的数据集合104重新提交到存储集合102而从故障210恢复。按照这种方式,可以改进针对存储集合102的写入202的性能,并且/或者可以减少由于比如RAID写入空洞之类的问题所导致的不一致的发生。通过根据这里给出的技术将数据集合104存储到存储集合102,可以可获得这些和其他优点。
C、示例性实施例
图4给出了这些技术的第一示例性实施例的图示,其被描绘为将数据集合104存储在由至少一个存储器件106提供的存储集合102中的第一示例性方法400。所述示例性方法400例如可以被实施为存储在器件(例如存储器电路、硬盘驱动器的盘片、固态存储器组件或者磁盘或光盘)的存储器组件中的一个指令集合,其在由器件的处理器执行时使得所述器件施行这里所给出的技术。示例性方法400开始于402,并且涉及在处理器上执行404所述指令。具体来说,所述指令被配置成在至少一个存储器件106上生成406日志302,所述日志302被配置成存储分别与一个验证器112相关联的各个数据集合104。所述指令还被配置成在接收到针对把一个数据集合104存储在存储集合102中的位置110处的请求之后,把该数据集合104存储408在日志302中。所述指令还被配置成选择410存储在日志302中的一个批次318的数据集合104,其被提交到存储集合102。对于所述批次318的对应的412数据集合104,所述指令可以通过以下操作实现针对存储集合102的这一提交:计算414一个验证器112;将验证器112存储416在日志302中;以及将数据集合104和所述数据集合104的验证器112存储418在存储集合102中。所述指令还被配置成在把数据集合104和所述数据集合104的验证器112存储418在存储集合102中之后,从日志302中去除该数据集合104。按照这种方式,所述指令就根据这里给出的技术获得了将各个数据集合104存储在存储集合102中,因此示例性方法400结束于420。
图5给出了这些技术的第二实施例的图示,其被描绘为将数据集合104存储在由至少一个存储器件106提供的存储集合102中的第二示例性方法500。所述示例性方法500例如可以被实施为存储在器件(例如存储器电路、硬盘驱动器的盘片、固态存储器组件或者磁盘或光盘)的存储器组件中的一个指令集合,其在由器件的处理器执行时使得所述器件施行这里所给出的技术。示例性方法500开始于502,并且涉及向器件发送504指令。具体来说,所述指令被配置成在存储器件106上生成506日志302,所述日志302包括记录304的序列、头部指针308和尾部指针306。所述指令还被配置成在接收到508将要存储在存储集合102中的位置110处的数据集合104之后,将日志302的头部指针308前提510经过新记录304,并且把所述数据集合104存储512在该新记录304中。所述指令还被配置成选择514靠近日志302的尾部指针306的至少一个所选数据集合104以便提交到存储集合102。对于对应的516所选数据集合104,所述指令被配置成施行以下操作:计算518所选数据集合104的验证器112;将所选数据集合104的验证器112存储520在日志302中;以及将所选数据集合104和所述数据集合104的验证器112提交522到存储集合102。所述指令还被配置成将日志302的尾部指针306前提524经过包括所述至少一个所选数据集合104的记录304。按照这种方式,所述指令就根据这里给出的技术获得了将各个数据集合104存储在存储集合102中,因此示例性方法500结束于526。
图6给出了这些技术的第三示例性实施例,其被图示为包括处理器可执行指令602的示例性计算机可读介质600,所述处理器可执行指令602被配置成应用这里给出的技术。这样的计算机可读介质例如可以包括涉及有形器件的计算机可读存储介质,比如存储器半导体(例如利用静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)和/或同步动态随机存取存储器(SDRAM)技术的半导体)、硬盘驱动器的盘片、闪存器件或者磁盘或光盘(比如CD-R、DVD-R或软盘),其编码一个计算机可读指令集合,当由比如计算机之类的器件610的处理器612执行时,所述计算机可读指令使得器件610实施这里给出的技术。这样的计算机可读介质还可以包括(作为与计算机可读存储介质不同的一类技术的)各种类型的通信介质,比如可以通过各种物理现象传播的信号(例如电磁信号、声波信号或光学信号)以及在各种有线情形(例如通过以太网或光纤线缆)和/或无线情形(例如,比如WiFi之类的无线局域网(WLAN)、比如Bluetooth之类的个人区域网(PAN)或者蜂窝或无线电网络)中传播的信号,其编码一个计算机可读指令集合,当由器件的处理器执行时,所述计算机可读指令使得所述器件实施这里给出的技术。在一个这样的实施例中,处理器可执行指令602可以被配置成施行一种将数据集合104存储在由至少一个存储器件106提供的存储集合102中的方法,比如图4的第一示例性方法400或图5的第二示例性方法500。本领域普通技术人员可以设想到被配置成根据这里给出的技术操作的许多此类计算机可读介质。
D、变型
在许多方面可以设想到这里讨论的技术的变型,并且一些变型关于这些和其他技术的其他变型可以给出附加的优点和/或减少缺点。此外,一些变型可以被组合实施,并且通过协同合作,一些组合可以特征在于附加的优点和/或减少的缺点。所述变型可以被合并在各个实施例中(例如图4的第一示例性方法400和图5的第二示例性方法500),以便为这样的实施例赋予单独的和/或协同的优点。
D1、各种情形
在这些技术的各个实施例之间可能有所不同的第一方面涉及可以在其中利用这样的技术的情形。作为第一种变型,这些技术可以被用来管理许多类型的存储集合102和数据集合104,其中包括:分别包括存储在对应地址处的一个数值集合的一个或更多卷;分别包括一个文件集合的文件系统;分别包括一个记录集合的数据库;分别包括一个媒体对象集合的媒体库;分别包括一组应用的应用集合;以及分别包括一个卷和/或虚拟机存储器的集合的计算环境服务器。此外,在存储集合102内对一个数据集合104的标识在不同情形之间的粒度可以有所不同;例如包括一个卷的存储集合102可以利用这些技术进行日志记录并且向存储集合102提交包括比特、字节、各种长度的字、各种长度的数据块或者扇区的数据集合104。
作为第二种变型,这些技术可以被用来管理把存储集合102和数据集合104存储在各种类型的易失性和非易失性存储器件106上,其中包括硬盘驱动器、固态存储器件、磁性或光学带存储驱动器以及磁盘或光盘。在存储集合102的存储中所涉及的存储器件106的数目也可以有所不同;例如这些技术可以被用来管理把存储集合102存储在单个存储器件106上,存储在存储器件106的小且紧密集成的集合(例如RAID阵列)上,或者存储在可能潜在地大并且/或者潜在地分布广的存储器件106的松散集成的集合(例如布置在世界的不同地区并且通过因特网通信的存储器件106的集合)上。作为仅仅一个例子,这些技术可以被适配成用于实施在存储器件106的各种类型的RAID阵列中的不同RAID级别。此外,对存储集合102进行存储的存储器件106还可以是混合的类型,并且可以根据各种分层设置来组织(例如存储集合102可以首先被存储在相对高性能的主存储器件106上,其被备份到相对低性能的异地档案存储器件106)。所述技术还可以也根据并且适应于存储集合102和存储器件106的各种属性来实施,其中包括成本、可用性、可靠性、性能需求、应用于存储集合102的敏感性和安全性措施以及存储器件106的能力。
该第一方面的第三种变型涉及日志302与存储器件106的关系,特别是在存储集合102跨越多个存储器件106的情况下。作为第一个这样的例子,对于被分派在一个或更多单独的存储器件106上的存储集合102,可以将日志302排他地存储在一个存储器件106上。替换地,可以把日志302存储在与存储集合102的一部分或全部相同的存储器件106上。作为第二个这样的例子,可以在各个存储器件106当中生成多个日志302。例如,对于跨越几个存储器件106的存储集合102,可以在每一个存储器件106上对于存储在该存储器件106上的存储集合102部分中所存储的各个数据集合104生成日志302。替换地,各个单独的存储器件106上的日志302可以不与存储集合102中的特定位置相关联;例如将要写入到存储集合102的数据集合104可以在提交到存储集合102之前被存储在任何日志中。这种变型可以提供分散式日志记录过程;例如可以把数据集合104写入到具有最短I/O队列的存储器件106的日志302,或者对于在地理上分布的存储器件106的集合当中共享的存储集合102,可以写入到给出对写入过程的最高可访问性的存储器件106(例如在地理上最靠近所述过程并且/或者在与写入过程通信时特征在于最低等待时间或最高带宽的存储器件106)。作为第三个这样的例子,可以将日志302冗余地存储为相同存储器件106上的两份或更多份拷贝,可以将其存储为两个或更多存储器件106上的镜像拷贝,或者将其(例如通过分块)分布在两个或更多存储器件106上,以便为日志302赋予类似于通过各种RAID存储方案所提供的故障包容特征。
该第一方面的第四种变型涉及被用来验证对应的数据集合104的完整性的验证器112的类型。在一些情形中,可以使用相对简单的验证器112,比如被计算为数据集合104的XOR的奇偶校验位,或者数据集合104的总和或散列码。简单的验证器112可能适合于相对低价值的存储集合102,相对低功率的存储器件106(例如具有相对慢的硬件、容量受限的存储器和有限电池寿命的便携式器件上的存储器件),以及/或者其性能高度重要的存储集合102,从而可更加快速地计算的验证器112可能是有利的。在其他情形中,可以使用相对复杂的验证器112,其可以提供附加的数据安全性特征。例如,纠错验证器112(比如Hamming码)可以被用来不仅确定数据集合104是否是准确的,还可以确定是否由于其中一个数据集合104和/或验证器112的改变而导致了不一致。此外,对于存储集合102中的数据集合104的不同集合或类型可以利用不同类型的验证器112(例如对于更有价值的数据可以利用更加复杂但是耐久的验证器112)。本领域普通技术人员可以在具有这些和其他类型的变型和细节的许多情形中实施这里给出的技术。
D2、各种元素
在各个实施例当中可能有所不同的第二方面涉及这些技术的各种元素的变型。作为第一种变型,许多技术可以在生成406日志302时使用。例如,日志302可能包括许多类型的数据结构,比如数组、链表、表格、数据库、栈、队列、堆或二元树。不同的实现方式可能会给出各种优点和缺点(例如性能、易于更新、空间效率、计算经济性以及与存储器件106和/或存储集合102的特性的兼容性)。还可以在对存储集合102进行存储的不同存储器件106上以及/或者对于不同类型的数据集合104实施不同类型的日志302。例如,日志302可以被结构化为包括头部指针308和尾部指针306的数组,其可以提供以下优点:对于日志302的任何记录304的快速索引(例如O(1)的访问时间),通过操纵头部指针308和尾部指针306实现的对记录304的高效分派和重复使用,以及数据集合104在日志302中的高效存储(例如通过简单地将新数据集合104附加到构成日志302的记录304的序列)。
作为该第二方面的第二种变型,可以按照许多方式来选择410将要提交到存储集合102的批次318。作为第一个例子,可以通过许多类型的事件来发起所述选择410。例如,实施这些技术的器件610、存储器件106或者其他类型的器件可以在检测到许多类型的提交事件之后发起对批次318的选择410。这样的提交事件(构成一个示例性提交事件集合)的一些例子包括:涉及日志302的容量的日志容量事件(例如日志302变满);涉及存储在日志302中的数据集合104的持续时间的持续时间事件(例如数据集合104早于特定时限,比如超过一分钟之前被存储在日志302中的数据集合104);涉及针对把日志302中的至少一个数据集合104提交到存储集合102的请求的提交请求事件(例如请求写入202数据集合104的过程可以请求把数据集合104提交到存储集合102);以及涉及存储集合102的至少一个存储器件106的工作负荷的存储器件工作负荷事件(例如存储器件106可能检测到输入/输出工作的空闲时刻,并且可以利用该空闲时刻刷新来自日志302的一些数据集合104)。许多其他类型的事件可以提示发起把数据集合104提交到存储集合102的过程。
作为该第二方面的该第二种变型的第二个例子,可以按照许多方式选择将要提交到存储集合102的数据集合104的批次318。例如,可能有利的是在接收到写入请求之后把第一数据集合104到存储集合102的提交推迟一段简短的时间,以免后续的写入202指明对第一数据集合104的覆写以及/或者提供顺次跟在第一数据集合104之后的附加数据集合104,其因此可以一起被写入到存储集合102(如在图3的示例性情形300中的第四时间点316所示)。然而当即将接收到顺次跟随在后的第二数据集合104的概率减小的价值比不上在把数据集合104存储为日志302的一条记录304时所涉及的成本和复杂度时,把数据集合104的提交推迟一段较长时间可能是不利的。此外,可能有利的是选择构成一个批次318的各个数据集合104,以便改进提交到存储集合102的效率。作为第一个这样的例子,当存储在日志302中的第一数据集合104被选择包括在将要存储在存储集合102中的第一位置110处的批次318中时,一个实施例还可以选择同样存储在日志302中并且将被存储在存储集合102中的靠近第一位置110的第二位置110处的第二数据集合104以便包括在所述批次318中(例如在存储器件106的物理介质上是接连的或者至少在物理上靠近的各个数据集合104,其可以高效地被一起写入在同一批次318中)。作为第二个这样的例子,这些技术的一个实施例可以从某一批次318中省略存储在日志302中并且将被存储在存储集合102中的某一位置110处的第一数据集合104,如果所述实施例确定日志302还包括比第一数据集合104更新并且将被存储在存储集合102中的相同位置110处的第二数据集合104(即后续覆写)。取代将数据集合104包括在批次318中,所述实施例可以简单地从日志302中去除较早的数据集合104。
作为该第二方面的第三种变型,可以按照许多方式计算414验证器112。作为第一方面的一种明显的变型,在这样的情形中可以利用许多类型的验证器112,但是另外还可以按照多种方式从可用数据计算验证器112。作为第一个例子,可以基于其所表示的当前数据集合104完全重新计算验证器112。然而作为第二个例子,当验证器112表示几个数据集合104并且其中的数据集合104的一个子集改变时,可以有可能(并且有时更加高效)从验证器112中去除陈旧的数据集合104并且在验证器112中包括更新后的数据集合104,而不是从当前数据集合104重新计算验证器112,后者可能涉及从存储集合102获取数据集合104的剩余部分。
图7给出了特征在于计算验证器112的不同方式的示例性情形700的图示。在第一时间点702,在存储集合102中为数据集合104和相应的验证器112分派了空间。然而数据集合104的任何部分和验证器112都还没有被写入到存储集合102。在第二时间点704,已经接收到数据集合104的一部分,并且已经发起针对把数据集合104提交到存储集合102的请求。为了计算验证器112,这些技术的一个实施例可以标识出构成数据集合104的剩余数据既不存在于日志302中也不存在与存储集合102中。相应地,所述实施例可以利用数据集合104的已提供部分计算验证器112,并且可以对于数据集合104的剩余部分推断出并使用默认数值(例如零)。因此,在第二时间点704,仅仅利用数据集合104的已有部分计算验证器112。在第三时间点706,利用数据集合104的当前数据计算验证器112。例如,可能已经提供了完全指明数据集合104的新的和更新后的数据(例如构成完全数据集合104的一系列写入202可能存在于日志302中,或者可以从存储集合102获取数据集合104的不存在于日志302中的部分),并且可以利用构成数据集合104的当前数据完全重新计算验证器112(例如作为所有当前数据的XOR)。然而在第四时间点708,仅仅利用原始验证器112以及数据集合104的原始版本和新版本根据数据集合104的改变来重新计算验证器112。例如,可以通过把原始验证器112与数据集合104的原始版本进行XOR来计算新的验证器112,从而从原始验证器112反转对数据集合104的该部分的添加,并且随后将该数值与数据集合104的新版本进行XOR。这一重新计算对于没有完全被存储在日志302中的数据集合104可能更加高效;例如这一重新计算可以避免从存储集合102读取数据集合104的没有被存储在日志302中的部分。此外,可以基于从存储集合102获取数据集合104的该部分的比较成本而在这些重新计算技术之间做出选择(例如对于表示一个大数据集合104的验证器112,可能更加高效的是去除并且包括所述数据集合104的小部分的更新,并且从所述数据集合104的大部分的更新的当前数据重新计算验证器112)。
作为该第二方面的第四种变型,如果存储集合102(例如电力故障或软件崩溃)和/或一个或更多存储器件106(例如与存储器件106的通信中断,存储器件106的硬件、固件或驱动程序故障,或者存储器件106的移除或损坏,其后是重新建立通信或者替换存储器件107)发生了故障210,则这些技术的一个实施例可以按照许多方式利用日志302从故障210恢复。作为该第二方面的该第四种变型的第一个例子,这些技术的一个实施例可以简单地检查日志302,丢弃日志302中的任何不完整或不一致的记录304(例如在故障210时被不完整地写入的记录),并且随后重新开始从日志302向存储集合102提交数据集合104。在所述过程中,在恢复过程期间可以正确地重写可能被不完整地写入到存储集合102的任何数据集合104,甚至无需检测数据集合104到存储集合102的不完整写入。
作为该第二方面的该第四种变型的第二个例子,可以按照分阶段方式施行从故障210的恢复。例如,可能有利的是尽可能快速地从故障210恢复(例如为了缩短利用存储集合102的服务的停用时间),同时还确保对存储集合102的访问提供有效且一致的数据。相应地,在所述恢复的第一阶段期间,这些技术的一个实施例可以首先读取日志302的内容(例如在该处将数据集合104存储在日志302中的存储集合102内的位置110),以便确定是从日志302还是从存储集合102实现对存储集合102的访问。所述恢复随后可以继续到第二阶段,所述第二阶段涉及重新开始从日志302向存储集合102提交数据集合104,以便校正由于故障210而导致不完整地和/或不一致地写入的数据集合104。因此,所述实施例可以阻断。
恢复过程的附加示例性实施例例如可以涉及以下操作:扫描存储集合102的一部分或全部,以便验证其完整性;仅仅对在故障中所涉及的存储器件106应用恢复过程(例如仅仅把数据集合104从日志302重写到被暂时移除的存储器件106);以及对于不同的存储器件106和/或不同的数据集合104应用不同的恢复过程(例如在对存储在第二存储器件106上的第二日志302应用恢复过程之前,对存储在第一存储器件106上的第一日志302应用恢复过程并且完成其恢复)。本领域普通技术人员可以设想到改变这里给出的技术的各种元素以便应用在不同情形中的许多此类方式。
D3、日志的易失性存储器表示
在这些技术的各个实施例当中可能有所不同的第三方面涉及在实施此类技术的器件610的易失性存储器中生成日志302的易失性存储器表示。例如,除了在存储器件106的非易失性介质上生成的日志302之外,这些技术的一个实施例还可以生成易失性存储器表示,其也对存储在日志302中的数据集合104进行存储并且被保持与日志302同步。虽然对日志302的易失性存储器表示的生成和维护可能会增加复杂度并且消耗附加的计算资源,但是所述易失性存储器表示在这些技术的实施例中可以提供许多潜在的用途和优点。作为第一个示例性优点,所述易失性存储器表示可以充当对日志302的写入缓冲区;例如取代把各个单独的数据集合104写入到日志302,一个实施例可以最初把数据集合104存储在易失性存储器表示中,并且可以把一块数据集合104提交到日志302,从而利用对日志302的分批写入202扩展了将数据集合104顺序写入202到日志302的效率增益。作为第二个示例性优点,易失性存储器表示可以充当最近写入的数据集合104的读取高速缓存;例如取代从存储在相对慢的存储器件106上的日志302中读取最近写入的数据集合104,一个实施例可以从易失性存储器表示提供数据集合104。因此,这些技术的一个实施例可以尝试根据其在日志302和易失性存储器表示中的可用性来获取所请求的数据集合104。例如,在确定数据集合104被存储在易失性存储器内的日志302的易失性存储器表示中之后,所述实施例可以获取并给出存储在易失性存储器表示中的数据集合104;在确定数据集合104被存储在存储器件106上的日志302中之后,获取并给出存储在日志302中的数据集合104;并且在其他情况下可以获取并给出存储在存储器件106上的存储集合102中的数据集合104。一个数据集合104可能还跨越这些来源当中的两个或更多;例如所请求的数据集合104的第一部分可能存在于日志302中并且从该日志302获取,而所请求的数据集合104的第二部分则可能存在于易失性存储器表示中并且从该易失性存储器表示获取(不管该第二部分是否存在于可访问性较低的日志302和/或存储集合104中)。作为第三个示例性优点,与评估日志302的内容相比,通过评估易失性存储器表示(其常常提供更加快速的访问)的内容,可以更加高效地施行关于存储在日志302中的数据集合104的决定(比如对批次318的选择410)。数据集合104在器件610的快速但是易失性的存储器中的可访问性的这些优点可以与通过将其存储在非易失性存储器件106上的日志302中而实现的数据集合104的耐久性并行地获得。
作为该第三方面的第一种变型,所述易失性存储器表示可以被结构化成类似于日志302,或者可以按照不同的方式生成。例如,虽然可能有利的是把日志302结构化成促进在比如硬盘驱动器之类的存储器件106上的顺序写入,但是这一优点在提供相对等效的顺序和随机存取的存储器电路中就可能被减弱;因此可以按照另一种方式生成易失性存储器表示,比如根据将在该处存储数据集合104的存储集合102中的位置110进行索引,比如散列表或者比如Adelson-Velskii-Landis树之类的B树。
作为该第三方面的第二种变型,易失性存储器表示可以存储与日志302中所存储的相同的数据集合104,或者可以存储不同的存储集合104。作为第一个这样的例子,易失性存储器表示可以按照写入缓冲区的形式暂时聚集将要一起写入到日志302的新数据集合104。作为第二个这样的例子,易失性存储器表示可以保留从日志302去除的数据集合104,另外还把易失性存储器表示的多余容量用作易失性存储器读取高速缓存。例如,在把数据集合104提交到存储集合102并且从日志302中去除(并且可能甚至被覆写)之后,易失性存储器表示可以将数据集合104保留在存储器中,这是由于过程可能请求最近写入的数据集合104的概率相对高。只要易失性存储器表示中仍然有容量,就可以(在把数据集合104提交到日志302和/或存储集合102之后)继续这种把数据集合104保留在易失性存储器表示中,并且易失性存储器表示可以逐出先前提交的数据集合104,以便为新近接收到的并且迄今尚未提交的数据集合104提供容量。在这种情形中,可能有利的是令易失性存储器表示区分已被提交到日志302和/或存储集合102的数据集合104与尚未提交的数据集合104。例如,在把一个数据集合104存储在日志302中之后,一个实施例可以把该数据集合104存储在日志302的易失性存储器表示中,并且把该数据集合104标记为不可去除;在把存储于日志302中的一个数据集合104提交到存储集合102之后,所述实施例可以把存储在易失性存储器表示中的该数据集合104标记为可去除。随后,为了释放易失性存储器表示中的容量,所述实施例可以仅仅从日志302的易失性存储器表示中安全地去除被标记为可去除的数据集合104。这种变型保持了日志302与易失性存储器表示的同步性,同时有利地把易失性存储器表示的闲置容量利用作为读取高速缓存。
相反,并且作为该第三方面的第三种变型,可能有利的是在存储已提交或未提交数据集合104时不要穷尽易失性存储器表示的容量,而是在易失性存储器内的易失性存储器表示中保留足够的容量以便存储传入的数据集合104。具体来说,可以为一个被配置成对将被存储在存储集合102中的数据集合104进行存储的缓冲区保留足够的容量,同时日志302则从事将其他数据集合104提交到日志302。这种变型进一步把易失性存储器表示利用作为写入缓冲区,以便在不中断存储器件106把数据集合104从日志302提交到存储集合102的任务的情况下接受传入的数据集合104。
作为该第三方面的第四种变型,故障210的恢复还可以涉及重建日志302的易失性存储器表示802。例如,所述恢复过程可以开始于读取日志302以便重新生成易失性存储器表示302。按照这种方式开始所述重建可能是有利的,例如通过重新建立易失性存储器表示802的读取高速缓存和/或写入缓冲区特征,从而减轻存储器件106存储日志302的读取/写入工作负荷并且便于把日志302中的数据集合104提交到存储集合102以便覆写由于故障210导致的不完整或不一致写入202的任务。
图8给出了一种示例性情形800的图示,其中把在非易失性存储器件106上生成的日志302与器件610的易失性存储器中的日志302的易失性存储器表示802配对。在该示例性情形800中,易失性存储器表示802被存储为根据存储在日志302中的各个数据集合104的位置110的十六进制地址而组织的B树。在第一时间点804,日志302和易失性存储器表示802可以存储特定的一组数据集合104;并且当在第二时间点806,接收将要写入到日志302的第二数据集合104时,所述第二数据集合104可以被存储在易失性存储器表示802中并且随后被写入(直接写入或者通过写入缓冲区写入)到日志302。此外,在第三时间点806,当把存储在日志302中的一个或更多数据集合104提交到存储在存储器件106上的存储集合102时,可以把所述数据集合104从日志302中去除(例如通过前提尾部指针306经过包含所提交的数据集合104的记录302),但是如果易失性存储器表示802的空间容量可用,则可以把这些数据集合104保留在易失性存储器表示802中但是将其标记为可去除(在图8的示例性情形800中由虚线边界示出)。因此易失性存储器表示802可以为新近接收的数据集合104提供容量(例如在第四时间点810接收的第四数据集合104)。因此可以根据数据集合104在易失性存储器表示802、日志302和存储集合102中的可用性来实现读取请求。例如,在第五时间点812,可能接收到针对三个数据集合104的三个读取请求,其中第一个数据集合104可以从易失性存储器表示802提供(尽管从日志302中逐出但是存在于易失性存储器表示802中);第二个数据集合104可以从日志302提供(在被提交到日志302之后已经从易失性存储器表示802中去除);并且第三个数据集合104(其已经被从易失性存储器表示802和日志302中逐出)可以从存储集合102获取并提供。这样,在图8的示例性情形800中图示的这些技术的实施例就通过实施日志302的易失性存储器表示802而实现了几个优点。本领域普通技术人员可以设想到根据这里给出的技术对日志302的易失性存储器表示802的此类使用。
D4、与写入缓冲区的互操作
在这些技术的各个实施例当中可能有所不同的第四方面涉及在对存储集合102进行存储的存储器件106中包括及利用写入缓冲区。在许多情况下,存储器件106可以有利地利用写入缓冲区来改进性能,这例如是通过在易失性存储器中对数据集合104的写入202进行分批直到发起刷新请求为止,并且随后将所有数据集合104提交到存储于存储器件106上的存储集合102。然而,存储器件106上的写入缓冲区的操作可能会降低这里给出的技术的性能,并且实际上可能导致一些问题。例如,如果针对在日志302结果中存储数据集合104的请求在易失性写入缓冲区中被延迟,则在发生故障210的情况下可能会丢失数据集合104。具体来说,写入缓冲区常常是按照透明的方式实施的,从而使得操作系统或过程可能难以确定数据集合104是否实际已被提交到日志302(除非肯定地请求了刷新操作并且将其验证为完成)或者甚至难以确定对于存储器件104是否存在写入缓冲区。因此,当过程请求把数据集合104写入到日志302时,存储器件106可以迅速向所述过程表明所述请求已被实现,即使所述写入被存储在易失性写入缓冲区中而不是存储在日志302的非易失性存储装置中。因此,所述应用可能会错误地操作仿佛数据集合104已被提交,并且如果在存储器件106从写入缓冲区刷新数据集合104之前发生故障210则可能会出现不一致和预料之外的数据丢失。类似地,日志302与存储集合102之间的写入缓冲区的操作可能导致日志302会错误地操作仿佛数据集合104已被持久地存储;例如所述日志可能会去除尚未被提交到存储集合102的数据集合104,从而在写入缓冲区被刷新之前发生故障210的情况下会导致不完整和不一致的数据集合104。此外,写入缓冲区可能提出的优点(例如分批的写入202、顺序写入202的合并以及减少覆写)已经由这里给出的技术的其他组件提供。因此可以认识到,写入缓冲区的存在和操作会导致增加复杂度、增加开销、潜在的性能降低以及预料之外的结果,并且只会提供很少的或者没有尚未通过这里给出的技术实现的优点。
鉴于这些潜在的缺点,可以根据写入缓冲区的存在来调节这些技术的实施例。作为该第四方面的第一种变型,这些技术的一个实施例可以通过多种方式避免写入缓冲区的使用和效果。作为该第一种变型的第一个例子,当把数据集合104和验证器112写入到日志302时,绕过写入缓冲区,这例如是通过把针对日志302的写入作为直写(write-through)请求发出,或者通过简单地禁用存储器件106上的写入缓冲区。作为该第一种变型的第二个例子,所述实施例可以通过在针对存储在存储器件106上的日志302和/或存储集合102的每一次写入202之后发出刷新请求来取消写入缓冲区的效果。虽然频繁发出刷新请求可能会降低存储器件106的性能,但是可以通过多种方式来减少所述性能损失;例如如果存储集合102和/或日志302被分布在分别可能包括或者可能不包括写入缓冲区的一组存储器件106上,则这些技术的一个实施例可以被配置成只对存储最近写入的数据集合104的存储器件106发出刷新请求。
作为该第四方面的第二种变型,这些技术的一个实施例可以与写入缓冲区互操作,并且可以把写入缓冲区的操作与日志302和/或日志302的存储器内表示802的操作进行协调。作为该第二种变型的第一个例子,当刷新存储日志302的存储器件106时,可以标识出日志302的刷新点,其表示已被刷新到日志302的数据集合104(与写入请求已被发出到日志302但是可能仍然保留在写入缓冲区中的数据集合104相对)。例如,在特征在于日志302的易失性存储器表示802的一个实施例中,最初可以把存储在易失性存储器表示802中的数据集合104标记为不可去除,并且可以保持如此标记直到日志302的冲刷点被移动经过所述数据集合104为止,此时易失性存储器表示802可以把所述数据集合104标记为可去除。
图9给出了一种示例性情形900的图示,其特征在于将易失性存储器表示802适配成与存储日志302的存储器件106的写入缓冲区902互操作。在该示例性情形900中,将要写入到存储集合102的数据集合104首先被存储在易失性存储器表示802中,并且随后在提交到存储集合102之前被写入到日志302。然而写入缓冲区902可能在存储日志302的存储器件106上存在,并且可能会导致不一致以及问题,例如如果被认为已经写入到日志302的数据集合104相反地被存储在写入缓冲区902的易失性存储器中,并且故障210会导致数据集合104丢失而不会被写入到日志302。相应地,易失性存储器表示902可以记录对应的数据集合104的状态。例如,在第一时间点904,在发起针对把一组数据集合104移动到日志302的请求之后,易失性存储器表示802可以记录数据集合104的状态为处于被写入到存储器件106的过程中(即表明已经发起了针对把数据集合104写入到存储器件106的请求,但是存储器件106还没有表明已经接收到写入请求)。在第二时间点906,存储器件106做出响应表明接收到数据集合104。然而易失性存储器表示可能无法确定数据集合104是否已被提交到日志302,或者数据集合104是否驻留在写入缓冲区902中。相应地,在第二时间点906,易失性存储器表示902把所述数据集合104标记为已由存储器件106缓冲。与此同时,尚未被存储器件104确认为完全接收到的其他数据集合104可以继续被标记为处于写入到存储器件106的过程中。作为第三时间点908,易失性存储器表示802可以发出针对刷新写入缓冲区902的请求,并且写入缓冲区902可以开始把已经完全接收到的数据集合104提交到包括日志302的非易失性存储介质。在第四时间点910,当存储器件106表明所述刷新请求已被实现时,易失性存储器表示可以把先前被标记为已缓冲的所有数据集合104(即存储器件106确认为在刷新请求之前完全接收到的所有数据集合104)标记为已被完全记入日志并且可选地标记为可去除。在第五时间点912,存储器件106随后可以表明已经完全接收到附加的数据集合104,易失性存储器表示802可以把这些数据集合104标记为已缓冲并且准备好通过第二个刷新请求提交到日志302。通过这种方式,易失性存储器表示802跟踪数据集合104关于存储器件106的写入缓冲区902的状态。
作为该第四方面的第三种变型,写入缓冲区902还可以作为从日志302向存储器件106提交数据集合104的中介并且可能与之发生干扰。按照类似的方式,存储在易失性存储器表示802和/或日志302中的数据集合104的状态可以表明数据集合104是否已从日志302被刷新到存储集合102。例如在检测到从写入缓冲区902向存储集合102提交数据集合104之后(例如对刷新请求的确认),这些技术的一个实施例可以把日志302和/或易失性存储器表示902中的数据集合104标记为已提交,并且可以只把被标记为已提交到存储集合104的数据集合104从日志302和/或易失性存储器表示902中去除。
图10给出了一种示例性情形1000的图示,其特征在于调节日志302以便与对存储集合102进行存储的存储器件106的写入缓冲区902互操作。在该示例性情形1000中,日志302存储将要提交到分布在三个存储器件106上的存储集合102的数据集合104,其中每一个存储器件106包括一个写入缓冲区902。为了确保将数据集合104完全提交到存储有存储集合102的各个存储器件106的物理介质,日志302可以记录已经由日志302请求写入到存储集合102的数据集合104的状态。例如,在第一时间点1002,在标识出将要提交的一个批次318的数据集合104之后,日志302可以发送针对每一个数据集合104去到对该数据集合104进行存储的存储器件106的写入请求。然而当存储器件106确认接收到所述数据集合104时,日志302可能不认为所述数据集合104已被提交到存储集合102,而是可能被存储在每一个存储器件106上的易失性写入缓冲区902中,因此可能把日志302中的每一个数据集合104标记为已被缓冲。在第二时间点1004,日志302可以向各个存储器件106发出刷新请求(并且具体来说是只向存储已缓冲数据集合106的存储器件106发送;例如第三存储器件106没有存储任何最近提交的数据集合104,因此不向其发出刷新请求)。在第三时间点1004,当存储器件106表明已经实现了刷新请求时,日志302可以把所述数据集合104标记为已被提交。日志302还可以在头部指针308与尾部指针306之间标识出一个刷新点1008,从而使得所述刷新点与尾部指针306之间的所有数据集合104都已被提交到存储集合102。在第四时间点1010,日志302随后可以通过把尾部指针308移动到刷新点1008而逐出各个数据集合104,这是因为其间的任何数据集合104都已被完全提交到存储集合102。按照这种方式,日志302可以被适配成考虑到存储有存储集合102的存储器件106的写入缓冲区902的操作。在实施这里给出的技术的同时,本领域普通技术人员可以设想出考虑写入缓冲区902的存在和操作的许多方式。
E、计算环境
图11给出了可以在其中实施这里给出的技术的计算器件1102内的示例性计算环境的图示。示例性的计算器件包括(但不限于)个人计算机、服务器计算机、手持式或膝上型器件、移动器件(比如移动电话、个人数字助理(PDA)、媒体播放器等等)、多处理器系统、消费电子装置、小型计算机、大型计算机以及包括任何前述系统或器件的分布式计算环境。
图11图示了包括被配置成实施这里提供的一个或更多实施例的计算器件1102的系统1100的一个例子。在一种配置中,计算器件1102包括至少一个处理器1106和至少一个存储器组件1108。取决于计算器件的确切配置和类型,存储器组件1108可以是易失性的(比如RAM)、非易失性的(例如比如ROM、闪存等等)或者中间或混合类型的存储器组件。这种配置在图11中由虚线1104图示。
在一些实施例中,器件1102可以包括附加的特征和/或功能。例如,器件1102可以包括一个或更多附加的存储组件1110,其中包括(但不限于)硬盘驱动器、固态存储器件以及/或者其他可移除或不可移除磁性或光学介质。在一个实施例中,实施这里提供的一个或更多实施例的计算机可读和处理器可执行指令被存储在存储组件1110中。存储组件1110还可以存储其他数据对象,比如操作系统的组件、构成一个或更多应用的可执行二进制档、编程库(例如应用编程接口(API))、媒体对象以及文档。计算机可读指令可以被加载到存储器组件1108中以便由处理器1106执行。
计算器件1102还可以包括一个或更多通信组件1116,其允许计算器件1102与其他器件进行通信。所述一个或更多通信组件1116可以包括(例如)调制解调器、网络接口卡(NIC)、射频发送器/接收器、红外端口以及通用串行总线(USB)USB连接。这样的通信组件1116可以包括有线连接(通过物理线绳、线缆或连线连接到网络)或无线连接(比如通过可见光、红外或者一个或更多无线电频率与联网器件无线通信)。
计算器件1102可以包括一个或更多输入组件1114,比如键盘、鼠标、笔、语音输入器件、触摸输入器件、红外摄影机或视频输入器件,以及/或者一个或更多输出组件1112,比如一个或更多显示器、扬声器和打印机。输入组件1114和/或输出组件1112可以通过有线连接、无线连接或其任何组合连接到计算器件1102。在一个实施例中,来自另一个计算器件的输入组件1114或输出组件1112可以被用作计算器件1102的输入组件1114和/或输出组件1112。
计算器件1102的各个组件可以通过各种互连(比如总线)进行连接。这样的互连可以包括外围组件互连(PCI)(比如PCIExpress)、通用串行总线(USB)、火线(IEEE1394)、光学总线结构等等。在另一个实施例中,计算器件1102的各个组件可以通过网络互连。例如,存储器组件1108可以包括位于通过网络互连的不同物理位置的多个物理存储器单元。
本领域技术人员将认识到,被利用来存储计算机可读指令的存储器件可以分布在网络上。例如,可通过网络1118访问的计算器件1120可以存储用以实施这里所提供的一个或更多实施例的计算机可读指令。计算器件1102可以访问计算器件1120,并且下载所述计算机可读指令的一部分或全部以便执行。替换地,计算器件1102可以下载所需要的多条计算机可读指令,或者一些指令可以在计算器件1102处执行,并且一些指令可以在计算器件1120处执行。
F、术语的使用
虽然用特定于结构特征和/或方法动作的语言描述了本主题内容,但是要理解的是,在所附权利要求中限定的主题内容不一定受限于上面描述的具体特征或动作。相反,上面描述的具体特征和步骤是作为实施权利要求的示例性形式而公开的。
在本申请中使用的术语“组件”、“模块”、“系统”、“接口”等等通常意图指代与计算机有关的实体——硬件、硬件与软件的组合、软件或执行中的软件。例如,组件可以是(但不限于)运行在处理器上的过程、处理器、对象、可执行程序、执行线程、程序和/或计算机。作为说明,运行在控制器上的应用和控制器都可以是一个组件。一个或更多组件可以驻留在一个过程和/或执行线程内,并且一个组件可以位于一台计算机上和/或分布在两台或更多台计算机之间。
此外,所要求保护的主题内容可以被实施为一种利用标准编程和/或工程技术来产生软件、固件、硬件或其任何组合以便控制计算机实施所公开的主题内容的方法、设备、或者制造产品。这里使用的术语“制造产品”意图包含可从任何计算机可读器件、载体或介质访问的计算机程序。当然,本领域技术人员将认识到,在不背离所要求保护的主题内容的范围或精神的情况下,本领域技术人员可以对这种配置做出许多修改。
这里提供了各个操作实施例。在一个实施例中,所描述的其中一项或更多项操作可以构成存储在一个或更多计算机可读介质上的计算机可读指令,在由计算器件执行时所述计算机可读指令将使得所述计算器件施行所描述的操作。描述其中一部分或全部操作的顺序不应被理解为意味着这些操作一定是顺序相关的。受益于本说明书,本领域技术人员将认识到替换的排序。此外还将理解的是,不一定所有操作都存在于这里提供的每一个实施例中。
此外,这里使用的“示例性”一词意图充当一个实例、事例或说明。在这里被描述为“示例性”的任何方面或设计不一定应被理解为比其他方法或设计有利。相反,使用“示例性”一词是意图以具体的方式呈现概念。本申请中所使用的术语“或者”意图意味着包含性的“或者”而不是互异性的“或者”。也就是说,除非另行指明或者从上下文明显看出,否则“X采用A或B”意图意味着任何自然的包含性排列。也就是说,如果X采用A、X采用B或者X同时采用A和B,则“X采用A或B”在任何前述事例下都得以满足。此外,除非另行指明或者从上下文中明显看出是针对单数形式,否则用在本申请和所附权利要求书中的冠词“一个/一项”和“某一”通常可以被理解为意味着“一个/一项或更多个/更多项”。
此外,虽然关于一种或更多种实现方式示出并描述了本公开内容,但是基于阅读并理解本说明书和附图,本领域技术人员将会想到等效的更改和修改。本公开内容包括所有这样的修改和更改,并且仅由所附权利要求书的范围限制。特别关于由上面描述的组件(例如元件、资源等等)所施行的各项功能,被用来描述这样的组件的术语意图对应于(除非另行表明)施行所述组件的指定功能的任何组件(例如功能上等效),尽管其在结构上不等效于在本公开内容的这里说明的示例性实现方式中施行所述功能的所公开的结构。此外,虽然本公开内容的某一项具体特征可能是关于几种实现方式当中的仅仅一种公开的,但是这样的特征可以与其他实现方式的一项或更多项其他特征组合,正如可能对于任何给定或特定应用所期望且有利的那样。此外,就在详细描述或权利要求书中使用“包括”、“具有”、“带有”或其变型而言,这样的术语以与术语“包括”类似的方式都意图是包含性的。

Claims (10)

1.一种在由至少一个存储器件提供的存储集合中存储数据集合的方法,所述方法涉及具有处理器的计算机并且包括:
在处理器上执行使得计算机实施以下操作的指令:
在存储器件上生成日志,所述日志被配置成存储分别与一个验证器相关联的各个数据集合;
在接收到针对在存储集合中的某一位置处存储数据集合的请求之后:
为该数据集合计算一个验证器;以及
将所述验证器和所述数据集合存储在日志中;
从日志选择包括将要提交到存储集合的第一数据集合和第二数据集合的一个批次,使得将第一数据集合和第二数据集合一起写入到存储集合快于将第一数据集合和第二数据集合单独地写入到存储集合;
在从日志去除任何数据集合之前,对于所述批次的对应数据集合,将第一数据集合、第一数据集合的验证器、第二数据集合和第二数据集合的第二验证器存储在存储集合中;以及
仅仅在把所述批次的所有数据集合存储在存储集合中之后,从日志中去除所述批次的第一数据集合和第二数据集合。
2.如权利要求1中所述的方法,其中选择批次还包括:在检测到从包括以下各项的提交事件集合当中选择的提交事件之后从日志选择将要存储在存储集合中的第一数据集合和第二数据集合:
涉及日志的容量的日志容量事件;
涉及存储在日志中的数据集合的持续时间的持续时间事件;
涉及针对把日志中的至少一个数据集合提交到存储集合的请求的提交请求事件;以及
涉及存储集合的至少一个存储器件的工作负荷的存储器件工作负荷事件。
3.如权利要求1中所述的方法,选择所述数据集合的批次包括:
选择存储在日志中并且将被存储在存储集合中的第一位置处的第一数据集合以包括在所述批次中;以及
选择存储在日志中并且将被存储在存储集合中的靠近第一位置的第二位置处的第二数据集合以包括在所述批次中。
4.如权利要求1中所述的方法:
对应的请求指定存储集合中的针对所述数据集合的位置;以及
对于数据集合计算验证器包括:
对于完全记录在日志中的数据集合,从该数据集合计算验证器;以及
对于没有完全记录在日志中的数据集合:
读取存储集合中的所述位置处的数据集合的原始版本;
读取该数据集合的原始版本的原始验证器;
从原始验证器中去除该数据集合的原始版本;以及
把该数据集合包括在原始验证器中。
5.如权利要求1中所述的方法:
所述计算机包括易失性存储器;并且
所述指令被配置成:
在易失性存储器中生成存储在存储器件上的日志的易失性存储器表示;以及
在把数据集合存储在日志中之后,把该数据集合存储在日志的易失性存储器表示中。
6.如权利要求5中所述的方法,所述指令被配置成在接收到针对读取数据集合的请求之后:
在确定所述数据集合被存储在易失性存储器内的日志的易失性存储器表示中之后,给出存储在易失性存储器表示中的数据集合;
在确定所述数据集合被存储在存储器件上的日志中之后,给出存储在日志中的数据集合;以及
在确定所述数据集合被存储在存储于存储器件上的存储集合中之后,给出存储在存储器件的存储集合中的数据集合。
7.如权利要求5中所述的方法,所述指令被配置成在把一个批次存储到存储集合之后从日志的易失性存储器表示中去除所述批次。
8.如权利要求7中所述的方法:
所述指令被配置成:
在把数据集合存储在日志中之后,把标记为不可去除的所述数据集合存储在日志的易失性存储器表示中;以及
在把数据集合存储在存储集合中之后,把存储在日志的易失性存储器表示中的所述数据集合标记为可去除;以及
把数据集合从存储在易失性存储器内的日志的易失性存储器表示中去除包括:从日志的易失性存储器表示中仅仅去除被标记为可去除的数据集合。
9.如权利要求5中所述的方法:
日志的易失性存储器表示具有数据集合的容量;以及
在易失性存储器中生成日志的易失性存储器表示包括:在易失性存储器中保留容量以便存储:
日志的易失性存储器表示中的数据集合的容量;
构成日志的易失性存储器表示的容量的数据集合的验证器;以及
被配置成在把日志中所存储的数据集合存储在存储集合中的同时对将要存储在存储集合中的数据集合进行存储的缓冲器。
10.一种把数据存储在包括至少一个存储器件的存储集合上的方法,所述方法涉及具有处理器的计算机并且包括:
向器件发送指令,所述指令在器件的处理器上被执行时:
在存储器件上生成包括记录、头部指针和尾部指针的序列的日志;
在接收到将要存储在存储集合中的某一位置处的数据集合之后:
前提日志的头部指针经过新的记录,并且
把所述数据集合存储在所述新的记录中;
从日志选择包括将要提交到存储集合的第一数据集合和第二数据集合的一个批次,使得第一数据集合和第二数据集合在日志的尾部指针附近;
在从日志去除第一数据集合和第二数据集合之前,把第一数据集合、第一数据集合的验证器、第二数据集合和第二数据集合的验证器提交到存储集合;以及
在将第一数据集合和第二数据集合提交到存储集合之后,前提日志的尾部指针经过所述批次的第一数据集合和第二数据集合。
CN201210333854.2A 2011-09-11 2012-09-11 已验证数据集合的非易失性介质日志记录 Active CN102945201B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/229736 2011-09-11
US13/229,736 US9229809B2 (en) 2011-09-11 2011-09-11 Nonvolatile media journaling of verified data sets

Publications (2)

Publication Number Publication Date
CN102945201A CN102945201A (zh) 2013-02-27
CN102945201B true CN102945201B (zh) 2016-02-17

Family

ID=47728149

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210333854.2A Active CN102945201B (zh) 2011-09-11 2012-09-11 已验证数据集合的非易失性介质日志记录

Country Status (6)

Country Link
US (1) US9229809B2 (zh)
EP (1) EP2754051B1 (zh)
JP (1) JP6026538B2 (zh)
KR (1) KR101863406B1 (zh)
CN (1) CN102945201B (zh)
WO (1) WO2013036265A1 (zh)

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9229809B2 (en) 2011-09-11 2016-01-05 Microsoft Technology Licensing Llc Nonvolatile media journaling of verified data sets
US8456972B2 (en) 2011-09-12 2013-06-04 Microsoft Corporation Efficient access to storage devices with usage bitmaps
US8977826B1 (en) * 2011-12-28 2015-03-10 Emc Corporation Extent commands in replication
US10216822B2 (en) * 2012-11-02 2019-02-26 Vod2, Inc. Data distribution methods and systems
GB2503600B (en) * 2012-12-21 2014-05-14 Mobile Content Man Solutions Ltd Digital memory imaging system and method
CN103488433B (zh) * 2013-09-18 2016-05-11 北京思特奇信息技术股份有限公司 一种基于分布式文件系统的批量文件操作方法及系统
TWI498902B (zh) * 2013-11-28 2015-09-01 Phison Electronics Corp 資料管理方法、記憶體儲存裝置及記憶體控制電路單元
US9628333B2 (en) * 2013-12-04 2017-04-18 International Business Machines Corporation Operating a dual chipset network interface controller (‘NIC’) that includes a high performance media access control chipset and a low performance media access control chipset
CN104021049B (zh) * 2014-05-16 2017-11-03 华为技术有限公司 分布式存储系统中数据统一的方法和以太接口硬盘
US9720774B2 (en) * 2015-06-29 2017-08-01 Sap Se Adaptive recovery for SCM-enabled databases
US20170031791A1 (en) * 2015-07-27 2017-02-02 Futurewei Technologies, Inc. Maintaining a parity-inconsistent table to identify stripes affected by a write hole effect
JP6734536B2 (ja) * 2016-07-29 2020-08-05 富士通株式会社 情報処理装置及びメモリコントローラ
CN106599046B (zh) * 2016-11-09 2020-06-30 北京同有飞骥科技股份有限公司 分布式文件系统的写入方法及装置
US10496319B2 (en) 2017-02-28 2019-12-03 Sap Se Lifecycle management for data in non-volatile memory including blocking creation of a database savepoint and associating non-volatile memory block identifiers with database column fragments
CN108664208B (zh) * 2017-03-27 2022-02-15 珠海极海半导体有限公司 基于flash存储器的文件追加写操作方法及装置
US10936206B1 (en) * 2017-04-05 2021-03-02 Tintri By Ddn, Inc. Handling a device in a latency state in a redundant storage system
CN107315616B (zh) * 2017-06-30 2020-08-21 苏州浪潮智能科技有限公司 一种固件的加载方法、装置及电子设备
KR102441997B1 (ko) * 2017-11-01 2022-09-08 한국전자통신연구원 네트워크에서 메타데이터의 동기화를 제어하는 장치 및 그 방법
CN110018783B (zh) * 2018-01-09 2022-12-20 阿里巴巴集团控股有限公司 一种数据存储方法、装置及系统
CN108920094B (zh) * 2018-06-01 2021-06-08 深圳忆联信息系统有限公司 擦除单元raid方法、装置、计算机设备及存储介质
US11347653B2 (en) * 2018-08-31 2022-05-31 Nyriad, Inc. Persistent storage device management
KR20200035592A (ko) * 2018-09-27 2020-04-06 삼성전자주식회사 스토리지 장치의 구동 방법, 이를 수행하는 스토리지 장치 및 이를 포함하는 스토리지 시스템
CN111208933B (zh) 2018-11-21 2023-06-30 昆仑芯(北京)科技有限公司 数据访问的方法、装置、设备和存储介质
CN112003815A (zh) * 2019-05-27 2020-11-27 阿里巴巴集团控股有限公司 通信系统、方法和装置、定位系统、计算设备和存储介质
US10970170B2 (en) * 2019-08-29 2021-04-06 Micron Technology, Inc. Shared parity protection
CN113126887A (zh) * 2020-01-15 2021-07-16 伊姆西Ip控股有限责任公司 用于重建盘阵列的方法、电子设备和计算机程序产品
US11429308B2 (en) * 2020-03-18 2022-08-30 Vmware, Inc. Adaptive metadata batching based on input/output rate

Family Cites Families (42)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2888958B2 (ja) 1990-10-20 1999-05-10 富士通株式会社 部分書き換え可能な記憶媒体におけるファイル管理方式
JP3250861B2 (ja) 1993-03-09 2002-01-28 株式会社日立製作所 ディスク装置システム
JPH08147110A (ja) 1994-11-18 1996-06-07 Sony Corp データ記録媒体管理方法、データ記録媒体管理装置およびデータ記録媒体
JP2000305860A (ja) 1999-04-23 2000-11-02 Toshiba Corp 情報記憶システム及び同システムに於ける記憶制御方法
JP2001051806A (ja) 1999-08-05 2001-02-23 Fujitsu Ltd ディスクアレイ装置
JP2001166993A (ja) 1999-12-13 2001-06-22 Hitachi Ltd 記憶制御装置およびキャッシュメモリの制御方法
US6516380B2 (en) 2001-02-05 2003-02-04 International Business Machines Corporation System and method for a log-based non-volatile write cache in a storage controller
JP2003196032A (ja) 2001-12-26 2003-07-11 Nec Corp ストレージ装置のライトキャッシュ制御方法及びストレージ装置
JP3788961B2 (ja) * 2002-08-30 2006-06-21 株式会社東芝 ディスクアレイ装置及び同装置におけるレイドレベル変更方法
US7035974B2 (en) 2002-11-06 2006-04-25 Synology Inc. RAID-5 disk having cache memory implemented using non-volatile RAM
US7675828B2 (en) 2003-02-25 2010-03-09 Lg Electronics Inc. Recording medium having data structure for managing at least a data area of the recording medium and recording and reproducing methods and apparatuses
JP4026517B2 (ja) 2003-03-12 2007-12-26 ソニー株式会社 記録媒体、記録装置、記録方法
US7162401B1 (en) 2003-03-28 2007-01-09 Applied Micro Circuits Corporation Monitoring of resources that are being modeled by simulation or emulation
US20050188248A1 (en) * 2003-05-09 2005-08-25 O'brien John Scalable storage architecture
JP2005032413A (ja) 2003-06-19 2005-02-03 Nec Corp 光ディスクの未記録領域への記録方法、光デイスクの記録装置,光ディスク及び光ディスクのデータ記録用プログラム
GB0318384D0 (en) 2003-08-06 2003-09-10 Ibm A storage controller and a method for recording diagnostic information
US7010721B2 (en) 2003-09-29 2006-03-07 International Business Machines Corporation File system journal management
US7197599B2 (en) * 2003-12-29 2007-03-27 Intel Corporation Method, system, and program for managing data updates
JP4144549B2 (ja) 2004-03-31 2008-09-03 日本電気株式会社 データ保存システムおよび該システムの制御方法
JP5128130B2 (ja) 2004-05-10 2013-01-23 パナソニック株式会社 追記形ディスクに対するデータ疑似書換え
US7873782B2 (en) 2004-11-05 2011-01-18 Data Robotics, Inc. Filesystem-aware block storage system, apparatus, and method
JP4435705B2 (ja) * 2005-03-14 2010-03-24 富士通株式会社 記憶装置、その制御方法及びプログラム
US7562188B2 (en) 2005-06-17 2009-07-14 Intel Corporation RAID power safe apparatus, systems, and methods
TWI320139B (en) 2005-08-01 2010-02-01 Method for improving writing data efficiency and storage subsystem and system implementing the same
US7774346B2 (en) 2005-08-26 2010-08-10 Oracle International Corporation Indexes that are based on bitmap values and that use summary bitmap values
US7533298B2 (en) 2005-09-07 2009-05-12 Lsi Corporation Write journaling using battery backed cache
US7457928B2 (en) 2005-10-28 2008-11-25 International Business Machines Corporation Mirroring system memory in non-volatile random access memory (NVRAM) for fast power on/off cycling
US7845008B2 (en) * 2005-12-07 2010-11-30 Lenovo (Singapore) Pte. Ltd. Virus scanner for journaling file system
US7574560B2 (en) 2006-01-03 2009-08-11 Emc Corporation Methods, systems, and computer program products for dynamic mapping of logical units in a redundant array of inexpensive disks (RAID) environment
JP4741371B2 (ja) 2006-01-05 2011-08-03 株式会社日立製作所 システム、サーバ装置及びスナップショットの形式変換方法
US7752402B2 (en) * 2006-08-18 2010-07-06 Isilon Systems, Inc. Systems and methods for allowing incremental journaling
JP2008225616A (ja) 2007-03-09 2008-09-25 Hitachi Ltd ストレージシステム、リモートコピーシステム、及びデータ復元方法
KR101424782B1 (ko) 2007-07-19 2014-08-04 삼성전자주식회사 솔리드 스테이트 디스크 컨트롤러 및 솔리드 스테이트디스크 컨트롤러의 데이터 처리 방법
US8145604B2 (en) * 2007-10-19 2012-03-27 Apple Inc. Method and apparatus for relocating an active five system journal
US7877626B2 (en) 2007-12-31 2011-01-25 Datadirect Networks, Inc. Method and system for disk storage devices rebuild in a data storage system
JP5029513B2 (ja) * 2008-06-30 2012-09-19 ソニー株式会社 情報処理装置、情報処理装置の制御方法、およびプログラム
JP5156518B2 (ja) 2008-07-23 2013-03-06 株式会社日立製作所 記憶制御装置及び方法
US20100138603A1 (en) 2008-12-03 2010-06-03 Atul Mukker System and method for preventing data corruption after power failure
JP2010267164A (ja) * 2009-05-15 2010-11-25 Toshiba Storage Device Corp 記憶装置、データ転送制御装置、データ転送方法およびデータ転送プログラム
KR101562794B1 (ko) 2009-08-04 2015-10-26 삼성전자주식회사 데이터 저장 장치
US9229809B2 (en) 2011-09-11 2016-01-05 Microsoft Technology Licensing Llc Nonvolatile media journaling of verified data sets
US8456972B2 (en) 2011-09-12 2013-06-04 Microsoft Corporation Efficient access to storage devices with usage bitmaps

Also Published As

Publication number Publication date
US9229809B2 (en) 2016-01-05
KR20140060521A (ko) 2014-05-20
JP6026538B2 (ja) 2016-11-16
CN102945201A (zh) 2013-02-27
KR101863406B1 (ko) 2018-06-29
EP2754051B1 (en) 2020-01-01
EP2754051A1 (en) 2014-07-16
JP2014526735A (ja) 2014-10-06
US20130067174A1 (en) 2013-03-14
WO2013036265A1 (en) 2013-03-14
EP2754051A4 (en) 2015-11-25

Similar Documents

Publication Publication Date Title
CN102945201B (zh) 已验证数据集合的非易失性介质日志记录
CN102929750B (zh) 非易失性介质肮脏区段跟踪
CN111433732B (zh) 存储设备以及由存储设备执行的计算机实现的方法
EP3617867B1 (en) Fragment management method and fragment management apparatus
CN102929748B (zh) 数据备份方法及装置
US9405625B2 (en) Optimizing and enhancing performance for parity based storage
JP6476932B2 (ja) ストレージ装置,制御プログラム,ストレージシステム及びデータ転送方法
JP2014067313A (ja) ストレージ制御装置、ストレージ制御方法、およびストレージ制御プログラム
US20160085445A1 (en) Method operating raid system and data storage systems using write command log
US10095585B1 (en) Rebuilding data on flash memory in response to a storage device failure regardless of the type of storage device that fails
JP5942512B2 (ja) ストレージ制御装置およびストレージシステム
CN105302665B (zh) 一种改进的写时拷贝快照方法及系统
CN107729536A (zh) 一种数据存储方法和装置
CN111124258B (zh) 全闪存阵列的数据存储方法、装置、设备及可读存储介质
US8327043B2 (en) Buffer management device which manages buffer transfer, storage apparatus comprising the same device, and buffer management method
CN116204137B (zh) 基于dpu的分布式存储系统、控制方法、装置及设备
US8418029B2 (en) Storage control device and storage control method
CN106933707B (zh) 基于raid技术的数据存储设备数据恢复方法及系统
US11275518B2 (en) System and method for implementing heterogeneous media types with raid
US20130031320A1 (en) Control device, control method and storage apparatus
CN104360959B (zh) 数据存储的方法及控制器
JP6556980B2 (ja) ストレージ制御装置、ストレージ制御方法及びストレージ制御プログラム
US20240103973A1 (en) Leveraging file-system metadata for direct to cloud object storage optimization
US20230244569A1 (en) Recover Corrupted Data Through Speculative Bitflip And Cross-Validation
CN103019966A (zh) 一种包含备份体内存的数据储存系统及其管理方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: MICROSOFT TECHNOLOGY LICENSING LLC

Free format text: FORMER OWNER: MICROSOFT CORP.

Effective date: 20150618

C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20150618

Address after: Washington State

Applicant after: Micro soft technique license Co., Ltd

Address before: Washington State

Applicant before: Microsoft Corp.

C14 Grant of patent or utility model
GR01 Patent grant