CN116107797A - 数据存储方法及装置、电子设备和存储介质 - Google Patents
数据存储方法及装置、电子设备和存储介质 Download PDFInfo
- Publication number
- CN116107797A CN116107797A CN202111320489.7A CN202111320489A CN116107797A CN 116107797 A CN116107797 A CN 116107797A CN 202111320489 A CN202111320489 A CN 202111320489A CN 116107797 A CN116107797 A CN 116107797A
- Authority
- CN
- China
- Prior art keywords
- data
- blocks
- block
- check
- encoding
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1004—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Quality & Reliability (AREA)
- Computer Security & Cryptography (AREA)
- Error Detection And Correction (AREA)
- Signal Processing For Digital Recording And Reproducing (AREA)
Abstract
本公开提供了一种数据存储方法及装置、设备和介质,涉及分布式存储技术领域。实现方案为:获取待存储的多个数据块和多个数据块的存储需信息;基于存储需求信息,确定所述多个数据块的目标编码策略;基于目标编码策略,对多个数据块进行编码,以生成多个数据块对应的多个校验块;以及将多个数据块和多个校验块关联存储。
Description
技术领域
本公开涉及分布式存储技术领域,具体涉及一种数据存储方法及装置、电子设备、计算机可读存储介质和计算机程序产品。
背景技术
分布式存储是一种将数据分散存储在多***立的设备上的存储技术。相应地,分布式存储***是采用分布式存储技术的存储***,其包括用于存储数据的多台设备。在分布式存储***中,通常采用冗余的方式来存储数据,以保证分布式存储***的可靠性和容错性,避免因部分设备出错而导致数据丢失。
在此部分中描述的方法不一定是之前已经设想到或采用的方法。除非另有指明,否则不应假定此部分中描述的任何方法仅因其包括在此部分中就被认为是现有技术。类似地,除非另有指明,否则此部分中提及的问题不应认为在任何现有技术中已被公认。
发明内容
本公开提供了一种数据存储方法及装置、电子设备、计算机可读存储介质和计算机程序产品。
根据本公开的一方面,提供了一种数据存储方法,包括:获取待存储的多个数据块和所述多个数据块的存储需求信息;基于所述存储需求信息,确定所述多个数据块的目标编码策略;基于所述目标编码策略,对所述多个数据块进行编码,以生成所述多个数据块对应的多个校验块;以及将所述多个数据块和所述多个校验块关联存储。
根据本公开的另一方面,还提供一种数据存储装置,包括:获取单元,被配置为获取待存储的多个数据块和所述多个数据块的存储需求信息;确定单元,被配置为基于所述存储需求信息,确定所述多个数据块的目标编码策略;编码单元,被配置为基于所述目标编码策略,对所述多个数据块进行编码,以生成所述多个数据块对应的多个校验块;以及存储单元,被配置为将所述多个数据块和所述多个校验块关联存储。
根据本公开的另一方面,还提供一种电子设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中所述存储器存储有计算机程序,所述计算机程序在被所述至少一个处理器执行时实现根据上述的方法。
根据本公开的另一方面,还提供一种存储有计算机程序的非瞬时计算机可读存储介质,其中,所述计算机程序在被处理器执行时实现根据上述的方法。
根据本公开的另一方面,还提供一种计算机程序产品,包括计算机程序,其中,所述计算机程序在被处理器执行时实现根据上述的方法。
根据本公开的一个或多个实施例,能够基于用户的存储需求信息动态选择合适的编码策略,实现了编码策略的弹性化定制,能够满足不同用户对数据存储的差异化需求,从而避免不必要的存储空间浪费,提高存储效率,降低存储成本。
应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
附图示例性地示出了实施例并且构成说明书的一部分,与说明书的文字描述一起用于讲解实施例的示例性实施方式。所示出的实施例仅出于例示的目的,并不限制权利要求的范围。在所有附图中,相同的附图标记指代类似但不一定相同的要素。
图1示出了根据本公开实施例的数据存储方法的流程图;
图2示出了根据本公开实施例的条带存储的示意图;
图3示出了根据本公开一些实施例的存储***的结构框图;
图4示出了根据本公开另一些实施例的存储***的结构框图;
图5示出了根据本公开另一些实施例的存储***的结构框图;
图6示出了根据本公开的实施例的数据存储装置的结构框图;以及
图7示出了能够用于实现本公开的实施例的示例性电子设备的结构框图。
具体实施方式
以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
在本公开中,除非另有说明,否则使用术语“第一”、“第二”等来描述各种要素不意图限定这些要素的位置关系、时序关系或重要性关系,这种术语只是用于将一个元件与另一元件区分开。在一些示例中,第一要素和第二要素可以指向该要素的同一实例,而在某些情况下,基于上下文的描述,它们也可以指代不同实例。
在本公开中对各种所述示例的描述中所使用的术语只是为了描述特定示例的目的,而并非旨在进行限制。除非上下文另外明确地表明,如果不特意限定要素的数量,则该要素可以是一个也可以是多个。此外,本公开中所使用的术语“和/或”涵盖所列出的项目中的任何一个以及全部可能的组合方式。
在分布式存储***(例如分布式对象存储***、分布式文件存储***等)中,通常采用冗余的方式来存储数据,以保证分布式存储***的可靠性和容错性,避免因部分设备出错而导致数据丢失。在采用纠删码技术对原始数据行编码时,需要指定原始数据与校验数据的数据量的配比。
纠删码(Erasure Coding,EC)是分布式存储***中的一种常用的冗余方式。纠删码的基本思想是通过对原始数据进行编码,得到校验数据,当部分原始数据丢失时,可以使用校验数据进行解码从而得到原始数据,以达到容错的目的。在采用纠删码技术对原始数据行编码时,需要指定原始数据与校验数据的数据量的配比。
纠删码的编解码方式通常包括基于生成矩阵和基于生成多项式两种。发明人经过研究发现,基于生成矩阵的编解码方式计算简单,可以保证分布式存储***具有较高的吞吐量(即单位时间内处理的数据量),提高读写性能。但该方式对静默错误的感知能力较差,在遇到静默错误时,若没有***层面的数据的完整性校验机制,会导致数据解码出错,引发数据不一致的问题。基于生成多项式的编解码方式计算复杂度较高,导致***的吞吐量较低,读写性能受限,但对于静默错误的感知能力较强(能够检测出静默错误),容错性较好。
发明人注意到,分布式存储***通常采用固定的编码方案(包括原始数据和校验数据的数据量的配比以及编解码方式)来实现纠删码存储,所有用户的编码方案相同,无法针对不同用户进行编码方案的弹性化定制,不能满足用户的差异化需求。若***提供的编码方案超出用户的需求,则可能造成不必要的存储空间浪费、存储效率降低以及服务成本增加;若***提供的编码方案达不到用户的需求,则可能造成用户的流失。
有鉴于此,本公开的实施例提供一种数据存储方法,该方法能够基于用户的存储需求信息动态地选择合适的编码策略,使编码策略与用户的需求相匹配,实现了编码策略的弹性化定制,能够满足不同用户对数据存储的差异化需求,避免不必要的存储空间浪费,提高存储效率,降低存储成本。
下面将结合附图详细描述本公开的实施例。
图1示出了根据本公开的实施例的数据存储方法100的流程图。方法100例如可以应用于分布式存储***(下简称“存储***”)中,具体地,可以应用于存储***的任一设备(即用于存储数据的服务器)中。
如图1所示,方法100可以包括:
步骤S110、获取待存储的多个数据块和多个数据块的存储需求信息;
步骤S120、基于存储需求信息,确定多个数据块的目标编码策略;
步骤S130、基于目标编码策略,对多个数据块进行编码,以生成多个数据块对应的多个校验块;以及
步骤S140、将多个数据块和多个校验块关联存储。
根据本公开的实施例,能够基于用户的存储需求信息动态选择合适的编码策略,实现了编码策略的弹性化定制,能够满足不同用户对数据存储的差异化需求,从而避免不必要的存储空间浪费,提高存储效率,降低存储成本。
以下详细描述方法100的各个步骤。
在步骤S110中,获取待存储的多个数据块和多个数据块的存储需求信息。
在本公开的实施例中,数据块指的是包含一定数据量的一组数据。校验块指的是对数据块进行编码后所得到的一组数据。根据一些实施例,每个数据块所包括的数据量可以是预先设定的。通常地,每个数据块所包括的数据量可以是KB-MB量级,例如,16MB。根据一些实施例,每个校验块所包括的数据量可以与每个数据块所包括的数据量相同。
根据一些实施例,待存储的多个数据块可以通过对客户端设备上传的数据流进行划分而得到。
客户端设备例如可以是物联网设备(例如工业传感器、道路摄像头、智能车载设备、智能家用设备等)、移动式计算设备(例如手机、平板电脑、智能可穿戴设备、笔记本计算机等)、固定式计算设备(例如桌面计算机、工控机、局域网网关、局域网服务器等)等,但不限于此。
客户端设备可以进行数据采集或数据处理,将采集到的或经处理得到的数据以数据流的方式上传至存储***,具体地,上传至存储***中的某个或某些服务器。服务器接收到客户端设备上传的数据流之后,按照预设的单个数据块所包括的数据量,对数据流进行划分,得到多个数据块。例如,客户端设备可以是道路摄像头。道路摄像头实时采集图像数据,并将采集到的图像数据上传至服务器进行存储。服务器每接收到16MB图像数据,将其划分为一个数据块。随着道路摄像头不断采集并上传图像数据,服务器将划分出大小为16MB的多个数据块。
根据另一些实施例,待存储的多个数据块也可以是通过对客户端设备批量上传的数据进行划分而得到。例如,客户端设备可以是桌面计算机,桌面计算机基于用户的交互操作,一次性地向服务器上传了128MB数据以进行存储。服务器接收到桌面计算机上传的128MB数据后,按照每个数据块16MB数据,将其划分为128/18=8个数据块。
存储需求信息用于表示用户对数据存储的需求。根据一些实施例,存储需求信息包括存储成本需求信息、存储可靠性需求信息、读写性能需求信息中的至少一种。
存储成本需求信息用于表示用户对存储成本的需求。根据一些实施例,可以向用户提供存储成本需求信息的候选值的列表,以便用户从该列表中选择出一个候选值作为存储成本需求信息。存储成本需求信息的候选值例如可以包括标准、低成本、极致低成本等。应当理解,本公开不限制存储成本需求信息的候选值的数量和内容。
存储可靠性需求信息用于表示用户对存储可靠性的需求。根据一些实施例,可以向用户提供存储可靠性需求信息的候选值的列表,以便用户从该列表中选择出一个候选值作为存储可靠性需求信息。存储可靠性需求信息的候选值例如可以包括99.999%(即5个9)、99.99999%(即7个9)、99.9999999%(即9个9)、99.999999999%(即11个9)等。应当理解,本公开不限制存储可靠性需求信息的候选值的数量和内容。
读写性能需求信息用于表示用户对存储***的读写性能的需求。在一些实施例中,也可以将存储***的读写性能称为服务质量(Quality of Service,QoS)。根据一些实施例,可以向用户提供读写性能需求信息的候选值的列表,以便用户从该列表中选择出一个候选值作为读写性能需求信息。读写性能需求信息的候选值例如可以包括读优先、写优先、读写均衡等。应当理解,本公开不限制读写性能需求信息的候选值的数量和内容。
根据一些实施例,存储需求信息可以是预先设定的。例如,在存储***中,每个用户可以对应于一个或多个存储地址,可以预设各存储地址对应的存储需求信息。在用户对多个数据块进行存储时,需要指定多个数据块的存储地址,该存储地址对应的存储需求信息即为这多个数据块的存储需求信息。
又例如,在对象存储***中,用户可以创建一个或多个用于存储数据的存储空间(Bucket,又称“存储桶”),存储需求信息可以作为存储空间的属性,在存储空间被创建时进行设置,或者在存储空间已被创建后进行设置或修改。当用户对多个数据块进行存储时,可以指定这多个数据块对应的存储空间(即指定将这多个数据块存储至哪个存储空间)。服务器获取到待存储的多个数据块后,通过读取这多个数据块对应的存储空间的属性值,即可获取多个数据块的存储需求信息。
在步骤S120中,基于获取到的存储需求信息,可以确定多个数据块的目标编码策略。目标编码策略用于对多个数据块进行编码。
根据一些实施例,可以预先设置存储需求信息与编码策略的对应关系。相应地,在步骤S120中,可以基于预设的存储需求信息与编码策略的对应关系,确定多个数据块的目标编码策略。具体地,存储需求信息与编码策略的对应关系可以通过对应表来表示。即,可以预先设置存储需求信息与编码策略的对应表,通过查表来确定目标编码策略。
例如,示例性的存储需求信息与编码策略的对应关系可以如下表1所示:
表1
基于表1,例如,在存储成本需求信息为“标准”,存储可靠性需求信息为“9个9”,读写性能需求信息为“读优先”的情况下,对应的目标编码策略为“策略1”。
目标编码策略是一种纠删码编码策略,用于对待编码的多个数据块进行编码。根据一些实施例,目标编码策略包括每次编码相应的数据块的第一数量和每次编码所生成的校验块的数量。相应地,在步骤S130中,可以基于目标编码策略所包括的第一数量和第二数量,将待存储的多个数据块划分为至少一个数据组,每个数据组包括第一数量的数据块;以及分别对每个数据组进行编码,以生成该数据组对应的第二数量的校验块。在步骤S140中,可以将每个数据组以及该数据组所对应的校验块存储为一个条带,即,每个条带包括一个数据组(包括第一数量的数据块)以及该数据组所对应的第二数量的校验块。条带所对应的第一数量和第二数量被称为条带的“参数配比”。例如,某一条带包括8个数据块和4个校验块,则该条带的参数配比为8+4。
针对上述实施例,示例性的存储需求信息与编码策略的对应关系可以如下表2所示:
表2
基于表2,例如,在存储成本需求信息为“标准”,存储可靠性需求信息为“9个9”,读写性能需求信息为“读优先”的情况下,其对应的目标编码策略包括每次编码的数据块的第一数量y1和每次编码所生成的校验块的第二数量z1。第一数量例如可以是8、12、14、28等,第二数量例如可以是2、4、6等。
通常地,存储成本越低、写性能越高,对应的第一数量越大,即每次编码的数据块越多。在一些情况中,极致低成本可以结合存储***的硬件设施来实现,例如采用成本更低的存储器(例如磁盘)来存储数据。
可以理解,在一些实施例中,一组存储需求信息所对应的目标编码策略中可以仅包括第一数量和第二数量(如表2所示)。
在另一些实施例中,一组需求信息所对应的目标编码策略中除了包括第一数量和第二数量之外,还可以包括该第一数量的数值所属的第一数值范围以及该第二数量的数值所属的第二数值范围。在这种情况下,第一数量为第一数值范围内的一个初始值,第二数量为第二数值范围内的一个初始值。
上述实施例的示例性的存储需求信息与编码策略的对应关系可以如下表3所示:
表3
在表3中,第i组(i=1,2,3,…)存储需求信息对应的编码策略包括第一数量yi、第二数量zi、yi的数值所属的第一数值范围[pi,qi]以及zi的数值所属的第二数值范围[si,ti]。可以理解,第一数量yi是第一数值范围[pi,qi]内的一个初始值,第二数量zi是第二数值范围[si,ti]内的一个初始值。
基于上述实施例,在步骤S120中,可以基于存储需求信息,确定每次编码的数据块的第一数量、每次编码所生成的校验块的第二数量、第一数量的数值所属的第一数值范围以及第二数量的数值所属的第二数值范围。相应地,在步骤S130中,可以基于所确定的第一数量和第二数量,将多个数据块划分为至少一个数据组,每个数据组包括第一数量的数据块;以及分别对每个数据组进行编码,以生成该数据组对应的第二数量的校验块。在多个数据块存储完成后,可以统计多个数据块的访问频数,基于访问频数,分别在所确定的第一数值范围和第二数值范围内,对第一数量和第二数量的数值进行调整,从而在满足用户需求的前提下进一步提高数据访问效率。基于访问频数来调整第一数量和第二数量的具体步骤将下文进行详述。
根据一些实施例,目标编码策略可以仅包括上述第一数量和第二数量,或者仅包括上述第一数量、第二数量、第一数值范围和第二数值范围,而不包括目标编码模式。在这种情况下,存储***将采用默认的编码模式(例如基于生成多项式的第一编码模式或者基于生成矩阵的第二编码模式)来对每个数据组进行编码。
根据另一些实施例,目标编码策略还可以包括目标编码模式,目标编码模式例如可以包括基于生成多项式的第一编码模式和基于生成矩阵的第二编码模式。
在目标编码策略包括目标编码模式的情况下,示例性的存储需求信息与编码策略的对应关系可以如下表4所示:
表4
需要说明的是,表4中的存储需求信息与编码模式的对应关系仅作为示例,以便于理解本公开的实施例。存储需求信息与编码模式的对应关系不限于表4所示。
基于预设的存储需求信息与编码策略的对应关系,可以确定目标编码模式。相应地,在步骤S130中,可以基于所确定的目标编码模式(例如基于生成多项式的第一编码模式或基于生成矩阵的第二编码模式)分别对每个数据组进行编码,以生成该数据组对应的第二数量的校验块。
根据一些实施例,在目标编码模式为基于生成多项式的第一编码模式的情况下,可以采用生成多项式对数据组进行编码,以生成第二数量的校验块,其中,第二数量的校验块包括目标校验块,目标校验块为该数据组所包括的第一数量的数据块的异或,以用于故障修复。
生成多项式的表达式可以有多种。根据一些实施例,生成多项式例如可以是RS(Reed-Solomon,里德-所罗门)编码算法中的生成多项式,其表达式为:
g(x)=(x-α0)(x-α1)…(x-αd-1) (1)
式中,g(x)为变量x的生成多项式,d为第二数量,α为伽罗瓦域(Galois Field,GF)的生成元,对于伽罗瓦域GF(28)来说,α=2。
采用式(1)所示的生成多项式对数据组内的第一数量的数据块进行编码的过程可以如下:
将数据组记为M=[m0 m1…mk-1]T,其中,mi(i=0,2,…,k-1)为数据组中的第i个数据块,k为第一数量,T表示转置。
数据组M对应的数据多项式m(x)为:
采用式(1)中的生成多项式g(x)对数据组M进行编码,得到的第二数量的校验块对应的校验多项式b(x)为:
b(x)=xdm(x)mod g(x) (3)
式(3)中,mod表示求余。
可以将校验多项式b(x)表示成下式(4)的形式:
式(4)中的bi即为基于RS编码算法所生成的第二数量的校验块。基于RS编码,存在以下性质:采用生成多项式g(x)=(x-α0)(x-α1)…(x-αd-1)对数据组M进行编码,所得到的所有校验块的异或等于所有数据块的异或(在伽罗瓦域中,异或操作与加法操作等同),即有
在本公开的实施例中,可以将基于RS编码算法所生成的第二数量的校验块bi中的任一个校验块替换为所有数据块的异或,例如,将第一个校验块b0替换为所有校验块的异或,即令由此,可以在条带(包括数据组和该数据组对应的第二数量的校验块)中仅有一个块发生故障时(发生故障的块记为“故障块”),可以快速对故障块进行修复,提高单个故障的修复效率。故障修复过程将于下文详述。
根据另一些实施例,在目标编码模式为基于生成矩阵的第二编码模式的情况下,可以采用生成矩阵来对数据组进行编码,以生成该数据组对应的第二数量的校验块。具体地,生成矩阵包括多个编码向量,可以获取生成矩阵中的第二数量的编码向量;以及采用第二数量的编码向量分别对该数据组进行编码(例如将编码向量与数据组相乘),以生成与第二数量的编码向量分别对应的第二数量的校验块。
生成矩阵可以有多种。根据一些实施例,生成矩阵例如可以是范德蒙矩阵、柯西矩阵等,但不限于此。本公开实施例的生成矩阵的尺寸例如可以是e*k,即生成矩阵包括e行、k列,其中e大于或等于第二数量,k为第一数量。优选地,将e的值设置为大于第二数量,从而便于在第二编码模式下,对校验块进行裁剪或扩张。校验块裁剪和扩张的具体步骤将于下文详述。
如上所述,在步骤S130中,可以基于目标编码策略(包括每次编码的数据块的第一数量、每次编码所生成的校验块的第二数量,以及第一数量的数值所属的第一数值范围、第二数量的数值所属的第二数值范围、目标编码策略中的至少之一),将多个数据块划分为至少一个数据组,每个数据组包括第一数量的数据块;以及分别对每个数据组进行编码,以生成该数据组对应的第二数量的校验块,从而得到待存储的多个数据块对应的多个校验块。
在通过步骤S130得到多个数据块对应的多个校验块后,可以执行步骤S140,将多个数据块与多个校验块关联存储。具体地,根据一些实施例,可以将多个数据组和多个校验块存储为至少一个条带,每个条带包括一个数据组和该数据组所对应的校验块。
在本公开的实施例中,将一个数据组(包括第一数量的数据块)与其对应的第二数量的校验块记为一个条带。根据一些实施例,可以将条带中的各个块分别存储至不同的服务器中,以提高数据存储的可靠性和容错性。例如,一个条带包括8个数据块和4个校验块,即,该条带共包括12个块,可以将这12个块分别存储至不同的服务器中。图2示出了该实施例的块存储的示意图。如图2所示,存储***200例如包括服务器201-212共12个服务器。条带220(如图2中的阴影部分所示)所包括的8个数据块251-258分别被存储至服务器201-208中,4个校验块261-264分别被存储至服务器209-212中。可以理解,服务器201-212中除了存储有条带220的各个块之外,还可以存储其他条带的数据块和/或校验块。例如,服务器205中还存储有校验块281,服务器210中还存储有数据块271,服务器211中还存储有校验块282。
根据一些实施例,在目标编码策略包括第一数值范围和第二数值范围的情况下,在将多个数据块与多个校验块关联存储后,方法100还可以包括:统计多个数据块在预设时间段内的访问频数;基于访问频数,对第一数量和第二数量中的至少之一的数值进行调整,其中,调整后的第一数量的数值属于第一数值范围,调整后的第二数量的数值属于第二数值范围;以及基于调整后的第一数量和第二数量,对多个数据块进行编码。
基于上述实施例,能够基于访问频数,分别在第一数值范围和第二数值范围内,对第一数量和第二数量的数值进行调整,并基于调整后的第一数量和第二数量对多个数据块进行重新编码,从而在满足用户需求的前提下进一步提高数据访问效率。
根据一些实施例,在对象存储***中,用户的存储空间(Bucket)可以具有动态调整标志位的属性,该属性可用于开启或关闭基于访问频率来动态调整第一数量和/或第二数量的功能。例如,动态调整标志位为1,则开启基于访问频率来动态调整第一数量和/或第二数量的功能,动态调整标志位为0,则关闭基于访问频率来动态调整第一数量和/或第二数量的功能。
根据一些实施例,调整后的第一数量的数值与调整后的第二数量的数值之间的比值与访问频数负相关。即,访问频数越高,每次编码的数据块的第一数量的数值相对于校验块的第二数量来说越小,从而能够提高数据恢复效率和数据访问效率。
具体地,可以仅调整第一数量,或者仅调整第二数量,或者同时调整第一数量和第二数量。例如,某个Bucket在最近7天的访问频数较高(例如可以高于一预设的阈值),则可以调整第一数值和/或第二数值,以减小第一数量的数值与第二数量的数值的比值。例如,当前第一数量为8,第二数量为4,第一数量与第二数量的比值为8/4=2。若仅调整第一数量,则可以减小第一数量的数值,例如将第一数量调整为6,调整后的第一数量与第二数量的比值为6/4=1.5。若仅调整第二数量,则可以增大第二数量的数值,例如将第二数量调整为5,则调整后的第一数量与第二数量的比值为8/5=1.6。若同时调整第一数量和第二数量,则第一数量、第二数量既可以增大、也可以减小,只要保证调整后的第一数量与第二数量的比值小于原比值(即2)即可。
如前所述,在采用基于生成多项式的第一编码模式对各数据组进行编码的情况下,各数据组对应的第二数量的校验块中包括目标校验块。基于目标校验块,可以实现快速的故障修复。
相应地,根据一些实施例,在采用基于生成多项式的第一编码模式对各数据组进行编码的情况下,方法100还可以包括:对至少一个条带进行故障检测,其中,条带包括任一数据组和该数据组所对应的校验块;以及响应于确定至少一个条带中的至少一者包括至少一个故障块,基于至少一个故障块的数量和类型以及目标校验块,对至少一个故障块进行修复。
根据一些实施例,条带的故障检测可以由存储***自动进行。例如,存储***可以定期采用诸如CRC(Cyclic Redundancy Check,循环冗余校验)等算法来检测条带中的各个块的数据正确性,若某个块的数据不正确,则将该块标记为故障块。故障块可以是数据块,也可以是校验块。即,故障块包括数据块、校验块两种类型。
基于至少一个故障块的数量和类型以及目标校验块,对至少一个故障块进行修复具体可以包括以下四种情况中的至少一种。
根据一些实施例,在第一种情况中,响应于确定至少一个故障块的数量为一并且故障块为数据块,将故障块替换为条带中的除故障块以外的其他数据块与目标校验块的异或。
根据上述实施例,若条带中仅有一个数据块发生故障,则可以计算目标校验块与其他未发生故障的数据块的异或,然后将发生故障的数据块替换为计算出的异或结果,即可完成对该故障的数据块的修复。例如,某一条带中的数据块为m0,m1,…,m7,校验块为b0,b1,b2,b3,其中,b0为目标校验块,有若故障块为数据块m2,即数据块m2发生故障,则可以计算出修复后的数据块为m2’=b0+m0+m1+m3+m4+m5+m6+m7。
根据一些实施例,在第二种情况中,响应于确定至少一个故障块均为校验块,将目标校验块标记为故障块,以及对条带中的数据组进行重新编码,以得到各故障块对应的修复后的校验块。
根据上述实施例,若条带中仅有校验块发生故障,则不论目标校验块是否发生故障,均将目标校验块标记为故障块。随后,可以对条带中的数据组进行重新编码,以得到修复后的校验块。例如,某一条带中的数据块为m0,m1,…,m7,校验块为b0,b1,b2,b3,其中,b0为目标校验块,有若故障块为校验块b1,则将目标校验块b0也标记为故障块,随后采用基于生成多项式的第一编码模式,对数据块m0,m1,…,m7进行重新编码,得到修复后的目标校验块b0’和修复后的校验块b1’。
根据一些实施例,在第三种情况中,响应于确定至少一个故障块的数量大于一并且至少一个故障块均为数据块,将目标校验块与其他校验块的异或确定为修复后的目标校验块,以及至少基于修复后的目标校验块,采用预设的解码算法来对至少一个故障块进行修复。
预设的解码算法例如可以是与RS编码算法所对应的解码算法,即RS解码算法。RS解码算法例如可以包括以下步骤1-步骤4:
步骤1、进行标准的基于生成多项式的RS解码流程,计算伴随多项式。
步骤2、创建错误定位多项式。
步骤3、根据故障块的位置,在错误定位多项式中进行标记。
步骤4、基于PGZ(Peterson-Gorenstein-Zierler)解码算法进行纠错(具体步骤可以参考论文Gorenstein,Daniel;Peterson,W.Wesley;Zierler,Neal(1960),"Two-ErrorCorrecting Bose-Chaudhuri Codes are Quasi-Perfect",Information and Control,3(3):291–294,doi:10.1016/s0019-9958(60)90877-9.)。
根据上述实施例,通过将目标校验块与其他校验块的异或确定为修复后的目标校验块,可以将第二数量的校验块还原成基于RS编码所得到的校验块的原始状态。随后,采用RS解码算法,可以对发生故障的数据块进行修复,从而恢复出正确的数据块。
例如,某一条带中的数据块为m0,m1,…,m7,校验块为b0,b1,b2,b3,其中,b0为目标校验块,有若故障块为数据块m2,m3,则可以计算修复后的目标校验块b0’、b1,b2,b3即为基于RS编码算法所生成的原始的校验块。随后,基于b0’、b1,b2,b3,采用RS解码算法对条带进行解码,可以得到修复后的正确的数据块。
根据一些实施例,在第四种情况中,响应于确定至少一个故障块的数量大于一并且至少一个故障块包括数据块和校验块,将目标校验块标记为故障块,以及采用上述解码算法来对至少一个故障块进行修复。
根据上述实施例,若条带中存在多个故障块并且故障块既包括数据块,也包括校验块,则不论目标校验块是否发生故障,均将目标校验块标记为故障块。随后,采用RS解码算法来对故障块进行修复,从而恢复出正确的数据块和校验块。
例如,某一条带中的数据块为m0,m1,…,m7,校验块为b0,b1,b2,b3,其中,b0为目标校验块,有若故障块为数据块m2和校验块b1,则将目标校验块b0也标记为故障块。随后,采用RS解码算法对条带进行解码,可以得到修复后的正确的数据块和校验块。
如前所述,在采用基于生成矩阵的第二编码模式对各数据组进行编码的情况下,可以实现校验块的快速裁剪和扩张。
根据一些实施例,在采用基于生成矩阵的第二编码模式对各数据组进行编码的情况下,所生成的第二数量的校验块按照对应的编码向量在生成矩阵中的顺序排列。方法100还可以包括下述校验块裁剪步骤:响应于校验块裁剪请求,确定待删除的校验块的第三数量;以及删除第二数量的校验块中的顺序在后的第三数量的校验块。
根据上述实施例,能够实现校验块的快速裁剪,在数据块的数量(即第一数量)不变的前提下,减少校验块的数量,从而提高存储效率,节省存储成本。
根据一些实施例,校验块裁剪请求例如可以由用户发出,也可以由存储***自动发出(例如,如上文所述,存储***可以基于访问频数,自动减少第二数量的数值,即对校验块进行裁剪)。
例如,第二数量为4,采用基于生成矩阵的第二编码模式对数据组进行编码,得到第二数量的校验块分别为b0,b1,b2,b3。基于校验块裁剪请求,确定需要删除2个校验块,即第三数量为2,则从校验块b0,b1,b2,b3中,按照从后向前的顺序删除2个校验块,即删除校验块b2和b3。
根据一些实施例,在采用基于生成矩阵的第二编码模式对数据组进行编码的情况下,方法100还可以包括下述校验块扩张步骤:响应于校验块扩张请求,确定待增加的校验块的第四数量;从生成矩阵中获取位于第二数量的编码向量之后的第四数量的编码向量;以及采用第四数量的编码向量分别对该数据组进行编码,以生成与第四数量的编码向量分别对应的第四数量的待增加的校验块。
根据上述实施例,能够实现校验块的快速扩张,在数据块的数量(即第一数量)不变的前提下,增加校验块的数量,从而提高存储***的容错性。
根据一些实施例,校验块扩张请求例如可以由用户发出,也可以由存储***自动发出(例如,如上文所述,存储***可以基于访问频数,自动增加第二数量的数值,即对校验块进行扩张)。
例如,第二数量为4,采用基于生成矩阵的第二编码模式对数据组进行编码,得到第二数量的校验块分别为b0,b1,b2,b3,校验块b0,b1,b2,b3分别基于生成矩阵中的编码向量v0,v1,v2,v3得出。基于校验块扩张请求,确定需要增加2个校验块,即第四数量为2,则从生成矩阵中获取位于编码向量v3之后的编码向量v4,v5,采用编码向量v4,v5分别对该数据组进行编码,得到增加的校验块b4,b5。
以上实施例描述了在数据块的数量(即第一数量)保持不变的情况下的校验块的裁剪和扩张过程。
在另一些实施例中,也可以在数据块的第一数量发生变化的情况下进行校验块的裁剪和扩张。在这种情况下,校验块的裁剪指的是校验块的第二数量与数据块的第一数量的比值减小,校验块的扩张指的是校验块的第二数量与数据块的第一数量的比值增加。例如,某一条带当前包括8个数据块,4个校验块,第二数量与第一数量的比值为4/8=0.5。若将该条带调整为包括16个数据块,4个校验块,则第二数量与第二数量的比值被调整为4/16=0.25,第二数量与第一数量的比值减小,因此本次调整为校验块的裁剪。
根据一些实施例,方法100还可以包括:响应于编码模式切换指令,采用预设的转换矩阵来实现不同目标编码模式相应的校验块之间的转换。
根据一些实施例,编码模式切换指令例如可以由用户发出,也可以由存储***自动发出。通过进行不同目标编码模式相应的校验块之间的转换,可以进一步满足用户需求,提高存储效率,以及节省存储成本。
根据一些实施例,生成多项式与生成矩阵具有等价性,在满足d≤k-1的条件下(k为第一数量,d为第二数量),任意一种基于生成多项式的编码方案(例如基于生成多项式的RS编码方案),都可以转换为相同参数下的基于生成矩阵的编码方案。证明过程如下:
在伽罗瓦域GF(2^8)中,生成多项式为g(x)=(x-α0)(x-α1)…(x-αd-1),即上式(1)。α=2。由生成多项式的性质可得:
m(1)=b(1) (5)
αdm(α)=b(α) (6)
…αd(d-1)m(αd-1)=b(αd-1) (7)
上式(5)-(7)中,m()为数据多项式,b()为校验多项式,d为校验块的第二数量。
令:
则上述式(5)-(7)可以表示为:
Λ[Al|Ar]M=Al[b0…bd-1]T (11)
上式(11)中,“|”表示矩阵拼接运算,即,[Al|Ar]表示将矩阵Al与矩阵Ar沿行方向拼接(即沿水平方向左右拼接)。M为待编码的数据组。上式(11)可以转化为:
[b0…bd-1]T=Al -1Λ[Al|Ar]M (12)
即,基于生成多项式g(x)=(x-α0)(x-α1)…(x-αd-1)的编码方案等价于基于生成矩阵Al -1Λ[Al|Ar]的编码方案。
根据一些实施例,如果当前数据组的校验块为基于生成多项式的第一编码模式而生成,则可以通过将生成矩阵(例如范德蒙矩阵)中的相应编码向量v0,…,vd-1与数据组M相乘,得到基于生成矩阵的第二编码模式下的校验块f0,…,fd-1,从而实现第一编码模式到第二编码模式的校验块的转换。在该实施例中,预设的转换矩阵即为生成矩阵。
基于式(12),如果当前数据组的校验块为基于生成矩阵的第二编码模式而生成,则可以通过将矩阵Al -1Λ[Al|Ar]与数据组M相乘,得到基于生成多项式的第一编码模式下的校验块b0,…,bd-1,从而实现第二编码模式到第一编码模式的校验块的转换。在该实施例中,预设的转换矩阵为矩阵Al -1Λ[Al|Ar]。
根据本公开实施例的数据存储方法100,能够基于用户的需求,对数据块进行弹性编码,并且能够实现校验块的扩张与裁剪,以及不同编码模式的校验块之间的转换。
图3示出了根据本公开实施例的存储***300的结构框图。如图3所示,存储***300包括编码模块310、解码模块320、扩张与裁剪模块330以及转换模块340。可以理解,模块310-340均为软件模块。
编码模块310可以被配置为执行本公开实施的数据存储方法100的步骤S110-S140,基于用户的存储需求信息动态选择合适的目标编码策略,采用目标编码策略来对待存储的多个数据块进行编码以生成多个校验块,以及将多个数据块与多个校验块关联存储。
解码模块320可以被配置为执行数据读取的步骤,即对已存储的数据进行解码并返回给用户。可以理解,解码模块320所使用的解码策略与编码模块310所使用的编码策略相对应。
扩张与裁剪模块330可以被配置为执行本公开实施例的数据存储方法100中的校验块的扩张与裁剪的步骤。
转换模块340可以被配置为执行本公开实施例的数据存储方法100中的不同编码模式的校验块之间的转换步骤。
图4示出了根据本公开另一些实施例的存储***400的结构框图。如图4所示,存储***400包括多用户需求模块410、访问控制模块420、***控制模块430、决策控制模块440、弹性编解码模块450-1~450-3,以及存储模块460-1~460-3。其中,模块410-440例如可以实现为软件模块,模块450(包括450-1~450-3)、460(包括460-1~460-3)例如可以实现为硬件模块。
多用户需求模块410可以被配置为设置以及存储存储需求信息与编码策略的对应关系。
访问控制模块420可以被配置为执行数据存储方法100的基于访问频数来调整第一数量以及第二数量的步骤。
***控制模块430可以被配置为提供用于调整***参数的命令和接口,以便调整数据存储方法100所涉及到的***参数。***参数例如包括***默认的编码模式(基于生成多项式或基于生成矩阵)、生成多项式的表达式、生成矩阵的表达式、第一数量或第二数量的初始值、第一数值范围、第二数值范围等。
决策控制模块440可以被配置为执行数据存储方法100的步骤S120,基于存储需求信息,确定目标编码策略。
弹性编解码模块450-1~450-3可以实现为存储***400中的各服务器的CPU,用于执行编码及解码的计算任务。
存储模块460-1~460-3可以实现为存储***400中的各服务器中的存储器,用于持久化存储各数据块和各校验块。存储模块460-1~460-3例如可以是HDD(Hard DiskDrive)、SSD(Solid State Disk)、SMR(Shingled Magnetic Recording)、磁带等。
以下结合图5,描述根据本公开实施例的编码过程和校验块裁剪过程。
本公开实施例的示例性编码过程如下:
步骤1、存储***接收到请求写入的数据流,将数据流分割为多个相同大小(例如16MB)的数据块。
步骤2、磁盘分配模块510向决策控制模块520发起请求,以从决策控制模块520处获取目标编码策略。目标编码策略包括每次编码的数据块的第一数量(例如8),每次编码生成的校验块的第二数量(例如4)以及目标编码模式(例如基于生成多项式的RS编码模式)。
步骤3、基于目标编码策略,每个条带包括8个数据块和4个校验块,共12个块。磁盘分配模块510为这12个块分配12个位于不同存储节点(服务器)的磁盘块,每个块16MB,并创建一个编码计算任务。
步骤4、通过pull或者push的方式,将编码计算任务与一个有空闲计算资源的计算节点(服务器)绑定。计算节点中的弹性编解码模块530加载这个任务,确定该任务是一个8+4的基于生成多项式的RS编码任务。
步骤5、计算节点中的弹性编解码模块530对8个数据块进行编码,得到4个校验块。
步骤6、计算节点中的弹性编解码模块530并发地将这12个块通过存储模块提供的接口,写入到预分配好的存储模块540-1~540-3的磁盘块上。
步骤7、记录条带相关的元数据,并完成单次条带的编码任务。
本公开实施例的示例性校验块裁剪过程如下:
设某一用户当前的条带参数配比为8+4,即一个条带包括8个数据块和4个校验块。
步骤1、存储***500获取当前的操作为校验块裁剪,并且新的条带参数配比为16(第一数量)+4(第二数量)。
步骤2、存储***500通过数据流选取相同bucket下的两个8+4的条带550,将两个条带中的块分别记为n1-n12,m1-m12。通过元数据管理模块获取各个块的存储位置信息。
步骤3、存储***的磁盘分配模块510将n1-n8,m1-m8作为数据块,并为新生成的校验块分配磁盘块。n1-n8,m1-m8和新分配的磁盘块在不同的存储节点上。并创建裁剪任务。
步骤4、通过pull或者push的方式,令一个计算节点获取当前的裁剪任务。
步骤5、计算节点中的弹性编解码模块530根据裁剪任务指派的新的编码算法,对n1-n8,m1-m8进行编码,生成4个新的校验块,将新的4个校验块写入到对应的存储模块540-1~540-3的磁盘块中,并更新元数据信息。
步骤6、通过存储***的GC(Garbage Collection,垃圾回收)模块,将n9-n12,m9-m12,8个原有的校验块标记为一个回收任务,并通过异步的方式,将对应磁盘块的元数据标记为可用,回收磁盘空间。
步骤7、通过决策控制模块520将新条带的访问控制标记为0(如果条带id复用的话),结束本次裁剪任务,释放占用的内存资源。
根据本公开的另一方面,还提供一种数据存储装置。如图6所示,该装置600可以包括:获取单元610,被配置为获取待存储的多个数据块和所述多个数据块的存储需求信息;确定单元620,被配置为基于所述存储需求信息,确定所述多个数据块的目标编码策略;编码单元630,被配置为基于所述目标编码策略,对所述多个数据块进行编码,以生成所述多个数据块对应的多个校验块;以及存储单元640,被配置为将所述多个数据块和所述多个校验块关联存储。
根据本公开的实施例,能够基于用户的存储需求信息动态选择合适的编码策略,实现了编码策略的弹性化定制,能够满足不同用户对数据存储的差异化需求,从而避免不必要的存储空间浪费,提高存储效率,降低存储成本。
应当理解,图6中所示装置600的各个单元610-640可以与参考图1描述的方法100中的各个步骤S110-S140相对应。由此,上面针对方法100描述的操作、特征和优点同样适用于装置600及其所包括的单元。为了简洁起见,某些操作、特征和优点在此不再赘述。
还应当理解,本文可以在软件硬件元件或程序模块的一般上下文中描述各种技术。上面关于图6描述的各个单元可以在硬件中或在结合软件和/或固件的硬件中实现。例如,这些单元可以被实现为计算机程序代码/指令,该计算机程序代码/指令被配置为在一个或多个处理器中执行并存储在计算机可读存储介质中。可替换地,这些单元可以被实现为硬件逻辑/电路。例如,在一些实施例中,获取单元610、确定单元620、编码单元630、存储单元640中的一个或多个可以一起被实现在片上***(System on Chip,SoC)中。SoC可以包括集成电路芯片(其包括处理器(例如,中央处理单元(Central Processing Unit,CPU)、微控制器、微处理器、数字信号处理器(Digital Signal Processor,DSP)等)、存储器、一个或多个通信接口、和/或其他电路中的一个或多个部件),并且可以可选地执行所接收的程序代码和/或包括嵌入式固件以执行功能。
根据本公开的另一方面,还提供一种电子设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中所述存储器存储有计算机程序,所述计算机程序在被所述至少一个处理器执行时实现根据上述的方法。
根据本公开的另一方面,还提供一种存储有计算机程序的非瞬时计算机可读存储介质,其中,所述计算机程序在被处理器执行时实现根据上述的方法。
根据本公开的另一方面,还提供一种计算机程序产品,包括计算机程序,其中,所述计算机程序在被处理器执行时实现根据上述的方法。
参见图7,现将描述可以作为本公开的服务器或客户端的电子设备700的结构框图,其是可以应用于本公开的各方面的硬件设备的示例。电子设备可以是不同类型的计算机设备,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
如图7所示,电子设备700可以包括能够通过***总线703彼此通信的至少一个处理器701、工作存储器702、输入单元704、显示单元705、扬声器706、存储单元707、通信单元708以及其它输出单元709。
处理器701可以是单个处理单元或多个处理单元,所有处理单元可以包括单个或多个计算单元或者多个核心。处理器701可以被实施成一个或更多微处理器、微型计算机、微控制器、数字信号处理器、中央处理单元、状态机、逻辑电路和/或基于操作指令来操纵信号的任何设备。处理器701可以被配置成获取并且执行存储在工作存储器702、存储单元707或者其他计算机可读介质中的计算机可读指令,诸如操作***702a的程序代码、应用程序702b的程序代码等。
工作存储器702和存储单元707是用于存储指令的计算机可读存储介质的示例,指令由处理器701执行来实施前面所描述的各种功能。工作存储器702可以包括易失性存储器和非易失性存储器二者(例如RAM、ROM等等)。此外,存储单元707可以包括硬盘驱动器、固态驱动器、可移除介质、包括外部和可移除驱动器、存储器卡、闪存、软盘、光盘(例如CD、DVD)、存储阵列、网络附属存储、存储区域网等等。工作存储器702和存储单元707在本文中都可以被统称为存储器或计算机可读存储介质,并且可以是能够把计算机可读、处理器可执行程序指令存储为计算机程序代码的非暂态介质,计算机程序代码可以由处理器701作为被配置成实施在本文的示例中所描述的操作和功能的特定机器来执行。
输入单元706可以是能向电子设备700输入信息的任何类型的设备,输入单元706可以接收输入的数字或字符信息,以及产生与电子设备的用户设置和/或功能控制有关的键信号输入,并且可以包括但不限于鼠标、键盘、触摸屏、轨迹板、轨迹球、操作杆、麦克风和/或遥控器。输出单元可以是能呈现信息的任何类型的设备,并且可以包括但不限于显示单元705、扬声器706以及其它输出单元709,其它输出单元709可以但不限于包括视频/音频输出终端、振动器和/或打印机。通信单元708允许电子设备700通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据,并且可以包括但不限于调制解调器、网卡、红外通信设备、无线通信收发机和/或芯片组,例如蓝牙TM设备、802.11设备、Wi-Fi设备、WiMAX设备、蜂窝通信设备和/或类似物。
工作寄存器702中的应用程序702b可以被加载执行上文所描述的各个方法和处理,例如图1中的步骤S110-步骤S140。例如,在一些实施例中,上文描述的方法100可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元707。在一些实施例中,计算机程序的部分或者全部可以经由存储单元707和/或通信单元708而被载入和/或安装到电子设备700上。当计算机程序被加载并由处理器701执行时,可以执行上文描述的方法100的一个或多个步骤。备选地,在其他实施例中,处理器701可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行方法100。
本文中以上描述的***和技术的各种实施方式可以在数字电子电路***、集成电路***、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上***的***(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程***上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储***、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储***、该至少一个输入装置、和该至少一个输出装置。
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行***、装置或设备使用或与指令执行***、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体***、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在计算机上实施此处描述的***和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的***和技术实施在包括后台部件的计算***(例如,作为数据服务器)、或者包括中间件部件的计算***(例如,应用服务器)、或者包括前端部件的计算***(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的***和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算***中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将***的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
计算机***可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本公开中记载的各步骤可以并行地执行、也可以顺序地或以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
虽然已经参照附图描述了本公开的实施例或示例,但应理解,上述的方法、***和设备仅仅是示例性的实施例或示例,本发明的范围并不由这些实施例或示例限制,而是仅由授权后的权利要求书及其等同范围来限定。实施例或示例中的各种要素可以被省略或者可由其等同要素替代。此外,可以通过不同于本公开中描述的次序来执行各步骤。进一步地,可以以各种方式组合实施例或示例中的各种要素。重要的是随着技术的演进,在此描述的很多要素可以由本公开之后出现的等同要素进行替换。
Claims (18)
1.一种数据存储方法,包括:
获取待存储的多个数据块和所述多个数据块的存储需求信息;
基于所述存储需求信息,确定所述多个数据块的目标编码策略;
基于所述目标编码策略,对所述多个数据块进行编码,以生成所述多个数据块对应的多个校验块;以及
将所述多个数据块和所述多个校验块关联存储。
2.如权利要求1所述的方法,其中,所述基于所述存储需求信息,确定所述多个数据块的目标编码策略包括:
基于预设的存储需求信息与编码策略的对应关系,确定所述多个数据块的目标编码策略。
3.如权利要求1或2所述的方法,其中,所述存储需求信息包括以下至少一种:
存储成本需求信息、存储可靠性需求信息、读写性能需求信息。
4.如权利要求1-3中任一项所述的方法,其中,所述目标编码策略包括每次编码相应的数据块的第一数量和每次编码所生成的校验块的第二数量,并且其中,
所述基于所述目标编码策略,对所述多个数据块进行编码,以生成所述多个数据块对应的多个校验块包括:
将所述多个数据块划分为至少一个数据组,每个数据组包括所述第一数量的数据块;以及
分别对每个数据组进行编码,以生成该数据组对应的所述第二数量的校验块。
5.如权利要求4所述的方法,其中,将所述多个数据块和所述多个校验块关联存储包括:
将所述多个数据块和所述多个校验块存储为至少一个条带,其中,每个条带包括一个数据组以及该数据组所对应的校验块。
6.如权利要求4或5所述的方法,其中,所述目标编码策略包括所述第一数量的数值所属的第一数值范围和所述第二数量的数值所属的第二数值范围,
所述方法还包括:
统计所述多个数据块在预设时间段内的访问频数;
基于所述访问频数,对所述第一数量和所述第二数量中的至少之一的数值进行调整,其中,调整后的第一数量的数值属于所述第一数值范围,调整后的第二数量的数值属于所述第二数值范围;以及
基于调整后的第一数量和第二数量,对所述多个数据块进行编码。
7.如权利要求6所述的方法,其中,调整后的第一数量的数值与调整后的第二数量的数值之间的比值与所述访问频数负相关。
8.如权利要求4-7中任一项所述的方法,其中,所述目标编码策略包括目标编码模式,所述目标编码模式包括基于生成多项式的第一编码模式,并且其中,
所述分别对每个数据组进行编码,以生成该数据组对应的所述第二数量的校验块包括:
采用所述生成多项式对该数据组进行编码,以生成第二数量的校验块,其中,所述第二数量的校验块包括目标校验块,所述目标校验块为该数据组所包括的所述第一数量的数据块的异或,以用于故障修复。
9.如权利要求8所述的方法,还包括:
对至少一个条带进行故障检测;以及
响应于确定所述至少一个条带中的至少一者包括至少一个故障块,基于所述至少一个故障块的数量和类型以及所述目标校验块,对所述至少一个故障块进行修复。
10.如权利要求9所述的方法,其中,所述基于所述至少一个故障块的数量和类型以及所述目标校验块,对所述至少一个故障块进行修复包括以下各项中的至少一者:
响应于确定所述至少一个故障块的数量为一并且所述故障块为数据块,将所述故障块替换为所述条带中的除所述故障块以外的其他数据块与所述目标校验块的异或;
响应于确定所述至少一个故障块均为校验块,将所述目标校验块标记为故障块,以及对所述条带中的数据组进行重新编码,以得到各故障块对应的修复后的校验块;
响应于确定所述至少一个故障块的数量大于一并且所述至少一个故障块均为数据块,将所述目标校验块与其他校验块的异或确定为修复后的目标校验块,以及至少基于修复后的目标校验块,采用预设的解码算法来对所述至少一个故障块进行修复;以及
响应于确定所述至少一个故障块的数量大于一并且所述至少一个故障块包括数据块和校验块,将所述目标校验块标记为故障块,以及采用所述解码算法来对所述至少一个故障块进行修复。
11.如权利要求4-7中任一项所述的方法,其中,所述目标编码策略包括目标编码模式,所述目标编码模式包括基于生成矩阵的第二编码模式,所述生成矩阵包括多个编码向量,并且其中,
所述分别对每个数据组进行编码,以生成该数据组对应的所述第二数量的校验块包括:
获取所述生成矩阵中的第二数量的编码向量;以及
采用所述第二数量的编码向量分别对该数据组进行编码,以生成与所述第二数量的编码向量分别对应的第二数量的校验块。
12.如权利要求11所述的方法,其中,所述第二数量的校验块按照对应的编码向量在所述生成矩阵中的顺序排列,所述方法还包括:
响应于校验块裁剪请求,确定待删除的校验块的第三数量;以及
删除所述第二数量的校验块中的顺序在后的第三数量的校验块。
13.如权利要求11所述的方法,还包括:
响应于校验块扩张请求,确定待增加的校验块的第四数量;
获取位于所述第二数量的编码向量之后的第四数量的编码向量;以及
采用所述第四数量的编码向量分别对该数据组进行编码,以生成与所述第四数量的编码向量分别对应的第四数量的待增加的校验块。
14.如权利要求8-13中任一项所述的方法,还包括:
响应于编码模式切换指令,采用预设的转换矩阵来实现不同目标编码模式相应的校验块之间的转换。
15.一种数据存储装置,包括:
获取单元,被配置为获取待存储的多个数据块和所述多个数据块的存储需求信息;
确定单元,被配置为基于所述存储需求信息,确定所述多个数据块的目标编码策略;
编码单元,被配置为基于所述目标编码策略,对所述多个数据块进行编码,以生成所述多个数据块对应的多个校验块;以及
存储单元,被配置为将所述多个数据块和所述多个校验块关联存储。
16.一种电子设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中
所述存储器存储有计算机程序,所述计算机程序在被所述至少一个处理器执行时实现如权利要求1-14中任一项所述的方法。
17.一种存储有计算机程序的非瞬时计算机可读存储介质,其中,所述计算机程序在被处理器执行时实现如权利要求1-14中任一项所述的方法。
18.一种计算机程序产品,包括计算机程序,其中,所述计算机程序在被处理器执行时实现如权利要求1-14中任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111320489.7A CN116107797A (zh) | 2021-11-09 | 2021-11-09 | 数据存储方法及装置、电子设备和存储介质 |
PCT/CN2022/098756 WO2023082629A1 (zh) | 2021-11-09 | 2022-06-14 | 数据存储方法及装置、电子设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111320489.7A CN116107797A (zh) | 2021-11-09 | 2021-11-09 | 数据存储方法及装置、电子设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116107797A true CN116107797A (zh) | 2023-05-12 |
Family
ID=86264300
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111320489.7A Pending CN116107797A (zh) | 2021-11-09 | 2021-11-09 | 数据存储方法及装置、电子设备和存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN116107797A (zh) |
WO (1) | WO2023082629A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117289876A (zh) * | 2023-11-22 | 2023-12-26 | 苏州元脑智能科技有限公司 | 一种数据写入方法、***、装置、介质及四级单元闪存 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10044374B2 (en) * | 2015-07-30 | 2018-08-07 | Quantum Corporation | Adaptive erasure codes |
US10567009B2 (en) * | 2016-12-06 | 2020-02-18 | Nutanix, Inc. | Dynamic erasure coding |
CN109783016A (zh) * | 2018-12-25 | 2019-05-21 | 西安交通大学 | 一种分布式存储***中的弹性多维度冗余方法 |
CN111930555B (zh) * | 2020-09-02 | 2022-12-02 | 平安国际智慧城市科技股份有限公司 | 基于纠删码的文件处理方法、装置及计算机设备 |
-
2021
- 2021-11-09 CN CN202111320489.7A patent/CN116107797A/zh active Pending
-
2022
- 2022-06-14 WO PCT/CN2022/098756 patent/WO2023082629A1/zh unknown
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117289876A (zh) * | 2023-11-22 | 2023-12-26 | 苏州元脑智能科技有限公司 | 一种数据写入方法、***、装置、介质及四级单元闪存 |
CN117289876B (zh) * | 2023-11-22 | 2024-02-23 | 苏州元脑智能科技有限公司 | 一种数据写入方法、***、装置、介质及四级单元闪存 |
Also Published As
Publication number | Publication date |
---|---|
WO2023082629A1 (zh) | 2023-05-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9280416B1 (en) | Selection of erasure code parameters for no data repair | |
US20170052842A1 (en) | Using reason codes to determine how to handle memory device error conditions | |
US9996283B2 (en) | Handling storage unit latency in a dispersed storage network | |
US20090100108A1 (en) | Replica Placement and Repair Strategies in Multinode Storage Systems | |
US20170060700A1 (en) | Systems and methods for verification of code resiliency for data storage | |
US10534661B2 (en) | Selecting a storage error abatement alternative in a dispersed storage network | |
US10657000B2 (en) | Optimizing data storage in a dispersed storage network | |
US10191910B2 (en) | Systems and methods for improving storage efficiency in an information handling system | |
CN115437581B (zh) | 一种数据处理方法、装置、设备及可读存储介质 | |
CN113051104A (zh) | 基于纠删码的磁盘间数据恢复方法及相关装置 | |
CN114237971A (zh) | 一种基于分布式存储***的纠删码编码布局方法及*** | |
CN109196458A (zh) | 存储***可用容量计算方法及装置 | |
WO2023082629A1 (zh) | 数据存储方法及装置、电子设备和存储介质 | |
CN115113819A (zh) | 一种数据存储的方法、单节点服务器及设备 | |
US11429313B2 (en) | Data processing method, device and distributed storage system | |
CN112000278A (zh) | 一种热数据存储的自适应局部重构码设计方法及云存储*** | |
CN111506450B (zh) | 用于数据处理的方法、设备和计算机程序产品 | |
US10769016B2 (en) | Storing a plurality of correlated data in a dispersed storage network | |
JP6375886B2 (ja) | パリティレイアウト決定プログラム、パリティレイアウト決定方法、ストレージ装置およびストレージシステム | |
CN107463462B (zh) | 数据修复方法及数据修复装置 | |
US10057351B2 (en) | Modifying information dispersal algorithm configurations in a dispersed storage network | |
US10459790B2 (en) | Elastic storage in a dispersed storage network | |
CN114691414A (zh) | 一种校验块生成方法及一种数据恢复方法 | |
CN114880165A (zh) | 数据恢复方法及相关装置 | |
CN109542687B (zh) | 一种raid级别转换方法及装置 |
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 |