发明内容
本发明实施例的目的在于提供一种分布式存储方法、装置、电子设备及存储介质,以实现节约存储空间。具体技术方案如下:
本申请实施例的第一方面,提供了一种分布式存储方法,应用于分布式存储系统,所述分布式存储系统包括多个节点,所述方法包括:
获取待存储数据,并将所述待存储数据划分为多个数据分片;
将所述多个数据分片划分为多个数据分组,其中,每一数据分组包括一个或多个数据分片,当一个数据分组中包括多个数据分片时,该数据分组中的多个数据分片不连续;
将所述多个数据分组存储至所述多个节点中,其中,每一个节点中存储有一个或多个数据分组。
在一种可能的实施方式中,在所述将所述多个数据分组存储至所述多个节点中之后,所述方法还包括:
针对任意两个目标数据分组,计算该两个目标数据分组的异或值;
将计算得到的异或值存储在目标节点中。
在一种可能的实施方式中,所述将所述多个数据分组存储至所述多个节点中,包括:
针对任一节点识别该节点中存储单元的数量;
当该节点中包括多个存储单元时,若该节点对应的数量分组的数量不小于存储单元的数量时,在每一存储单元中存储至少一个数据分组。
在一种可能的实施方式中,在将所述多个数据分组存储至所述多个节点中时,每一节点中的多个数据分组对应的多个数据分片中的任两个数据分片均不连续。
在一种可能的实施方式中,在所述将所述多个数据分组存储至所述多个节点中之后,所述方法还包括:
并行获取各节点中存储的数据分组;
对每个节点中存储的数据分组中的数据分片进行拼接,得到目标数据。
在一种可能的实施方式中,所述对每个节点中存储的数据分组中的数据分片进行拼接,得到目标数据,包括:
当获取任一节点中存储的数据分组失败时,获取所述目标节点中存储的数据分组的异或值;
根据所述数据分组的异或值和已经获取到的数据分组,计算未获取到数据分组;
对计算得到的数据分组和获取到的数据分组中的数据分片进行拼接,得到所述目标数据。
本申请实施例的第二方面,提供了一种分布式存储装置,应用于分布式存储系统,所述分布式存储系统包括多个节点,所述装置包括:
数据获取模块,用于获取待存储数据,并将所述待存储数据划分为多个数据分片;
数据分组模块,用于将所述多个数据分片划分为多个数据分组,其中,每一数据分组包括一个或多个数据分片,当一个数据分组中包括多个数据分片时,该数据分组中的多个数据分片不连续;
节点存储模块,用于将所述多个数据分组存储至所述多个节点中,其中,每一个节点中存储有一个或多个数据分组。
在一种可能的实施方式中,所述装置还包括:
数据计算模块,用于针对任意两个目标数据分组,计算该两个目标数据分组的异或值;
数据存储模块,用于将计算得到的异或值存储在目标节点中。
在一种可能的实施方式中,所述节点存储模块,包括:
数量识别子模块,用于针对任一节点识别该节点中存储单元的数量;
分组存储子模块,用于当该节点中包括多个存储单元时,若该节点对应的数量分组的数量不小于存储单元的数量时,在每一存储单元中存储至少一个数据分组。
在一种可能的实施方式中,在将所述多个数据分组存储至所述多个节点中时,每一节点中的多个数据分组对应的多个数据分片中的任两个数据分片均不连续。
在一种可能的实施方式中,所述装置还包括:
并行获取模块,用于并行获取各节点中存储的数据分组;
数据分片模块,用于对每个节点中存储的数据分组中的数据分片进行拼接,得到目标数据。
在一种可能的实施方式中,所述数据分片模块,包括:
分组获取子模块,用于当获取任一节点中存储的数据分组失败时,获取所述目标节点中存储的数据分组的异或值;
分组计算子模块,用于根据所述数据分组的异或值和已经获取到的数据分组,计算未获取到数据分组;
数据拼接子模块,用于对计算得到的数据分组和获取到的数据分组中的数据分片进行拼接,得到所述目标数据。
本申请实施例的第三方面,提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现上述任一所述的分布式存储方法步骤。
本申请实施例的第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一所述的分布式存储方法步骤。
本发明实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一所述的分布式存储方法步骤。
本发明实施例有益效果:
本发明实施例提供的一种分布式存储方法、装置、电子设备及存储介质,该分布式存储方法,应用于分布式存储系统,所述分布式存储系统包括多个节点,所述方法包括:获取待存储数据,并将所述待存储数据划分为多个数据分片;将所述多个数据分片划分为多个数据分组,其中,每一数据分组包括一个或多个数据分片,当一个数据分组中包括多个数据分片时,该数据分组中的多个数据分片不连续;将所述多个数据分组存储至所述多个节点中,其中,每一个节点中存储有一个或多个数据分组。通过将待存储数据进行分段,然后进行分组,每个节点中存储一个或多个数据分组,通过该方法可以将待存储数据分散存储在多个节点中,无需进行数据的充分存储,从而提高数据的存储效率。
当然,实施本发明的任一产品或方法并不一定需要同时达到以上所述的所有优点。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员基于本申请所获得的所有其他实施例,都属于本发明保护的范围。
本申请实施例的第一方面,提供了一种分布式存储方法,应用于分布式存储系统,所述分布式存储系统包括多个节点,参见图1,所述方法包括:
步骤S11,获取待存储数据,并将所述待存储数据划分为多个数据分片;
步骤S12,将所述多个数据分片划分为多个数据分组,其中,每一数据分组包括一个或多个数据分片,当一个数据分组中包括多个数据分片时,该数据分组中的多个数据分片不连续;
步骤S13,将所述多个数据分组存储至所述多个节点中,其中,每一个节点中存储有一个或多个数据分组。
可见,通过本申请实施例的分布式存方法,可以将待存储数据进行分段,然后进行分组,每个节点中存储一个或多个数据分组,通过该方法可以将待存储数据分散存储在多个节点中,无需进行数据的充分存储,从而提高数据的存储效率。
其中,本申请实施例中的分布式存储系统可以包括多个节点,每一个节点可以对应一个存储空间,具体的,一个节点中可以包括一个或多个存储单元,例如,硬盘。该分布式节点中的各个节点可以分布在不同的地理位置,节点之间通过网络进行连接。
上述步骤S11中,获取待存储数据可以为多种类型的数据,例如,图像、文字、视频、音乐等。在实际使用过程中,获取到的待存储数据可以为0/1数据。例如,可以在获取需要进行存储的数据之后,可以进行数据的转换,得到对应的0/1数据,即,待存储数据。在本申请实施例中将所述待存储数据划分为多个数据分片,一种情况下,可以根据预设长度进行分段,从而使得分段后得到的分段每一个的长度均为该预设长度。另一种情况下,可以根据待存储数据的长度进行分段,可以设定得到的分段的数量,从而根据待存储数据的长度和该分段的数量,计算每一个分段的长度,从而进行分段。
上述步骤S12中,将所述多个数据分片划分为多个数据分组,可以将得到的多个数据分片打散,然后进行数据分组的划分。其中,每一数据分组包括一个或多个数据分片,当一个数据分组中包括多个数据分片时,该数据分组中的多个数据分片不连续。例如,可以将得到的多个数据分片打散之后,将间隔的数据划分为一个组。一个例子中,若数据分片分别为A、B、C、D、E、F、G、H等,若一个分组包括两个数据分片,可以AC划分为一个分组,BD划分为一个分组,EG划分为一个分组,FH划分为一个分组;若一个分组包括三个数据分片,可以ACE划分为一个分组,BDF划分为一个分组。
上述步骤S13中,将所述多个数据分组存储至所述多个节点中,可以根据节点的数量和数据分组的数量进行存储,具体的,当数据分组的数量大于节点的数量时,每一个节点中可以存储有一个或多个数据分组。
通过本申请实施例的方法,在分布式存储中存储数据时,可以进行数据的分散。不但在生成数据分组时通过限定数据分组中的数据分片不连续的方法进行分散,而且在向节点中存储分组时还可以进行分散,从而使得数据同时损失的可能性减低。
在一种可能的实施方式中,对应图1中步骤S13,所述将所述多个数据分组存储至所述多个节点中,参见图2,包括:
步骤S131,针对任一节点识别该节点中存储单元的数量;
步骤S132,当该节点中包括多个存储单元时,若该节点对应的数量分组的数量不小于存储单元的数量时,在每一存储单元中存储至少一个数据分组。
例如,当一个节点中包括存储单元1和存储单元2时,若该节点中存储的数据分组为AC和BD时,则可以将数据分组为AC存储在存储单元1中,将数据分组BD存储在存储单元2中。
本申请实施例中,在进行数据分组的存储时,通过当该节点中包括多个存储单元时,若该节点对应的数量分组的数量不小于存储单元的数量时,在每一存储单元中存储至少一个数据分组,可以进一步提高分布式存储中数据的分散性,将数据分片保存在不同节点不同的物理硬盘中,保证了数据丢失时不会损失所有数据。
在一种可能的实施方式中,在将所述多个数据分组存储至所述多个节点中时,每一节点中的多个数据分组对应的多个数据分片中的任两个数据分片均不连续。例如,数据分组AC和BD,在将所述多个数据分组存储至所述多个节点中时,将AC和BD分别存储至不同的节点。从而进一步提高分布式存储中数据的分散性,将数据分片保存在不同节点不同的物理硬盘中,保证了数据丢失时不会损失所有数据。
在一种可能的实施方式中,对应图1中步骤S13,在所述将所述多个数据分组存储至所述多个节点中之后,参见图3,所述方法还包括:
步骤S31,针对任意两个目标数据分组,计算该两个目标数据分组的异或值;
步骤S32,将计算得到的异或值存储在目标节点中。
其中,本申请实施例中的针对任意两个目标数据分组,计算该两个目标数据分组的异或值,例如,针对数据分组AB和CD,计算对应的异或值可以为:A⊕B=a’b’ ,C⊕D=c’d’。本申请实施例中针对任意两个目标数据分组,计算该两个目标数据分组的异或值,可以针对将多个数据分片分组后得到的任一两个数据分组,将其确定为目标数据分组,然后计算该两个数据分组的异或值。在实际使用过程中,在选取目标数据分组时,还可以除去同一存储单元对应的数据分组。由于同一存储单元中的数据分组若丢失,则会同时丢失,因此不可以通过异或值进行找回。则若数据分组AC存储在一个存储单元中,则在计算异或值时并不计算数据分组AC对应的异或值。
在一种可能的实施方式中,对应图1中步骤S13,在所述将所述多个数据分组存储至所述多个节点中之后,参见图4,所述方法还包括:
步骤S41,并行获取各节点中存储的数据分组;
步骤S42,对每个节点中存储的数据分组中的数据分片进行拼接,得到目标数据。
由于本申请实施例中的数据存储在分布式存储中,因此,在获取各节点中存储的数据分组时,可以同时向多个节点发送数据获取指令,从而获取对应节点中存储的数据,提高数据的获取速度。例如,数据读取时可以同时对节点1和节点 2进行数据读取,读取最大长度为一个数据组的长度。然后对获取的数据分组中的数据分片进行拼接,从而得到目标数据,该目标数据和数据存储时的待存储数据相同。
在一种可能的实施方式中,对应上述步骤S42,所述对每个节点中存储的数据分组中的数据分片进行拼接,得到目标数据,参见图5,包括:
步骤S51,当获取任一节点中存储的数据分组失败时,获取所述目标节点中存储的数据分组的异或值;
步骤S52,根据所述数据分组的异或值和已经获取到的数据分组,计算未获取到数据分组;
步骤S53,对计算得到的数据分组和获取到的数据分组中的数据分片进行拼接,得到所述目标数据。
例如,在进行数据存储时,数据分组为AC和BD,将数据分组AC存储在节点1中,将数据分组BD存储在节点2中,而将AB、AD、BC、CD分别对应的异或值存储在节点3中,则若获取节点2中的数据分组BD失败,则可以获取节点1中的数据分组AC,以及节点3中AB、AD、BC、CD分别对应的异或值,从而根据数据分组AC和AB、AD、BC、CD分别对应的异或值计算得到数据分组CD。例如,A⊕B=a’b’ C⊕D=c’d’,假如节点 2 发生故障,则可以通过对节点 1 和节点 3进行数据读取,通过节点 3 上保存的异或数据 a’b’ c’d’和节点 1 上的保存数据A C还原出节点 2 的原始数据 B D,如果节点 3 发生故障,则可以通过节点1 保存的数据 A C和节点 2 保存的数据 B D还原出节点 3 的数据a’b’ c’d’。
可见,通过本申请实施例的方法,数据分片保存在不同节点不同的位置中,保证了数据丢失时不会损失所有数据,不但恢复难度小,而且通过采用异或算法保存数据,还可以有效节省空间占用。
为了说明本申请实施例的方法,以下结合具体实施例进行说明,参见图6,包括:
1、获取计算机硬盘中存储的数据,该数据均为0/1数据;
2、假设需要保存一段数据A、B、C、D、E、F、G、H、I、J、K、L到硬盘当中;
3、在数据保存时,先将数据打散并把间隔数据划分到一个组内,例如,AC一个组,BD一个组,EG一个组,FH一个组,IK一个组,JL一个组(当然可以将更多的数据划分在一个组内);
4、将相邻的组分别放置在不同的节点当中,例如,AC组、EG组、IK组在节点 1 中,BD组、FH组、JL组在节点 2 中,如果这个节点硬盘数量>1,那么这个节点上的组数据将分散在不同的物理硬盘上,例如, AC在硬盘 1中, EG在硬盘 2;
5、每当两组数据存储至节点之后,需要计算节点数据两个组的异或值放入节点 3中,即 A⊕B=a’b’,C⊕D=c’d’,E⊕F=e’f’,G⊕H=g’h’,I⊕J=i’j’,K⊕L=k’l’,然后将a’b’和c’d’划分为一组,将e’f’和g’h’划分为一组,将i’j’和k’l’划分为一组;
6、数据读取时可以同时对节点1和节点 2进行数据读取,读取最大长度为一个数据组的长度;
7、假如节点 2 发生故障,则可以通过对节点 1 和节点 3进行数据读取,通过节点 3 上保存的异或数据 a’b’,c’d’和节点 1 上的保存数据A C还原出节点 2 的原始数据 B D,如果节点 3 发生故障,则可以通过节点1 保存的数据 A C和节点 2 保存的数据B D还原出节点 3 的数据a’b’,c’d’。
本申请实施例的第二方面,提供了一种分布式存储装置,应用于分布式存储系统,所述分布式存储系统包括多个节点,参见图7,所述装置包括:
数据获取模块701,用于获取待存储数据,并将所述待存储数据划分为多个数据分片;
数据分组模块702,用于将所述多个数据分片划分为多个数据分组,其中,每一数据分组包括一个或多个数据分片,当一个数据分组中包括多个数据分片时,该数据分组中的多个数据分片不连续;
节点存储模块703,用于将所述多个数据分组存储至所述多个节点中,其中,每一个节点中存储有一个或多个数据分组。
在一种可能的实施方式中,所述装置还包括:
数据计算模块,用于针对任意两个目标数据分组,计算该两个目标数据分组的异或值;
数据存储模块,用于将计算得到的异或值存储在目标节点中。
在一种可能的实施方式中,所述节点存储模块,包括:
数量识别子模块,用于针对任一节点识别该节点中存储单元的数量;
分组存储子模块,用于当该节点中包括多个存储单元时,若该节点对应的数量分组的数量不小于存储单元的数量时,在每一存储单元中存储至少一个数据分组。
在一种可能的实施方式中,在将所述多个数据分组存储至所述多个节点中时,每一节点中的多个数据分组对应的多个数据分片中的任两个数据分片均不连续。
在一种可能的实施方式中,所述装置还包括:
并行获取模块,用于并行获取各节点中存储的数据分组;
数据分片模块,用于对每个节点中存储的数据分组中的数据分片进行拼接,得到目标数据。
在一种可能的实施方式中,所述数据分片模块,包括:
分组获取子模块,用于当获取任一节点中存储的数据分组失败时,获取所述目标节点中存储的数据分组的异或值;
分组计算子模块,用于根据所述数据分组的异或值和已经获取到的数据分组,计算未获取到数据分组;
数据拼接子模块,用于对计算得到的数据分组和获取到的数据分组中的数据分片进行拼接,得到所述目标数据。
可见,通过本申请实施例的分布式存装置,可以将待存储数据进行分段,然后进行分组,每个节点中存储一个或多个数据分组,通过该方法可以将待存储数据分散存储在多个节点中,无需进行数据的充分存储,从而提高数据的存储效率。
本发明实施例还提供了一种电子设备,如图8所示,包括处理器801、通信接口802、存储器803和通信总线804,其中,处理器801,通信接口802,存储器803通过通信总线804完成相互间的通信,
存储器803,用于存放计算机程序;
处理器801,用于执行存储器803上所存放的程序时,实现如下步骤:
获取待存储数据,并将所述待存储数据划分为多个数据分片;
将所述多个数据分片划分为多个数据分组,其中,每一数据分组包括一个或多个数据分片,当一个数据分组中包括多个数据分片时,该数据分组中的多个数据分片不连续;
将所述多个数据分组存储至所述多个节点中,其中,每一个节点中存储有一个或多个数据分组。
上述电子设备提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一分布式存储方法的步骤。
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一分布式存储方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk (SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、电子设备、存储介质及计算机程序产品实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。