CN117075821B - 一种分布式存储方法、装置、电子设备及存储介质 - Google Patents
一种分布式存储方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN117075821B CN117075821B CN202311336458.XA CN202311336458A CN117075821B CN 117075821 B CN117075821 B CN 117075821B CN 202311336458 A CN202311336458 A CN 202311336458A CN 117075821 B CN117075821 B CN 117075821B
- Authority
- CN
- China
- Prior art keywords
- storage
- data
- group
- virtual disk
- erasure code
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 56
- 239000012634 fragment Substances 0.000 claims abstract description 57
- 230000000875 corresponding effect Effects 0.000 claims description 80
- 238000012937 correction Methods 0.000 claims description 26
- 238000004590 computer program Methods 0.000 claims description 11
- 238000004422 calculation algorithm Methods 0.000 claims description 9
- 230000002596 correlated effect Effects 0.000 claims description 3
- 238000013500 data storage Methods 0.000 description 11
- 238000005192 partition Methods 0.000 description 10
- 230000008569 process Effects 0.000 description 10
- 238000010586 diagram Methods 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 6
- 238000004364 calculation method Methods 0.000 description 5
- 238000012217 deletion Methods 0.000 description 5
- 230000037430 deletion Effects 0.000 description 5
- 230000004048 modification Effects 0.000 description 5
- 238000012986 modification Methods 0.000 description 5
- 230000002776 aggregation Effects 0.000 description 4
- 238000004220 aggregation Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 238000000638 solvent extraction Methods 0.000 description 2
- OKTJSMMVPCPJKN-UHFFFAOYSA-N Carbon Chemical compound [C] OKTJSMMVPCPJKN-UHFFFAOYSA-N 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 229910021389 graphene Inorganic materials 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008447 perception Effects 0.000 description 1
- 229920001690 polydopamine Polymers 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 239000004984 smart glass Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Classifications
-
- 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/0614—Improving the reliability of 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/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- 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)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种分布式存储方法、装置、电子设备及存储介质,所述方法包括:获取待存储数据,将所述待存储数据按预设条带大小划分为多个条带ST 1~ST t;分别对条带ST 1~ST t进行存储;其中,对任一条带ST k进行存储,包括:将条带ST k中的数据划分为m组大小相同的数据,并分别进行纠删码编码,得到纠删码组E k1~E km,其中,纠删码组E ki中包含n个数据块EC ki_1~EC ki_n;分别对纠删码组E k1~E km进行存储;其中,对任一纠删码组E ki进行存储,包括:将数据块EC ki_j存储至存储分片S kj,其中存储分片S k1~S kn分别属于不同存储节点中的不同硬盘,1≤k≤t,1≤i≤m,1≤j≤n。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种分布式存储方法、装置、电子设备及存储介质。
背景技术
目前,在对海量数据信息进行存储时,需要重点考虑数据可靠性的问题,即存储的数据需要保持完整性、准确性和可用性。
相关技术中,通常采用数据冗余、对数据进行纠删码编码等方式增加数据可靠性。但在目前的方案中,通常是在已知待存储数据的大小的情况下,特殊配置纠删码组的大小,以避免读取数据时打开过多的存储分片。
然而,在待存储数据的大小未知的情况下,例如在文件大小可变的文件存储中,则无法使纠删码组的大小自动匹配待存储数据的大小。在纠删码组设置过大的情况下,会导致在读取数据时读取该纠删码组中大量的额外数据;而在纠删码组过小的情况下,数据在纠删码编码之后被分割成大量的存储分片,进而需要在读写数据时打开大量的分片文件,使得读写性能大幅下降。
发明内容
有鉴于此,本申请提供一种分布式存储方法、装置、电子设备及存储介质,以解决相关技术中的不足。
根据本申请第一方面的实施例,提供一种分布式存储方法,包括:
获取待存储数据,将所述待存储数据按预设条带大小划分为多个条带ST1~STt;
分别对条带ST1~STt进行存储;其中,对任一条带STk进行存储,包括:
将条带STk中的数据划分为m组大小相同的数据,并分别进行纠删码编码,得到纠删码组Ek1~Ekm,其中,纠删码组Eki中包含n个数据块ECki_1~ECki_n;
分别对纠删码组Ek1~Ekm进行存储;其中,对任一纠删码组Eki进行存储,包括:将数据块ECki_j存储至存储分片Skj,其中存储分片Sk1~Skn分别属于不同存储节点中的不同硬盘,1≤k≤t,1≤i≤m,1≤j≤n。
根据本申请第二方面的实施例,提供一种分布式存储装置,包括:
划分单元,用于获取待存储数据,将所述待存储数据按预设条带大小划分为多个条带ST1~STt;
存储单元,用于分别对条带ST1~STt进行存储;其中,对任一条带STk进行存储,包括:
将条带STk中的数据划分为m组大小相同的数据,并分别进行纠删码编码,得到纠删码组Ek1~Ekm,其中,纠删码组Eki中包含n个数据块ECki_1~ECki_n;
分别对纠删码组Ek1~Ekm进行存储;其中,对任一纠删码组Eki进行存储,包括:将数据块ECki_j存储至存储分片Skj,其中存储分片Sk1~Skn分别属于不同存储节点中的不同硬盘,1≤k≤t,1≤i≤m,1≤j≤n。
根据本申请第三方面的实施例,提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如第一方面所述的分布式存储方法。
根据本申请第四方面的实施例,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面所述的分布式存储方法的步骤。
在本申请提供的技术方案中,将待存储的数据按照预设条带大小进行划分,可以得到多个大小相同的条带。在对其中任一条带进行存储时,会将条带中的数据进一步划分成多组大小相同的数据,并分别进行纠删码编码,使得每组纠删码中都包含相同数量的、大小相同的数据块。在对其中任一纠删码组进行存储时,会确定该纠删码组中每个数据块的位置序号,并将该条带中具有相同位置序号的数据块存储至相同序号的存储分片上。通过应用本申请的技术方案,每个纠删码组中的多个数据块被存储到不同节点的不同硬盘中,保证了数据可靠性;同时,具有相同位置序号的数据块被存储至相同序号的存储分片上,实现了数据块聚合,无需再根据待存储数据的大小特殊设置纠删码组的大小,即便在待存储数据非常大、甚至未知待存储数据大小的情况下,也能有效减少存储分片数量,进而提高了对存储数据的读写性能。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请实施例。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1是本申请一示例性实施例示出的一种分布式存储方法的流程图;
图2是本申请一示例性实施例示出的一种数据存储示意图;
图3是本申请一示例性实施例示出的一种划分虚拟磁盘组的示意图;
图4是本申请一示例性实施例示出的一种为虚拟磁盘组分配存储空间的示意图;
图5是本申请一示例性实施例示出的一种分布式存储装置的示意图;
图6是本申请一示例性实施例示出的一种分布式存储装置的示意图;
图7是本申请一示例性实施例示出的一种分布式存储装置的示意图;
图8是本申请一示例性实施例示出的一种分布式存储装置的示意图;
图9是本申请一示例性实施例示出的一种分布式存储装置的示意图;
图10是本申请一示例性实施例示出的一种电子设备的结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本申请示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本申请所描述的更多或更少。此外,本申请中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本申请中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
随着计算机技术的发展,数据信息海量增长,目前各类存储设备都需要存储大量的数据,以用于做数据分析、处理,完成相应的业务功能。在数据存储时,需要重点考虑数据可靠性的问题,即存储的数据需要保持完整性、准确性和可用性。
相关技术中,可以通过采用数据冗余存储或者对数据进行纠删码编码的方式来提高存储数据的可靠性。在冗余存储中,数据通常被划分成多个块或分片,每个块或分片被复制到不同的节点硬盘上,以增加数据的冗余性和容错性。这样即使某个节点发生故障,数据仍然可以从其他节点获取。而纠删码是一种用于具备容错处理能力的编码技术,通过对数据进行数据块编码,得到多个原始数据块和多个校验块,分别存储在不同的位置上。当有数量小于等于校验块数量的数据块,因硬盘损坏等原因而无法读取的时候,仍然可以通过读取其他数据块后,进行反编码计算得出丢失数据块的数据。与传统的备份机制相比,纠删码具有更高的存储效率和更好的容错能力。
可以理解的是,由于纠删码组中的每个数据块都会用于丢失数据的还原,因此在需要对纠删码组中的数据进行修改时,需要读取整个纠删码组中所有的数据,并在修改后重新进行纠删码编码。因此,在待修改的数据的大小小于一个纠删码组的大小时,也需要读取该纠删码组中的全部数据。
然而,在目前的存储方案中,把待存储数据进行纠删码编码并进一步存储时,会将每个纠删码组中的每个数据块划分一个单独的存储分片。在这种情况下,若想达到一个较为理想的存储状态,即存在合理数量的存储分片,则需要预先得知待存储数据的大小,并进一步根据待存储数据的大小来划分纠删码组的大小,才能使存储分片的数量被限制在一定范围内。在无法得知待存储数据大小、或者没有根据待存储数据大小划分纠删码组的大小的情况下,若纠删码组设置过大,则会导致在非对齐修改数据时,即待修改数据的起始位置不是一个纠删码组开头位置,或者结束位置不是一个纠删码组真实数据部分的结尾位置时,需要读取该纠删码组中大量的额外数据;若纠删码组设置过小,则会导致对数据进行纠删码编码后,数据被分割成大量的存储分片,进而导致需要在读写数据时打开大量的分片文件,使得对存储数据进行读写的性能大幅下降。
为了解决上述问题,本申请提出一种分布式存储方法、装置、电子设备及存储介质,在存储数据时,会将待存储的数据按照预设条带大小进行划分,得到多个大小相同的条带。在对其中任一条带进行存储时,会将条带中的数据进一步划分成多组大小相同的数据,并分别进行纠删码编码,使得每组纠删码中都包含相同数量的、大小相同的数据块。在对其中任一纠删码组进行存储时,会确定该纠删码组中每个数据块的位置序号,并将该条带中具有相同位置序号的数据块存储至相同的存储分片上。通过应用本申请的技术方案,每个纠删码组中的多个数据块被存储到不同节点的不同硬盘中,保证了数据可靠性;同时,具有相同位置序号的数据块被存储至相同序号的存储分片上,实现了数据块聚合,无需再根据待存储数据的大小特殊设置纠删码组的大小,即便在待存储数据非常大、甚至未知待存储数据大小的情况下,也能有效减少存储分片数量,进而提高了对存储数据的读写性能。
在一示例性实施例中,分布式存储的架构中包含客户端、中心节点、数据存储端。在中心节点通常存储有系统目录与数据,但是中心节点中的数据并非真正的要存储的数据内容,而是包含有待存储数据的元数据。此处,待存储数据为需要进行存储的数据,例如在对象存储中的需要存储的数据对象,或者文件存储中需要存储的的数据文件等等。待存储数据的元数据可以包含存储数据的大小、存储数据最后修改时间、存储数据属组等各种信息的元数据。待存储数据的实际内容根据算法分散存放在多个数据存储端的硬盘上。
在一示例性实施例中,分布式存储方法可以应用于客户端中。客户端可以包括手机、平板设备、笔记本电脑、掌上电脑(PDAs,Personal Digital Assistants)、可穿戴设备(如智能眼镜、智能手表等)或者车载设备、车机等任意类型,本申请并不对此进行限制。在运行过程中,该客户端可以与中心节点、一个或多个服务器建立连接,通过与中心节点或者服务器进行数据交互,完成对数据的分布式存储。需要说明的是,用于执行分布式存储方法的客户端的应用程序可以被预先安装在用户使用的电子设备上,使得该应用程序可以在该客户端上被启动并运行;当然,当采用诸如HTML5技术的在线“客户端”时,无需在电子设备上安装相应的应用程序,即可获得并运行该程序。
在一示例性实施例中,该分布式存储方法也可以应用于数据存储端或者中心系节点中。数据存储端可以为包含一个或多个独立主机的物理物理存储设备。在运行过程中,数据存储端可以运行分布式存储方法所对应的的程序,以实现对客户端发送的数据进行存储。而在本申请一个或多个实施例的技术方案中,可由数据存储端通过与客户端或中心节点上运行的程序进行配合,实现对数据的分布式存储。
图1是本申请一示例性实施例示出的一种分布式存储方法的流程图,包括:
S101,获取待存储数据,将所述待存储数据按预设条带大小划分为多个条带ST1~STt;
S102,分别对条带ST1~STt进行存储;其中,对任一条带STk进行存储,包括:
将条带STk中的数据划分为m组大小相同的数据,并分别进行纠删码编码,得到纠删码组Ek1~Ekm,其中,纠删码组Eki中包含n个数据块ECki_1~ECki_n;
分别对纠删码组Ek1~Ekm进行存储;其中,对任一纠删码组Eki进行存储,包括:将数据块ECki_j存储至存储分片Skj,其中存储分片Sk1~Skn分别属于不同存储节点中的不同硬盘,1≤k≤t,1≤i≤m,1≤j≤n。
在一示例性实施例中,待存储数据可以为多种格式的数据,例如纯文本格式、CSV(Comma-Separated Values,逗号分隔值)格式、JSON( JavaScript Object Notation,JavaScript对象表示法)格式、XML(eXtensible Markup Language,可扩展标记语言)格式或者在存储图像、音视频等数据时所使用的二进制格式等等。不同的格式具有不同的优势和适用范围,本申请的分布式存储方法适用于多种格式的数据,技术人员可以根据具体情况选择合适的格式,本申请对此不进行限制。同时需要说明的是,本申请也并不限制待存储数据的大小,甚至在未得知待存储数据的完整大小的情况下,也依然能够实施本申请的技术方案。
在一示例性实施例中,可预先设置期望划分的条带大小,作为预设条带大小,并按照该预设条带大小,对待存储的数据进行划分,得到多个大小相同的条带,记为条带ST1~STt。由于每个条带中的数据都是待存储数据的一部分,因此需要对分别对条带ST1~STt进行存储。
具体的,在对任一条带STk进行存储时,可以将该条带的数据进一步划分为m组大小相同的数据,并分别进行纠删码编码,得到纠删码组Ek1~Ekm。此处,m的具体数值可以根据实际需求进行设置。在纠删码组Ek1~Ekm中,任一纠删码组Eki中都包含n个大小相同的数据块,记为ECki_1~ECki_n。此处需要说明的是,n的数值与具体的纠删码编码方式有关。若选用“4+2”的纠删码形式进行编码,则表示一个纠删码组内包含4个原始数据块,并根据这4个原始数据块生成了2个校验块,那么该纠删码组内则包含了上述6个数据块,此时n的值即为6;若选用“3+2”的纠删码形式进行编码,则表示一个纠删码组内包含3个原始数据块,并根据这3个原始数据块生成了2个校验块,那么该纠删码组内则包含了上述5个数据块,此时n的值即为5。技术人员可以根据实际需要选择具体的纠删码编码形式,本申请对此不进行限制。
在一示例性实施例中,将数据块ECki_j存储至存储分片Skj。其中,数据块ECki_j表示条带STk中的纠删码组Eki中的第j个数据块;存储分片Skj为n个存储分片Sk1~Skn中的第j个存储分片,存储分片Sk1~Skn分别属于不同存储节点中的不同硬盘,共同存储有条带STk中的数据。此处1≤k≤t,1≤i≤m,1≤j≤n。可以理解的是,每个条带内存储分片的数量与纠删码的编码形式有关,即每个条带内存储分片的数量与该条带内每个纠删码组所包含的数据块的数量相同。将条带STk中的纠删码组Eki中的第j个数据块存储至第j个存储分片即为将该条带中具有相同位置序号的数据块存储至相同序号的存储分片上。
下面将配合图2,对上述分布式存储方法进行举例说明。
图2左侧示出了一份待存储数据。在获取到这份待存储数据后,可以按照预设条带大小对其进行划分。若将预设条带大小设置为256MB,则可以将这份待存储数据划分为多个大小为256MB的条带,其中,条带1中是0-255MB部分的待存储数据,条带2中是256-511MB部分的待存储数据,以此类推。
对于每个条带而言,可以将其进一步划分为多组大小相同的数据,并对每组数据进行纠删码编码。例如,图2中将每个条带中的数据进一步按照128KB进行划分,进行纠删码编码后得到多个纠删码组,其中,纠删码组1中存有0-127KB的原始数据以及相应的校验码,纠删码组2中存有128-255KB的原始数据以及相应的校验码,以此类推。因该条带共有256MB的数据,那么此次划分、编码后将会得到2048个纠删码组。
对于每次进行存储的待存储数据,可以具体选择纠删码编码形式,也可以为整个存储系统设置默认的纠删码形式。图2中选用“4+2”的纠删码编码,即在每个纠删码组中,将128KB的原始数据分为4个原始数据块,每个原始数据块存储32KB的原始数据,之后针对这4个原始数据块生成2个校验块。例如,纠删码组1中包含0-31KB的原始数据块、32-63KB的原始数据块、64-95KB的原始数据块、以及96-127KB的原始数据块,还包含校验块1-1、校验块1-2,共包含6个数据块。在“4+2”形式的纠删码中,允许损坏数量小于等于校验块数量的数据块,即允许1个或者2个数据块损坏。假设64-95KB的原始数据块和校验块1-1发生损坏,则可以通过剩余四个数据块和计算公式,重新得到4个原始数据块,并再次计算出校验块,此时即可恢复损坏的数据块。
对任一纠删码组中的每个数据块而言,则会确定数据块在该纠删码组中的位置序号,并将其存储至具有相同序号的存储分片上。例如,图2中32-63KB的数据块在纠删码组1中的位置序号为2,160-191KB的数据块在纠删码组2中的位置序号也为2,那么这两个数据块都存储在序号为2的存储分片上。
通过应用本申请实施例的技术方案,每个纠删码组中的多个数据块被存储到不同节点的不同硬盘中,保证了数据可靠性;同时,具有相同位置序号的数据块被存储至相同序号的存储分片上,实现了数据块聚合,无需再根据待存储数据的大小特殊设置纠删码组的大小,即便在待存储数据非常大、甚至未知待存储数据大小的情况下,也能有效减少存储分片数量,进而提高了对存储数据的读写性能。
在一示例性实施例中,可以记录纠删码组中每个数据块的存储位置,以便在下一次存储数据块时,预先排除已经记录的节点,避免将属于同一纠删码组的数据块存储到相同节点上。具体的,在存储同一条带中的多个纠删码组时候,可以记录第1组纠删码中的各个数据块的存储位置,以便将其他纠删码组中相同位置的数据块连续存储至相同的存储分片上,实现数据块聚合。例如,在存储纠删码组1时,将第1个原始数据块存入存储节点N1的硬盘S1中,并记录;在继续存储纠删码组2、纠删码组3时,先查询之前记录的纠删码组1中第1个原始数据块的存储位置,得到结果为存储节点N1的硬盘S1,之后分别将其中的第1个原始数据块存入该存储节点的存储硬盘中。
在另一示例性实施例中,可以通过预先划分符合条件的候选虚拟磁盘组,实现对任一条带所涉及的存储分片的快速分配,保证存有每个条带的数据的多个存储分片都来自不同节点的不同硬盘。具体的,可以预先确定出多个候选虚拟磁盘组,每一候选虚拟磁盘组中都包含n个大小相同的存储空间,且该n个存储空间分别来自不同存储节点中的不同硬盘。此处,由于硬盘之间容量可能有所差异,通常可以把候选虚拟磁盘组的数量设置为物理存储集群中的硬盘总数的倍数,如物理存储集群中的硬盘总数为100,那么可以设置200个候选虚拟磁盘组,以保证不同容量的硬盘之间的保持相对的负载均衡。具体倍数可以由技术人员根据硬盘间的容量差异以及硬盘的数量进行设置,本申请对此不进行限制,通常倍数大于1即可,如果小于等于1,那么就会造成不同容量的硬盘之间的不均衡。之后,可以从多个候选虚拟磁盘组中为任一条带STk选取对应的目标虚拟磁盘组,目标虚拟磁盘组所含的存储空间Mk1~Mkn用于一一对应地存储条带STk对应的存储分片Sk1~Skn。
具体的,此处存储节点以及节点中的硬盘与物理存储集群有关。物理存储集群是由多个物理存储设备组成的集合,通过将多个独立的存储设备组合在一起,形成一个网络化的存储基础架构,用于集中管理和提供数据存储服务。在物理存储集群中,通常会划分多个存储节点,每个存储节点通常会包含多个硬盘或其他存储设备,用于存储实际的数据。可以理解的是,物理存储集群中包含的存储节点的数量、每个存储节点中包含的硬盘或其他存储设备的数量。
如图3所示,图中物理存储集群中包含N个存储节点,每个存储节点中包含两个硬盘。存储节点N1中的硬盘S1与存储节点N2中的硬盘S2即为不同存储节点中的不同硬盘,那么某个虚拟磁盘组中就可以同时包含这两个硬盘中的预设大小的存储空间。例如,图3中虚拟磁盘组1包含的存储空间分别来自于存储节点N1中的硬盘S1、存储节点N2中的硬盘S1、存储节点N3中的硬盘S1、存储节点N4中的硬盘S1、存储节点N5中的硬盘S1、存储节点N6中的硬盘S1,那么虚拟磁盘组1即为一个符合条件的候选虚拟磁盘组。
在一示例性实施例中,每个候选虚拟磁盘组中所包含的存储空间的数量与每个条带所包含的存储分片的数量相等。如前所述,条带STk中的数据被存储在n个存储分片Sk1~Skn中,那么此处,每个虚拟磁盘组中也相应包含n个存储空间Mk1~Mkn,存储空间Mk1~Mkn的大小应大于或等于存储分片Sk1~Skn的大小,以保证每个存储分片中数据都能够被完整保存。任一条带对应的目标虚拟磁盘组为用于存储该条带中的数据的虚拟磁盘组,具体为将该条带中的数据存储至被划分到该目标虚拟磁盘组中的硬盘的存储空间中。在存储时,目标虚拟磁盘组所含的存储空间Mk1~Mkn用于一一对应地存储条带STk对应的存储分片Sk1~Skn。同时见图2、图3,假设条带2的目标虚拟磁盘组为虚拟磁盘组2,那么图2中属于存储分片1的数据(如纠删码组1的第1个数据块、纠删码组2的第1个数据块等等)将会被存储到图3中虚拟磁盘组2中的存储空间N1-S2,数据被实际存储于物理存储集群中存储节点N2的硬盘S2中。
在一示例性实施例中,可以通过迭代执行下述步骤生成任一候选虚拟磁盘组,直至该候选虚拟磁盘组中已分配n个存储空间:先确定已分配至该候选虚拟磁盘组的存储空间对应的硬盘所属的存储节点。此时,除去上述确定出的存储节点,确定剩余存储节点的总体容量和各个存储节点中各硬盘的容量,并相应确定各存储节点的存储权重以及各存储节点中各硬盘的存储权重。此处存储节点的容量为存储节点的当前剩余可用容量,硬盘的容量为硬盘的当前剩余可用容量,并且权重的具体计算方式可以根据实际需求来选择,但总体上存储权重与容量保持正相关关系,即任一存储节点或硬盘的当前剩余可用容量越大,该存储节点或硬盘的存储权重越大;任一存储节点或硬盘的当前剩余可用容量越小,该存储节点或硬盘的存储权重越小。之后,确定出具有最大存储权重的存储节点,并从该节点中的具有最大存储权重的硬盘上划分相应的存储空间以分配至所述任一候选虚拟磁盘组。通过应用本申请实施例的技术方案,能够将当前剩余容量更大的硬盘分配到更多的虚拟磁盘组中,以使物理存储集群中的各存储节点、各硬盘的存储利用率保持负载均衡。
图4示出了虚拟磁盘组10的生成过程,过程中虚拟磁盘组10中已经包含的存储空间分别来自于存储节点N7中的硬盘S1、存储节点N8中的硬盘S2、存储节点N9中的硬盘S2,那么已分配至该候选虚拟磁盘组的存储空间对应的硬盘所属的存储节点即为存储节点N7、存储节点N8、存储节点N9。相应的,剩余节点为存储节点N10、存储节点N11、存储节点N12等等,此处不再列举。在上述剩余的各个存储节点中,都包含一个或多个硬盘,且存储节点及每个存储节点中的每个硬盘都有其对应的当前剩余存储容量,如存储节点N10中硬盘S1的总容量为512MB,由于该硬盘可能已经将部分的存储空间划分到其他的多个虚拟硬盘组中,因此当前的剩余容量为384MB,以此类推,N10中硬盘S2当前的剩余容量为128MB,N10中硬盘S3当前的剩余容量为0MB,将各硬盘的当前剩余容量相加,可以得到存储节点N10的当前剩余容量为384MB+128MB=512MB。在本实施例中,可以在确定各个候选虚拟磁盘组之前,将所有存储节点以及所有硬盘的存储总容量作为其各自的存储权重,在每次将存储空间划分到虚拟磁盘组后,计算本次划分存储空间所带来的损失权重,即可确定出该存储节点以及该硬盘最新的存储权重。具体的,在各个候选虚拟磁盘组中的各个存储空间大小都相等的情况下,损失权重=所有存储节点中所有硬盘的总容量÷候选虚拟磁盘组数÷n,n为任一候选虚拟磁盘组中所包含的存储空间的数量。如图4所示,在确定出的剩余存储节点中,容量最大的存储节点为N11,N11中容量最大的硬盘硬盘S1,该硬盘此时也具有最大的存储权重,那么将从该硬盘中划分相应的存储空间到虚拟磁盘组10中,作为第4个存储空间N11-S1。此后,已分配至该候选虚拟磁盘组的存储空间对应的硬盘所属的存储节点即为存储节点N7、存储节点N8、存储节点N9、存储节点N11,因此下一次分配存储空间时,需要从除这四个存储节点之外的存储节点中再次选择存储权重最大的硬盘中进行分配,以此类推。
在一示例性实施例中,在为任一条带STk选取目标虚拟磁盘组时,可以先确定待存储数据的存储ID。在本申请实施例中,在获取到待存储数据时,会为其分配一个存储ID,作为该待存储数据的存储标识,并同时创建对应的元数据进行存储。即便后续该待存储数据被分割成多个条带、数据分片、数据块等,也各个部分的数据也都具有相同存储ID。之后,将条带STk的存储ID与STk的k值共同作为哈希的键(Key),通过一致性哈希算法计算条带STk对应的虚拟磁盘组索引,并将该索引对应的虚拟磁盘组确定为条带STk的目标虚拟磁盘组。
具体的,可以将各个虚拟磁盘组的索引通过特定的哈希函数计算出对应的键,然后散列到一个哈希环上。此后将条带STk的存储ID与STk的k值共同作为哈希的键,如两者相加,通过哈希算法映射到上述哈希环中。此时各个虚拟磁盘组的索引与条带STk的哈希计算结果处于同一哈希空间中,那么条带STk的存储位置即是沿顺时针的方向找到的哈希环上的第一个虚拟磁盘组。
通过应用本申请实施例的技术方案,在需要扩展新的候选虚拟磁盘组的情况下,无需重新计算、更新全部的哈希值,也能够保持负载均衡的效果;同时,将存储ID和条带的序号共同作为哈希键,可以保证将该条带所属的待存储数据更为均衡地分配到多个虚拟磁盘组中,实现了各个存储节点和硬盘的负载均衡,避免了对一份待存储数据全部用相同的存储ID进行映射所导致的多次映射到相同的虚拟磁盘组的情况。
在一示例性实施例中,在需要对存储的数据进行读取的情况下,需要先确定待读取的目标数据所属的条带STa~STf,在确定出的条带中,分别存储部分的目标数据,即多个目标数据段分别存储在条带STa~STf中,1≤a≤f≤t。在读取每个目标数据段时,需要先确定当前目标数据段的起始地址所属的纠删码组Ecp,之后将纠删码组Ecp的p值乘该纠删码组内的数据块ECcp_q的大小,得到所述目标数据段在存储分片Scq中的分片偏移地址。同时,将所述目标数据的存储ID与条带STc的c值作为键,通过一致性哈希算法计算条带STc对应的虚拟磁盘组索引,之后在虚拟磁盘组索引对应的虚拟磁盘组中,根据所述分片偏移地址和所述目标数据段的大小,确定所述目标数据段的存储位置,并从所述存储位置读取所述目标数据段。通过应用本申请实施例的技术方案,能够准确、高效地读取通过本申请的分布式存储方法进行存储的数据,能够实现对数据的随机读写,证明了本申请分布式存储方法能够有效实施,同时确保存储的数据切实可用。
沿用前述图2的举例,可以假设想要读取的目标数据为存储ID为12、起始地址为256M+160KB、大小为 32KB 的数据,那么在预设条带大小为 256MB 的情况下,得到目标数据属于条带ST2,进而可以得到该位置对应着第2个条带中的第2个纠删码组E22。该条带中纠删码组内每个数据块的大小为32KB,即数据块ECcp_q的大小为32KB,用Ecp的p值乘该纠删码组内的数据块ECcp_q的大小即为2×32KB=64KB,得到目标数据段在存储分片S22中的分片偏移地址。即,地址为256MB+160KB、大小为 32KB 的数据存储在第2个条带中第2个存储分片的64KB中。
之后将目标数据的存储ID与条带STc的c值作为键,即12+2=14作为键,若通过一致性哈希算法计算条带ST2对应的虚拟磁盘组索引为2,那么就在索引为2的虚拟磁盘组中,根据分片偏移地址64KB确定所述目标数据段的存储位置为:虚拟磁盘组2中的第2个存储空间里存储ID与条带码对应的分片的64KB位置的空间,对应于图3中存储空间N2-S1,进一步对应于物理存储集群中的存储节点N2中的硬盘S1,从上述硬盘中存储ID与条带码对应的分片即可读取到对应的数据。
需要说明的是,在想要读取的目标数据段较大,如需要跨纠删码组、跨条带的情况下,依然可以按照上述方式,依次确定各部分的目标数据所属的条带、纠删码组并确定对应的存储节点与硬盘,并从对应的硬盘中读取到对应的数据,进而组成完整的目标数据段。
需要说明的是,如果只是读取数据、而不修改数据,那么不需要读取存有校验块的存储分片的数据;如果只是读取数据后修改了数据,那么需要读取该条带中所有存储分片的数据。具体原因及读取方式于下述实施例中进行说明。
由于任一纠删码组中的校验块是由组内的原始数据块计算生成的,因此,在组内任一数据块中的数据发生变更的情况下,都需要对整个纠删码组进行重新编码,以确保各个数据块的有效性,在发生部分存储故障的情况下,也可以通过组内其他的数据块进行数据恢复。
在一示例性实施例中,在需要进行数据更新的情况下,可以先确定待更新数据所属的至少一个原纠删码组。原纠删码组为当前已完成存储的、未进行数据更新的纠删码组。读取数据的方式可以参见上述实施例,需要补充的是,由于要对修改数据后的整个纠删码组重新编码,因此需要同时读取存有该纠删码组中所有原始数据块的存储分片,此时存储分片Scq的分片偏移地址同样适用于存有该纠删码组数据的其他存储分片的分片偏移地址的计算。例如目标数据段在存储分片S12中的分片偏移地址为64KB,那么存有其他原始数据块的存储分片S11、S13、S14、的分片偏移地址同样为64KB,并需要从相应的多个硬盘中,根据上述分片偏移地址进行数据读取。读取到原纠删码组后,即可对原纠删码组中需要更新的数据块进行数据更新,并根据更新后数据块和相应原纠删码组中与所述待更新数据无关的数据块重新进行纠删码编码,得到新纠删码组,之后用新纠删码组替换原纠删码组即可完成数据更新。
沿用前述图 1的举例,可以假设想要更新的目标数据 ID 为12、起始地址为256MB+160KB、大小为 32KB 的数据,那么在预设条带大小为 256MB 的情况下,得到目标数据属于条带 ST2,进而可以得到该位置对应着第2个条带中的第2个纠删码组 E22。由于想要更新的数据大小为32KB,可以得到结束地址为256MB+191KB,属于纠删码组 E22中的第二个数据块,即待更新的数据为存储分片S22中的大小为32KB数据。首先读出纠删码组 E22中的所有原始数据块,对应于存储分片S21、S22、S23、S24中32KB~63KB的数据,然后更新第2个存储分片S22的32~64KB处的数据。在更新之后的基础上,根据这四个存储分片的数据重新计算纠删码数据,得到对应的校验块。最后把更新后的原始数据块更新到存储分片S22中,把最新的校验块更新到存储分片S25、S26中。需要说明的是,在特殊的数据修改方式中,如拷贝文件数据,在修改数据时通常会按照纠删码组的大小进行数据对齐,即很少出现起始地址为256MB+160KB的情况,通常是对齐于纠删码组的起始地址,如256MB+128KB。此时无需先读取数据再进行修改,直接将编码后的新数据覆盖至对应的位置即可。
通过应用本申请实施例的技术方案,即便存储的数据发生了更新,包含更新后的数据的纠删码依旧有效,可以在发生存储故障的情况下准确恢复数据,提高了存储数据的可靠性。
在一示例性实施例中,存储时还会出现存储空洞的情况,空洞就是在硬盘中写入的数据时是非连续的,那么不连续的地方就成了空洞。例如,某个硬盘的第一次存储数据时写入到0-63MB的地址空间中,下一次存储数据时写入到128-191MB的空间中,那么64-127MB即为空洞部分。然而,在存储数据因存储故障而丢失时,也像存储空洞一样,表现为存储空间中的空白,所以目前很难对这两者进行区分。因此,本申请实施例中创建位图来记录所有存储分片的存储状态。位图可以存储在中心节点、客户端、或者任一数据存储段中,位图中包含与存储分片一一对应的比特位,存储分片的存储状态可以分为“已存储数据”和“未存储数据”。位图中所有比特位的初始值为第一值,此处第一值用于表征这些比特位对应的存储分片未存储数据;在确定出存储有数据的存储分片后,即可把这些存储分片对应的比特位设置为第二值,第二值用于表征这些比特位对应的存储分片已存储数据。例如,可以将第一值设为0,将第二值设为1,在任一存储分片存入数据后,即可把相应的比特位从0置为1。
在一示例性实施例中,在需要删除数据的情况下,如执行truncate、drop、delete操作的时候,先参照上述实施例中的方法查找到目标删除数据,并对存储这些数据的存储分片对应的存储节点发送删除命令,删除对应的硬盘中的目标删除数据。之后,需要相应的更新位图中记录的信息:检查原本存有目标删除数据的存储分片中的数据是否已经全部删除,在确认已经全部删除的情况下,将位图中对应于该存储分片的比特位的值置为0,并根据最新的数据大小对元数据进行更新。
通过应用本申请实施例的技术方案,发现存储空间中的空洞时,只需检查位图中相应的比特位的值,即可得知该空洞是否是因发生数据丢失造成的,实现了对存储数据的损坏情况的精确感知,以便于技术人员进一步根据实际情况采取措施,恢复数据。
需要说明的是,本申请实施例的技术方案可以采用并行读写的方法。因为在写数据、以及跨分片读数据,如一次读取的内容超过纠删码组中单个数据块的大小的时候,需要与多个存储分片对应的存储节点进行通信。因此,可以在读写数据前预先获取到所有需要通信的存储节点的通信连接,依次向各个存储节点发送命令,最后逐个的接收其响应。例如,在存储节点1已经接收到命令,写入数据的时候,可以继续向存储节点2发送命令、与存储节点3建立通讯连接等等,无需等待上一个存储节点完成读写后再开始针对下一个存储节点的读写操作。由于整个存储过程的主要耗时在于数据存储端的读写操作,其他操作,如获取存储节点通信连接、发送命令、接收响应的耗时都较短,因此采用并行读写的方法能够有效减少数据读写用时,保证读写操作的高效进行。
基于本申请提供的分布式存储方法,本申请还提供了一种分布式存储装置,参见图5,包括:
划分单元501,用于获取待存储数据,将所述待存储数据按预设条带大小划分为多个条带ST1~STt;
存储单元502,用于分别对条带ST1~STt进行存储;其中,对任一条带STk进行存储,包括:
将条带STk中的数据划分为m组大小相同的数据,并分别进行纠删码编码,得到纠删码组Ek1~Ekm,其中,纠删码组Eki中包含n个数据块ECki_1~ECki_n;
分别对纠删码组Ek1~Ekm进行存储;其中,对任一纠删码组Eki进行存储,包括:将数据块ECki_j存储至存储分片Skj,其中存储分片Sk1~Skn分别属于不同存储节点中的不同硬盘,1≤k≤t,1≤i≤m,1≤j≤n。
可选的,参见图6,所述装置还包括:
磁盘组确定单元503,用于确定候选虚拟磁盘组,每一候选虚拟磁盘组中包含n个存储空间,且该n个存储空间分别来自不同存储节点中的不同硬盘;
磁盘组选取单元504,用于从所述候选虚拟磁盘组中为条带STk选取对应的目标虚拟磁盘组,所述目标虚拟磁盘组所含的存储空间Mk1~Mkn用于一一对应地存储条带STk对应的存储分片Sk1~Skn。
可选的,所述装置通过迭代执行下述步骤生成任一候选虚拟磁盘组,直至所述任一候选虚拟磁盘组中已分配n个存储空间:
确定已分配至所述任一候选虚拟磁盘组的存储空间对应的硬盘所属的存储节点;
根据除确定的存储节点之外的剩余存储节点中各硬盘的容量,确定各存储节点以及各存储节点中各硬盘的存储权重,且存储权重与容量呈正相关;
确定具有最大存储权重的存储节点,从所述存储节点中的具有最大存储权重的硬盘上划分相应的存储空间以分配至所述任一候选虚拟磁盘组。
可选的,所述磁盘组选取单元504,具体用于:
确定所述待存储数据的存储ID;
将所述存储ID与条带STk的k值作为键,通过一致性哈希算法计算条带STk对应的虚拟磁盘组索引;
将所述虚拟磁盘组索引对应的虚拟磁盘组确定为所述目标虚拟磁盘组。
可选的,参见图7,所述装置还包括:
条带确定单元505,用于确定待读取的目标数据所属的条带STa~STf,所述条带STa~STf中分别存储有包含所述目标数据的目标数据段;
读取单元506,用于分别读取条带STa~STf中包含的目标数据段;其中,读取任一条带STc中的目标数据段,包括:
确定所述目标数据段的起始地址所属的纠删码组Ecp;
将纠删码组Ecp的p值乘纠删码组内的数据块ECcp_q的大小,得到所述目标数据段在存储分片Scq中的分片偏移地址;
将所述目标数据的存储ID与条带STc的c值作为键,通过一致性哈希算法计算条带STc对应的虚拟磁盘组索引;
在所述虚拟磁盘组索引对应的虚拟磁盘组中,根据所述分片偏移地址和所述目标数据段的大小,确定所述目标数据段的存储位置,并从所述存储位置读取所述目标数据段。
可选的,参见图8,所述装置还包括:
纠删码组确定单元507,用于在需要进行数据更新的情况下,确定待更新数据所属的至少一个原纠删码组;
纠删码组更新单元508,用于对每个原纠删码组中对应于所述待更新数据的数据块进行数据更新,并根据更新后的原始数据块和相应原纠删码组中与所述待更新数据无关的原始数据块重新进行纠删码编码,得到更新后的校验块;
纠删码组替换单元509,用于利用更新后的数据块和更新后的校验块替换所述原纠删码组中对应的数据块。
可选的,参见图9,所述装置还包括:
存储分片确定单元510,用于确定存储有所述待存储数据的存储分片;
位图创建单元511,用于创建位图,所述位图中包含与所述存储分片一一对应的比特位,其中,所述位图中所有比特位的初始值为第一值,所述第一值用于表征所述比特位对应的存储分片未存储数据;
比特位修改单元512,用于将所述存储分片对应的比特位的值设置为第二值,所述第二值用于表征所述比特位对应的存储分片已存储数据。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
相应的,本申请还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现如上任一实施例所述的分布式存储方法。
参见图10,在硬件层面,该电子设备包括处理器1002、内部总线 1004、网络接口1006、内存1008以及非易失性存储器1010,当然还可能包括其他业务所需要的硬件。处理器1002从非易失性存储器1010中读取对应的计算机程序到内存1008中然后运行,在逻辑层面上形成分布式存储的装置。当然,除了软件实现方式之外,本申请并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
相应的,本申请还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上任一实施例所述的分布式存储方法。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器 (CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器 (RAM) 和/或非易失性内存等形式,如只读存储器 (ROM) 或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存 (PRAM)、静态随机存取存储器 (SRAM)、动态随机存取存储器 (DRAM)、其他类型的随机存取存储器 (RAM)、只读存储器 (ROM)、电可擦除可编程只读存储器 (EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘 (DVD) 或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本申请特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本申请一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请一个或多个实施例。在本申请一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本申请一个或多个实施例的较佳实施例而已,并不用以限制本申请一个或多个实施例,凡在本申请一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请一个或多个实施例保护的范围之内。
Claims (8)
1.一种分布式存储方法,其特征在于,包括:
获取待存储数据,将所述待存储数据按预设条带大小划分为t个大小相同的条带ST1~STt;
分别对条带ST1~STt进行存储;其中,对任一条带STk进行存储,包括:
将条带STk中的数据划分为m组大小相同的数据,并分别进行纠删码编码,得到纠删码组Ek1~Ekm,其中,纠删码组Eki中包含n个数据块ECki_1~ECki_n,其中,STk表示第k个条带,纠删码组Eki表示条带STk中第i个纠删码组;
分别对纠删码组Ek1~Ekm进行存储;其中,对任一纠删码组Eki进行存储,包括:将数据块ECki_j存储至存储分片Skj,数据块ECki_j表示条带STk中的纠删码组Eki中的第j个数据块;存储分片Skj为n个存储分片Sk1~Skn中的第j个存储分片,所述数据块ECki_j的位置序号j与所述存储分片Skj的序号j相同,其中存储分片Sk1~Skn分别属于不同存储节点中的不同硬盘,1≤k≤t,1≤i≤m,1≤j≤n;
确定候选虚拟磁盘组,每一候选虚拟磁盘组中包含n个存储空间,且该n个存储空间分别来自不同存储节点中的不同硬盘;
从所述候选虚拟磁盘组中为条带STk选取对应的目标虚拟磁盘组,所述目标虚拟磁盘组所含的存储空间Mk1~Mkn用于一一对应地存储条带STk对应的存储分片Sk1~Skn;
通过迭代执行下述步骤生成任一候选虚拟磁盘组,直至所述任一候选虚拟磁盘组中已分配n个存储空间:
确定已分配至所述任一候选虚拟磁盘组的存储空间对应的硬盘所属的存储节点;
根据除确定的存储节点之外的剩余存储节点中各硬盘的容量,确定各存储节点以及各存储节点中各硬盘的存储权重,且存储权重与容量呈正相关;
确定具有最大存储权重的存储节点,从所述存储节点中的具有最大存储权重的硬盘上划分相应的存储空间以分配至所述任一候选虚拟磁盘组。
2.根据权利要求1所述的方法,其特征在于,所述为条带STk选取目标虚拟磁盘组,包括:
确定所述待存储数据的存储ID;
将所述存储ID与条带STk的k值作为键,通过一致性哈希算法计算条带STk对应的虚拟磁盘组索引;
将所述虚拟磁盘组索引对应的虚拟磁盘组确定为所述目标虚拟磁盘组。
3.根据权利要求2所述的方法,其特征在于,还包括:
确定待读取的目标数据所属的条带STa~STf,所述条带STa~STf中分别存储有包含所述目标数据的目标数据段;
分别读取条带STa~STf中包含的目标数据段;其中,读取任一条带STc中的目标数据段,包括:
确定所述目标数据段的起始地址所属的纠删码组Ecp;
将纠删码组Ecp的p值乘纠删码组内的数据块ECcp_q的大小,得到所述目标数据段在存储分片Scq中的分片偏移地址;
将所述目标数据的存储ID与条带STc的c值作为键,通过一致性哈希算法计算条带STc对应的虚拟磁盘组索引;
在所述虚拟磁盘组索引对应的虚拟磁盘组中,根据所述分片偏移地址和所述目标数据段的大小,确定所述目标数据段的存储位置,并从所述存储位置读取所述目标数据段。
4.根据权利要求1所述的方法,其特征在于,还包括:
在需要进行数据更新的情况下,确定待更新数据所属的至少一个原纠删码组;
对每个原纠删码组中对应于所述待更新数据的原始数据块进行数据更新,并根据更新后的原始数据块和相应原纠删码组中与所述待更新数据无关的原始数据块重新进行纠删码编码,得到更新后的校验块;
利用更新后的数据块和更新后的校验块替换所述原纠删码组中对应的原始数据块与校验块。
5.根据权利要求1所述的方法,其特征在于,还包括:
确定存储有所述待存储数据的存储分片;
创建位图,所述位图中包含与所述存储分片一一对应的比特位,其中,所述位图中所有比特位的初始值为第一值,所述第一值用于表征所述比特位对应的存储分片未存储数据;
将所述存储分片对应的比特位的值设置为第二值,所述第二值用于表征所述比特位对应的存储分片已存储数据。
6.一种分布式存储装置,其特征在于,包括:
划分单元,用于获取待存储数据,将所述待存储数据按预设条带大小划分为t个大小相同的条带ST1~STt;
存储单元,用于分别对条带ST1~STt进行存储;其中,对任一条带STk进行存储,包括:
将条带STk中的数据划分为m组大小相同的数据,并分别进行纠删码编码,得到纠删码组Ek1~Ekm,其中,纠删码组Eki中包含n个数据块ECki_1~ECki_n,其中,STk表示第k个条带,纠删码组Eki表示条带STk中第i个纠删码组;
分别对纠删码组Ek1~Ekm进行存储;其中,对任一纠删码组Eki进行存储,包括:将数据块ECki_j存储至存储分片Skj,数据块ECki_j表示条带STk中的纠删码组Eki中的第j个数据块;存储分片Skj为n个存储分片Sk1~Skn中的第j个存储分片,所述数据块ECki_j的位置序号j与所述存储分片Skj的序号j相同,其中存储分片Sk1~Skn分别属于不同存储节点中的不同硬盘,1≤k≤t,1≤i≤m,1≤j≤n;
所述装置还包括:
磁盘组确定单元,用于确定候选虚拟磁盘组,每一候选虚拟磁盘组中包含n个存储空间,且该n个存储空间分别来自不同存储节点中的不同硬盘;
磁盘组选取单元,用于从所述候选虚拟磁盘组中为条带STk选取对应的目标虚拟磁盘组,所述目标虚拟磁盘组所含的存储空间Mk1~Mkn用于一一对应地存储条带STk对应的存储分片Sk1~Skn;
所述装置通过迭代执行下述步骤生成任一候选虚拟磁盘组,直至所述任一候选虚拟磁盘组中已分配n个存储空间:
确定已分配至所述任一候选虚拟磁盘组的存储空间对应的硬盘所属的存储节点;
根据除确定的存储节点之外的剩余存储节点中各硬盘的容量,确定各存储节点以及各存储节点中各硬盘的存储权重,且存储权重与容量呈正相关;
确定具有最大存储权重的存储节点,从所述存储节点中的具有最大存储权重的硬盘上划分相应的存储空间以分配至所述任一候选虚拟磁盘组。
7.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至5中任一项所述的分布式存储方法。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至5中任一项所述的分布式存储方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311336458.XA CN117075821B (zh) | 2023-10-13 | 2023-10-13 | 一种分布式存储方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311336458.XA CN117075821B (zh) | 2023-10-13 | 2023-10-13 | 一种分布式存储方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117075821A CN117075821A (zh) | 2023-11-17 |
CN117075821B true CN117075821B (zh) | 2024-01-16 |
Family
ID=88713749
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311336458.XA Active CN117075821B (zh) | 2023-10-13 | 2023-10-13 | 一种分布式存储方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117075821B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117725258A (zh) * | 2023-12-19 | 2024-03-19 | 北京中电兴发科技有限公司 | 基于空间和时间均衡安防视频存储规划和定位读写的方法 |
CN118210659B (zh) * | 2024-05-22 | 2024-08-06 | 济南浪潮数据技术有限公司 | 灾备存储系统的管理方法、设备、系统、产品及存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101339524A (zh) * | 2008-05-22 | 2009-01-07 | 清华大学 | 大规模磁盘阵列存储系统的磁盘容错方法 |
CN105159618A (zh) * | 2015-09-25 | 2015-12-16 | 清华大学 | 用于单盘失效修复的优化方法及优化装置 |
CN106293511A (zh) * | 2016-07-26 | 2017-01-04 | 北京理工大学 | 一种面向连续数据存储的动态局部并行数据布局 |
CN110515542A (zh) * | 2019-07-30 | 2019-11-29 | 华为技术有限公司 | 数据存储方法、装置、计算设备、存储系统及存储介质 |
CN114003174A (zh) * | 2021-11-01 | 2022-02-01 | 联想(北京)有限公司 | 一种纠删码存储方法、系统及电子设备 |
CN114138194A (zh) * | 2021-11-25 | 2022-03-04 | 苏州浪潮智能科技有限公司 | 一种数据分布存储方法、装置、设备及介质 |
WO2023000686A1 (zh) * | 2021-07-22 | 2023-01-26 | 华为技术有限公司 | 存储系统中的数据存储方法以及装置 |
CN116010160A (zh) * | 2023-03-09 | 2023-04-25 | 安超云软件有限公司 | 分布式文件系统的纠删码数据分布的方法及应用 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11709609B2 (en) * | 2020-03-27 | 2023-07-25 | Via Technologies, Inc. | Data storage system and global deduplication method thereof |
US11842074B2 (en) * | 2021-03-21 | 2023-12-12 | Vast Data Ltd. | Striping in a storage system |
-
2023
- 2023-10-13 CN CN202311336458.XA patent/CN117075821B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101339524A (zh) * | 2008-05-22 | 2009-01-07 | 清华大学 | 大规模磁盘阵列存储系统的磁盘容错方法 |
CN105159618A (zh) * | 2015-09-25 | 2015-12-16 | 清华大学 | 用于单盘失效修复的优化方法及优化装置 |
CN106293511A (zh) * | 2016-07-26 | 2017-01-04 | 北京理工大学 | 一种面向连续数据存储的动态局部并行数据布局 |
CN110515542A (zh) * | 2019-07-30 | 2019-11-29 | 华为技术有限公司 | 数据存储方法、装置、计算设备、存储系统及存储介质 |
WO2023000686A1 (zh) * | 2021-07-22 | 2023-01-26 | 华为技术有限公司 | 存储系统中的数据存储方法以及装置 |
CN114003174A (zh) * | 2021-11-01 | 2022-02-01 | 联想(北京)有限公司 | 一种纠删码存储方法、系统及电子设备 |
CN114138194A (zh) * | 2021-11-25 | 2022-03-04 | 苏州浪潮智能科技有限公司 | 一种数据分布存储方法、装置、设备及介质 |
CN116010160A (zh) * | 2023-03-09 | 2023-04-25 | 安超云软件有限公司 | 分布式文件系统的纠删码数据分布的方法及应用 |
Non-Patent Citations (1)
Title |
---|
多重条带布局的混合RAID系统研究;蔡杰明;方沛;贾思懿;董欢庆;刘振军;刘国良;;小型微型计算机系统(05);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN117075821A (zh) | 2023-11-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US12056025B2 (en) | Updating the membership of a pod after detecting a change to a set of storage systems that are synchronously replicating a dataset | |
CN117075821B (zh) | 一种分布式存储方法、装置、电子设备及存储介质 | |
US12086029B2 (en) | Intra-device and inter-device data recovery in a storage system | |
US11714718B2 (en) | Performing partial redundant array of independent disks (RAID) stripe parity calculations | |
US20210397359A1 (en) | Storing Data For Machine Learning And Artificial Intelligence Applications In A Decentralized Storage Network | |
US12079148B2 (en) | Time-independent scheduling of storage operations | |
CN107807794B (zh) | 一种数据存储方法和装置 | |
US9846540B1 (en) | Data durability using un-encoded copies and encoded combinations | |
US11579790B1 (en) | Servicing input/output (‘I/O’) operations during data migration | |
CN107729536B (zh) | 一种数据存储方法和装置 | |
US10552090B2 (en) | Solid state drives with multiple types of addressable memory | |
CN110597655B (zh) | 迁移和基于纠删码的重构相耦合快速预知修复方法及装置 | |
US9619322B2 (en) | Erasure-coding extents in an append-only storage system | |
CN110413454B (zh) | 基于存储阵列的数据重建方法、装置及存储介质 | |
US11789780B1 (en) | Preserving quality-of-service (‘QOS’) to storage system workloads | |
US20230138462A1 (en) | Migrating Similar Data To A Single Data Reduction Pool | |
CN109407985B (zh) | 一种数据管理的方法以及相关装置 | |
CN107798063A (zh) | 快照处理方法和快照处理装置 | |
CN107948229B (zh) | 分布式存储的方法、装置及系统 | |
CN105830063B (zh) | 协调卷组中的小卷 | |
JP2010191903A (ja) | 分散ファイルシステムのストライピング種別選択方法及びその分散ファイルシステム | |
CN114115735B (zh) | 写入数据的方法及装置 | |
WO2021189315A1 (en) | Proxy server crash recovery in object storage system using enhanced meta structure | |
CN111367712A (zh) | 一种数据处理方法及装置 | |
CN118626456A (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 | ||
CP03 | Change of name, title or address |
Address after: 310053 room 611-612, Zhuoxin building, No. 3820, South Ring Road, Binjiang District, Hangzhou City, Zhejiang Province Patentee after: Hangzhou Youyun Technology Co.,Ltd. Country or region after: China Address before: 310053 room 611-612, Zhuoxin building, No. 3820, South Ring Road, Binjiang District, Hangzhou City, Zhejiang Province Patentee before: Hangzhou Youyun Technology Co.,Ltd. Country or region before: China |
|
CP03 | Change of name, title or address |