CN114860167A - 数据存储方法、装置、电子设备及存储介质 - Google Patents
数据存储方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN114860167A CN114860167A CN202210475295.2A CN202210475295A CN114860167A CN 114860167 A CN114860167 A CN 114860167A CN 202210475295 A CN202210475295 A CN 202210475295A CN 114860167 A CN114860167 A CN 114860167A
- Authority
- CN
- China
- Prior art keywords
- data
- storage
- node
- data block
- data node
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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 OR CALCULATING; 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/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0652—Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
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)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供了一种数据存储方法、装置、电子设备及存储介质,涉及数据存储领域。首先,分别将N个所述数据块发送至N个所述数据节点进行预存储;然后,在至少n个第一数据节点预存储所述数据块成功时,向每个第一数据节点均发送存储指令,存储指令用于指示第一数据节点完成自身的数据块的存储;并在每个第一数据节点均完成自身的数据块的存储时,确认数据存储成功。通过在确认至少n个数据块预存储成功之后,再发送存储指令至存储数据块成功的数据节点,并在每个第一数据节点均完成自身的数据块的存储时,确认数据存储成功,能够解决现有技术中将实际数据存储成功误判为数据存储失败的问题,提高数据存储的效率。
Description
技术领域
本发明涉及数据存储领域,具体而言,涉及一种数据存储方法、装置、电子设备及存储介质。
背景技术
在对海量数据进行存储时,为了提高数据的安全性和高可用性,纠删端在接收到待存储的原始数据后,采用纠删技术对原始数据进行处理,得到多个数据块,并将多个数据块分散存储在分布式集群的各个数据节点上。当用户需要读取数据时,从各个数据节点上获取数据块,并进行纠删计算得到原始数据。
现有技术中,各个数据节点接收到数据块之后,对数据块进行存储,纠删端确定存储数据块成功的数据节点的个数,并根据存储数据块成功的数据节点的个数判断数据是否存储成功。
但是,由于网络异常等原因,纠删端确定出的存储数据块成功的数据节点的个数可能小于实际存储数据块成功的数据节点的个数,导致在实际数据存储成功的情况下,误判数据存储失败。
发明内容
本发明的目的包括,例如,提供了一种数据存储方法,通过在确认至少n个数据块预存储成功之后,再发送存储指令至存储数据块成功的数据节点,并在每个第一数据节点均完成自身的数据块的存储时,确认数据存储成功,能够解决现有技术中将实际数据存储成功误判为数据存储失败的问题,提高数据存储的效率。
为了实现上述目的,本发明实施例采用的技术方案如下:
第一方面,本发明实施例提供了一种数据存储方法,应用于纠删端,所述纠删端分别与N个数据节点建立有通信连接,所述纠删端预先存储有N个数据块,所述N个数据块包括n个原始数据块,且n小于N;所述方法包括:
分别将N个所述数据块发送至N个所述数据节点进行预存储,一个所述数据块对应一个所述数据节点;
在至少n个第一数据节点预存储所述数据块成功时,向每个所述第一数据节点均发送存储指令,所述存储指令用于指示所述第一数据节点完成自身的数据块的存储,其中,所述第一数据节点为N个所述数据节点中预存储所述数据块成功的数据节点;
在每个所述第一数据节点均完成自身的数据块的存储时,确认数据存储成功。
在一种可能的实施方式中,任意两个所述数据节点之间建立有通信连接;每个所述数据块均包括状态标识和版本号,所述版本号用于表征当次数据存储操作的序号;
所述第一数据节点完成自身的数据块的存储,包括:
所述第一数据节点在预设时间内实时判断是否接收到所述存储指令;
若是,则所述第一数据节点将自身的数据块的状态标识由无状态修改为存储状态,以完成自身的数据块的存储,并反馈响应消息至所述纠删端;
若否,则所述第一数据节点获取每个第一数据块的第一版本号和第一状态标识,并根据每个所述第一版本号和每个所述第一状态标识对自身的数据块进行处理,以完成自身的数据块的存储,其中,一个所述第一数据块对应一个所述第一数据节点预存储的数据块。
在一种可能的实施方式中,所述第一数据节点根据每个所述第一版本号和每个所述第一状态标识对自身的数据块进行处理,以完成自身的数据块的存储,包括:
所述第一数据节点确定所述第一状态标识为存储状态的任意一个所述第一数据块的目标版本号;
若目标数据块的版本号与所述目标版本号相同,则所述第一数据节点将所述目标数据块的状态标识由无状态修改为存储状态,以完成所述目标数据块的存储,其中,所述目标数据块为所述第一数据节点自身的数据块。
在一种可能的实施方式中,在所述分别将N个所述数据块发送至N个所述数据节点进行预存储的步骤之后,所述方法还包括:
在p个所述第一数据节点预存储数据块成功时,向每个所述数据节点均发送回退指令,所述回退指令用于指示所述数据节点将自身的数据块回退至所述纠删端、以及在所述自身的数据块回退失败时将其删除,其中,p小于n。
在一种可能的实施方式中,任意两个所述数据节点之间建立有通信连接;
所述数据节点在所述自身的数据块回退失败时将其删除,包括:
所述数据节点在自身的数据块回退失败时,获取每个所述数据节点对应的数据块的第二状态标识;
若每个所述第二状态标识均为无状态,则所述数据节点将自身的数据块删除。
在一种可能的实施方式中,在所述向每个所述第一数据节点均发送存储指令的步骤之后,所述方法还包括:
在所述预设时间内,判断是否接收到至少一个所述第一数据节点返回的响应消息;
若是,则确定每个所述第一数据节点均完成自身的数据块的存储;
若否,则确认数据存储失败。
在一种可能的实施方式中,所述纠删端部署于电子设备,所述电子设备还部署有至少一个从纠删端;
在所述预设时间内,判断是否接收到至少一个所述第一数据节点返回的响应消息的步骤之前,所述方法还包括:
若所述纠删端发生异常,则将任意一个所述从纠删端作为所述纠删端,以使所述纠删端接收每个所述响应消息。
第二方面,本发明实施例还提供了一种数据存储装置,应用于纠删端,所述纠删端分别与N个数据节点建立有通信连接,所述纠删端预先存储有N个数据块,所述N个数据块包括n个原始数据块,且n小于N;所述装置包括:
预存储模块,用于分别将N个所述数据块发送至N个所述数据节点进行预存储,一个所述数据块对应一个所述数据节点;
存储模块,用于在至少n个第一数据节点预存储所述数据块成功时,向每个所述第一数据节点均发送存储指令,所述存储指令用于指示所述第一数据节点完成自身的数据块的存储,其中,所述第一数据节点为N个所述数据节点中预存储所述数据块成功的数据节点;
确认模块,用于在每个所述第一数据节点均完成自身的数据块的存储时,确认数据存储成功。
第三方面,本发明实施例还提供了一种电子设备,所述电子设备包括:
一个或多个处理器;
存储器,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现上述的数据存储方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述的数据存储方法。
相对现有技术,本发明实施例提供的一种数据存储方法、装置、电子设备及存储介质,首先,分别将N个所述数据块发送至N个所述数据节点进行预存储,一个数据块对应一个所述数据节点;在至少n个第一数据节点预存储所述数据块成功时,向每个第一数据节点均发送存储指令,存储指令用于指示第一数据节点完成自身的数据块的存储;在每个第一数据节点均完成自身的数据块的存储时,确认数据存储成功。通过先将数据块发送至数据节点进行预存储,再确认至少n个数据块预存储成功之后,再发送存储指令至存储数据块成功的数据节点,以使数据节点对数据块进行存储,能够解决现有技术中将实际数据存储成功误判为数据存储失败的问题,提高数据存储的效率。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本发明实施例提供的数据存储方法的应用场景示意图。
图2为本发明实施例提供的电子设备的方框示意图。
图3为本发明实施例提供的数据存储方法的流程示意图。
图4为本发明实施例提供的一种单个数据块的存储流程示意图。
图5为本发明实施例提供的另一种单个数据块的存储流程示意图。
图6为本发明实施例提供的另一种数据存储方法的流程示意图。
图7为本发明实施例提供的又一种数据存储方法的流程示意图。
图8为本发明实施例提供的数据存储装置的方框示意图。
图标:100-电子设备;101-存储器;102-处理器;103-总线;200-数据存储装置;201-预存储模块;202-回退模块;203-存储模块;204-检测模块;205-确认模块。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
此外,若出现术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
需要说明的是,在不冲突的情况下,本发明的实施例中的特征可以相互结合。
在采用纠删技术对数据进行分布式存储时,通过纠删端对数据进行纠删处理得到多个数据块,并将多个数据块分别发送至多个数据节点进行存储,当每个数据块均存储成功时,纠删端确认此次数据存储成功。
但是由于网络异常等原因,纠删端获悉的数据块存储成功的个数和实际存储成功的数据块的个数不同,判定数据存储失败,此时需要重新存储数据。但是原来已经存储成功的数据块无法回退,会残留在数据节点上,导致下一次存储数据时,影响数据的冗余性。
为了解决纠删端在判定数据存储失败时,数据块残留在数据节点上的问题,技术人员对上述方法进行改进,纠删端首先将数据块发送至数据节点进行预存储,并在获悉预存储成功的数据节点的个数小于预设个数时,判定数据存储失败,并发送回退指令至每个数据节点,以使每个数据节点回退数据块。
纠删端在获悉预存储成功的数据节点的个数大于预设个数时,发送确认指令至每个预存储成功的数据节点,以使数据节点对预存储的数据块进行确认,使得数据块由预存储状态变为存储状态,并反馈响应消息。纠删端在接收到每个预存储成功的数据节点反馈的响应消息时,确认数据成功。
但是,纠删端在获悉预存储成功的数据节点的个数大于预设个数的情况下,由于网络异常等原因,向每个预存储成功的数据节点发送的确认指令可能丢失,导致部分数据节点无法接收到确认指令,进而纠删端接收到的响应消息的个数小于实际应该接收的确认响应的个数,并判定数据存储失败。
此时,已经接收到确认指令的数据节点对应的数据块已经存储成功,无法再回退,未接收到确认指令的数据节点对应的数据块处于预存储的状态,导致各个数据节点之间的数据块不一致。并且处于预存储状态的数据块会残留在数据节点上,在下一次数据节点接收到新的预存储的数据块,并根据确认指令对预存储的数据块进行存储时,有可能将数据节点上之前残留的预存储状态的数据块进行存储,导致数据的冗余性降低或者破环数据的正确性。
针对上述由于网络异常等原因造成部分数据节点无法接收到确认指令,而以预存储的状态残留在数据节点上的问题,本实施提供一种数据存储方法,通过在纠删端确认至少n个第一数据界定预存储数据块成功时,向每个第一数据节点均发送存储指令,以使第一数据节点王成自身的数据块的存储,并在每个第一数据节点均完成自身的数据块的存储时,确认数据成功。从而保证了每个数据节点上的数据块的状态一致。
请参考图1,图1示出了本实施例提供的数据存储方法的应用场景示意图。包括:纠删端、分别与纠删端通信的客户端和N个数据节点,且任意两个数据节点之间建立有通信连接。
客户端用于将用户输入的待存储数据发送至纠删端,并接收纠删端返回的数据存储成功或数据存储失败的消息。客户端可以是安装在手机、平板电脑、笔记本电脑或服务器上的应用程序。
纠删端可以是部署在电子设备上的应用程序,用于接收客户端发送的待存储数据,并对待存储数据进行处理得到N个数据块,以及将N个数据块发送至N个数据节点进行存储。其中,N个数据块包括:对待存储数据划分得到的n个数据块,以及根据预设纠删规则生成的m个校验块。例如,纠删端将待存储数据划分为N个数据块:C1、C2…CN,并将C1发送至数据节点1、将C2发送至数据节点2…将CN发送至数据节点N。
数据节点1-数据节点N可以是部署在服务器上的应用程序,每台服务器均部署一个数据节点,用于存储纠删端发送的数据块。
请参考图2,图2示出了本实施例提供的一种电子设备100的方框示意图,电子设备100中部署有纠删端。电子设备100可以是,但不限于,手机、平板电脑、笔记本电脑、服务器或其它具有处理能力的电子设备,也可以是通用计算机或特殊用途的计算机。电子设备100包括存储器101、处理器102及总线103。该存储器101和处理器102通过总线103连接,例如,磁盘、ROM、或RAM,或其任意组合。示例性地,电子设备100还可以包括存储在ROM、RAM、或其他类型的非暂时性存储介质、或其任意组合中的程序指令。根据这些程序指令可以实现本发明的方法。
存储器101用于存储程序,例如纠删端,纠删端中包括数据存储装置200。数据存储装置200包括至少一个可以软件或固件(firmware)的形式存储于存储器101中的软件功能模块,处理器102在接收到执行指令后,执行所述程序以实现本实施例中的数据存储方法。
其中,存储器101可以是,但不限于,随机存取存储器(Random Access Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-OnlyMemory,PROM),可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-Only Memory,EEPROM)等。
处理器102可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,本实施例中的数据存储方法的各步骤可以通过处理器102中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器102可以是通用处理器,包括中央处理器(CentralProcessing Unit,CPU)、微控制单元(Microcontroller Unit,MCU)、复杂可编程逻辑器件(Complex Programmable Logic Device,CPLD)、现场可编程门阵列(Field ProgrammableGate Array,FPGA)、嵌入式ARM等芯片。
为了便于说明,在电子设备100中仅描述了一个处理器。然而,应当注意,本发明中的电子设备100还可以包括多个处理器,因此本发明中描述的一个处理器执行的步骤也可以由多个处理器联合执行或单独执行。例如,若电子设备100的处理器执行步骤A和步骤B,则应该理解,步骤A和步骤B也可以由两个不同的处理器共同执行或者在一个处理器中单独执行。例如,第一处理器执行步骤A,第二处理器执行步骤B,或者第一处理器和第二处理器共同执行步骤A和B。
上述内容的基础上,对本实施例提供的数据存储方法进行介绍,数据存储方法应用于纠删端。请参考图3,图3示出了本实施例提供的数据存储方法的流程示意图,该方法包括以下步骤:
S110,分别将N个数据块发送至N个数据节点进行预存储,一个数据块对应一个数据节点。
在本实施例中,纠删端预先存储有N个数据块,N个数据块包括n个原始数据块和m个校验数据块。
n个原始数据块是纠删端对客户端设备发送的待存储数据进行划分得到的,m个校验数据块是根据预设纠删规则对n个原始数据块进行编码得到的。
例如,将待存储数据块X划分为两个原始数据块C1和C2,再对原始数据块进行纠删编码得到一个校验数据块C3=C1+C2,纠删比n:m=2:1。然后将C1、C2和C3分别发送至数据节点1、数据节点2和数据节点3进行预存储。
S120,在至少n个第一数据节点预存储数据块成功时,向每个第一数据节点均发送存储指令,存储指令用于指示第一数据节点完成自身的数据块的存储,其中,第一数据节点为N个数据节点中预存储数据块成功的数据节点。
在本实施例中,自身的数据块是指第一数据节点预存储的数据块。
每个数据节点在接收到数据块并进行预存储之后,会向纠删端反馈预存储消息,预存储消息包括预存储成功或者预存储失败。纠删端根据接收到的每个预存储消息,判断预存储数据块成功的数据节点的个数。
由于,若待存储数据存储成功,用户读取待存储数据时,纠删端只需从n个数据节点读取n个数据块,再通过预设纠删解码规则,得到n个原始数据块,进而得到待存储数据。
例如,原始数据块为C1和C2,校验数据块为C3=C1+C2,分别将三个数据块存储至数据节点,在用户读取待存储数据时,纠删端从三个数据节点中任意读取两个数据块,C1和C3,通过解下列方程组:
得到C1=C1,C2=C3-C1,然后纠删端根据C1和C2还原出待存储数据,并反馈给用户。
因此,纠删端只需确认至少n个数据节点存储数据块成功,再对预存储成功的数据节点进行存储处理即可。
存储指令用于指示第一数据节点完成自身的数据块的存储是指,第一数据节点根据存储指令将自身的数据块由预存储状态变为存储状态。
可以理解,数据块为预存储状态时,第一数据节点可以根据纠删端的指令对数据块进行存储、回退或者删除操作,数据块为存储状态时,第一数据节点无法对数据块进行删除操作,但无法进行回退,当用户在客户端发起读数据请求时,纠删端可以从第一数据节点中读取处于存储状态的数据块。
S130,在每个第一数据节点均完成自身的数据块的存储时,确认数据存储成功。
在本实施例中,在纠删端确认每个第一数据节点均完成自身的数据块的存储时,即每个第一数据节点对应的数据块均为存储状态时,确认数据存储成功,纠删端向客户端反馈数据存储成功消息,以提示用户数据存储成功。
相对于现有技术,本实施例提供的数据存储方法通过在确定至少n个第一数据节点预存储成功后,向每个第一数据节点均发送存储指令,以使第一数据节点王成自身的数据块的存储,并在每个第一数据节点均完成自身的数据块的存储时,确认数据成功。从而保证了每个数据节点上的数据块的状态一致。
可选的,任意两个数据节点之间建立有通信连接;每个数据块均包括状态标识和版本号,版本号表征当次数据存储操作的序号。
其中,状态标识包括无状态或存储状态,状态标识为无状态表征数据块为预存储状态,状态标识为存储状态表征数据块为存储状态。
版本号表征当次数据存储操作的序号,例如,在存储待存储数据i时,根据待存储数据i生成N个数据块,每个数据块的版本号均为1。待存储数据i存储成功之后,对待存储数据j进行存储,纠删端根据待存储数据j生成N个数据块,每个数据块的版本号均为2。
纠删端在将存储指令发送给每个第一数据节点之后,第一数据节点可以按照下述方式完成自身的数据块的存储。
第一数据节点在预设时间内实时判断是否接收到存储指令。
若是,则第一数据节点将自身的数据块的状态标识由无状态修改为存储状态,以完成自身的数据块的存储,并反馈响应消息至纠删端。
若否,则第一数据节点获取每个第一数据块的第一版本号和第一状态标识,并根据每个第一版本号和每个第一状态标识对自身的数据块进行处理,以完成自身的数据块的存储,其中,一个第一数据块对应一个第一数据节点预存储的数据块。
在本实施例中,预设时间是技术人员根据实验进行标定的。
请参考图4,以纠删端将数据块Ci发送至数据节点i进行存储为例,对数据存储的过程进行说明。纠删端将数据块i发送至数据节点i完成存储的过程包括以下四个步骤:①纠删端将数据块Ci发送至数据节点i进行预存储;②数据节点i反馈预存储响应;③纠删端接收到数据节点i反馈的存储响应之后,发送存储指令至数据节点i;④数据节点i在完成数据块Ci的存储之后,反馈响应消息至纠删端。
理想情况下,在纠删端向每个第一数据节点发送存储指令之后,每个第一数据节点均能在预设时间内接收到存储指令,则每个第一数据节点均将自身的数据块的第一状态标识由无状态修改为存储状态,以将数据块的由预存储状态变为存储状态,完成自身的数据块的存储,并反馈响应消息至纠删端,纠删端会接收到每个第一数据节点发送的响应消息。
但是,在第一数据节点接收存储指令和反馈响应消息的过程中,网络可能出现异常,例如,断网或者网络延迟等,导致部分第一数据节点无法在预设时间内接收到存储指令,即图4中的过程③失败;或者,导致部分第一数据节点反馈的响应消息丢失,即图4中的过程④失败。这两种情况均会导致纠删端无法接收到每个响应消息。
针对部分第一数据节点过程③失败的情况,传统技术中,纠删端接收到的响应消息的个数小于第一数据节点的个数,进而判定数据存储失败。并且,第一数据节点上的数据块既有预存储状态,也有存储状态,导致第一数据节点上的数据块的状态不一致。
并且,由于未接收到响应消息的第一数据节点上的数据块是预存储状态,可能会永远残留在第一数据节点上,在下一次存储新的数据时,残留的数据块可能会影响数据的冗余性,甚至导致数据存储错误。
因此,针对现有技术中存在的问题,本实施例提供的数据存储方法针对在预设时间内未接收到存储指令的第一数据节点,会获取每个第一数据块的第一版本号和第一状态标识,并根据每个第一版本号和每个第一状态标识对自身的数据块进行处理,以完成自身的数据块的存储。从而将未接收到存储指令的第一数据节点预存储的数据块由预存储状态变为存储状态,保证各个第一数据节点上的数据块的一致性。
此外,纠删端无需在接收到每个第一数据节点发送的响应消息时,才确定数据存储成功,纠删端只需在接收到至少一个第一数据节点发送的响应消息时,即可判断数据存储成功。
因此,第一数据节点可以按照下述方式根据每个第一版本号和每个第一状态标识对自身的数据块进行处理,以完成自身的数据块的存储:
第一步,第一数据节点确定第一状态标识为存储状态的任意一个第一数据块的目标版本号。
第二步,若目标数据块的版本号与目标版本号相同,则第一数据节点将目标数据块的状态标识由无状态修改为存储状态,以完成目标数据块的存储,其中,目标数据块为第一数据节点自身的数据块。
在本实施例中,一般来说,由于网络异常导致每个第一数据节点均未接收到存储指令的概率极低,因此,在纠删端未发生故障,正常发送存储指令的情况下,存在至少一个第一状态标识为存储状态的第一数据块。
未接收到存储指令的第一数据节点根据第一状态标识未存储状态的第一数据块的版本号,确定将目标数据块的状态标识由无状态修改为存储状态。
若纠删端在发送存储指令至各个数据节点之前发生故障,各个数据节点均无法接收到存储指令,此时,每个数据节点通过获取每个数据节点的数据块的状态标识,在确定每个状态标识均为无状态时,将自身的数据块删除。从而,保证了数据块不会被误存储,也不会残留在数据节点上。同时,纠删端在回复正常之后,不会接收到任何一个响应消息,判定数据存储失败。
可选的,请参考图5,以纠删端将数据块Cj发送至数据节点j进行存储为例对纠删端进行回退处理的过程进行说明。
纠删端在分别将N个数据块发送至N个数据节点之后,每个数据节点对数据块进行预存储,并反馈预存储响应至纠删端。若纠删端接收到的预存储响应的个数小于n,则判断数据存储失败,并向客户端反馈存储失败消息。此时,纠删端需要向每个数据节点发送回退指令,以使每个数据节点将自身的数据块回退至纠删端,以避免数据残留在数据节点上,对下一次数据存储造成影响。
其中,纠删端接收到的预存储响应的个数小于n可能会出现以下两种情况。
第一种,预存储数据块成功的数据节点的个数小于n。
第二种,预存储数据块成功的数据节点的个数大于或等于n,但是由于网络异常等原因,部分数据节点反馈的预存储响应丢失,即图4中的过程②失败,导致纠删端接收到的预存储响应的个数小于n。
针对第二种情况,由于网络异常等原因,部分数据节点可能无法接收到回退指令,即图5中的过程⑤失败,或者,数据接收到回退指令,数据块回退失败导致数据块回退失败,即图5中的过程⑥失败,使得数据块残留在数据节点上。此时根据回退失败的数据节点的个数的不同,可能出现以下几种情况。
第一种,回退失败的数据节点个数大于或等于n,即有大于或等于n个数据块残留在数据节点上,此时,残留的数据可能会被当做正确数据处理。
第二种,回退失败的数据节点个数小于n且大于或等于m,在下次存储新的数据时,残留的数据块可能会被当做该次数据存储时的生成的数据块,而被误存储。导致该数据存储成功后,有小于n且大于或等于m个数据块是错误数据块,进而导致用户在读取数据时,纠删端无法根据数据节点上的数据块解码得到原始数据块,导致数据读取失败。
第三种,回退失败的数据节点个数小于m,在下次存储新的数据时,残留的数据块可能会被当做该次数据存储时的生成的数据块,而被误存储。从而降低数据的冗余性。
因此,为了解决上述数据块回退失败,残留在数据节点上的问题,在图3的基础上,请参考图6,在步骤S110之后,还可以包括下述与步骤S120和步骤S130并列的步骤S111。
S111,在p个第一数据节点预存储数据块成功时,向每个数据节点均发送回退指令,回退指令用于指示数据节点将自身的数据块回退至纠删端、以及在自身的数据块回退失败时将其删除,其中,p小于n。
在本实施例中,数据块回退失败包括数据节点未接收到回退指令,或者,数据接收到回退指令,由于网络异常等原因,数据块回退失败。
可选的,数据节点可以通过下述方法在自身的数据块回退失败时将其删除。
第一步,数据节点在自身的数据块回退失败时,获取每个所述数据节点对应的数据块的第二状态标识。
第二步,若每个第二状态标识均为无状态,则数据节点将自身的数据块删除。
在本实施例中,数据节点在预设时间内实时判断是否接收到回退指令,若否,则获取每个数据节点对应的数据块的状态标识。
若每个数据块的状态标识均为无状态,则将自身的数据块删除。
若数据节点在预设时间内接收到回退指令,但回退失败,则获取每个数据节点对应的数据块的状态标识。
若每个数据块的状态标识均为无状态,则将自身的数据块删除。
可选的,在图6的基础上,请参考图7,在步骤S120之后,数据存储方法还包括下述步骤S122-S124。
S122,在预设时间内,判断是否接收到至少一个第一数据节点返回的响应消息。
在本实施例中,从纠删端发送存储指令的时刻开始,在预设时间内,判断是否接收到至少一个第一数据节点返回的响应消息。
S123,若在预设时间内,接收到至少一个第一数据节点返回的响应消息,则确定每个第一数据节点均完成自身的数据块的存储。
在本实施例中,若纠删端在预设时间内,接收到至少一个第一数据节点返回的响应消息,则确认每个第一数据节点均完成自身的数据块的存储,并确认数据存储成功。
S124,若在预设时间内,未接收到任意一个第一数据节点返回的响应消息,则确认数据存储失败。
在本实施例中,纠删端未接收到任意一个第一数据节点返回的响应消息,表征纠删端在想每个第一数据节点发送存储指令之前发生异常,每个数据节点在预设时间内没有接收到存储指令,则会根据其他每个数据节点对应的数据块的状态标识,删除自身的数据块。
请继续参考图4,在纠删端在向每个第一数据节点均发送存储指令之后,纠删端可能发生故障,导致无法接收到任何一个第一数据节点反馈的响应消息,也无法向客户端反馈数据存储成功或数据存储失败的消息,导致用户无法得知数据存储是否成功。
因此,为了解决上述纠删端在向每个第一数据节点均发送存储指令之后,纠删端可能发生故障,导致纠删端无法想客户端反馈数据存储失败或数据存储成功的消息的问题,电子设备100还部署有至少一个从纠删端,从纠删端和纠删端具有相同的功能。
因此,请继续参考图7,在步骤S122之前,数据存储方法还包括下述步骤S121。
步骤S121,若纠删端发生异常,则将任意一个从纠删端作为纠删端,以使纠删端接收每个响应消息。
在本实施例中,若在第一数据节点反馈响应消息之后,纠删端还未恢复,则第一数据节点会重复发送响应消息,直至纠删端接收到响应消息。
与现有技术相比,本实施例具有以下有益效果:
首先,本实施例提供的数据存储方法,通过在确定至少n个第一数据节点预存储成功后,向每个第一数据节点均发送存储指令,以使第一数据节点王成自身的数据块的存储,并在每个第一数据节点均完成自身的数据块的存储时,确认数据成功。从而解决了现有技术中,由于网络异常等原因,导致部分第一数据节点未接收到存储指令,使得各个数据节点上的数据块的状态不一致,且纠删端判断数据存储失败的问题。
其次,本实施例提供的数据存储方法,通过在各个数据块上增加版本号,当数据节点上存在状态标识为无状态的数据块时,数据节点可以根据其他数据节点对应的数据块的装填标识和版本号,对数据块进行存储或者删除,以保证各个数据节点之间的数据块的状态和版本号的一致性,以及保证数据节点存储的数据块与上层待存储数据的一致性。
第三,本实施例提供的数据存储方法,能够解决由于网络异常等原因导致的数据块残留在数据节点上的问题,避免残留数据影响数据冗余性。
第四,对于纠删端发生故障,而导致存储消息无法发送至各个数据节点的情况,各个未接收到存储指令的数据节点可以通过其他数据节点对应的数据块的版本号和状态标识将自身的数据块删除,而不会将数据块误存储。
最后,本实施例提供的数据存储方法在各个异常情况发生时,保证数据节点的数据块的一致性的开销很小,且数据块的版本号存储占用很小,只需占用几个字节。
请参考图8,图8示出了本实施例提供的数据存储装置200的方框示意图。数据存储装置200应用于纠删端,纠删端分别与N个数据节点建立有通信连接,纠删端预先存储有N个数据块,N个数据块包括n个原始数据块,且n小于N;该装置包括:预存储模块201,回退模块202,存储模块203,检测模块204和确认模块205。
预存储模块201,用于分别将N个数据块发送至N个数据节点进行预存储,一个数据块对应一个数据节点。
存储模块203,用于在至少n个第一数据节点预存储数据块成功时,向每个第一数据节点均发送存储指令,存储指令用于指示第一数据节点完成自身的数据块的存储,其中,第一数据节点为N个数据节点中预存储数据块成功的数据节点。
确认模块205,用于在每个第一数据节点均完成自身的数据块的存储时,确认数据存储成功。
可选的,回退模块202,用于在p个第一数据节点预存储数据块成功时,向每个数据节点均发送回退指令,回退指令用于指示数据节点将自身的数据块回退至纠删端、以及在数据块回退失败时将其删除,其中,p小于n。
可选的,检测模块204,用于:
在所述预设时间内,判断是否接收到至少一个第一数据节点返回的响应消息;
若是,则确定每个第一数据节点均完成自身的数据块的存储;
若否,则确认数据存储失败。
可选的,所述纠删端部署于电子设备,所述电子设备还部署有至少一个从纠删端。
检测模块204还用于若纠删端发生异常,则将任意一个从纠删端作为纠删端,以使纠删端接收每个响应消息。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的数据存储装置200的具体工作过程。可以参考前述方法实施例中的对应过程,在此不再赘述。
本实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器102执行时实现上述实施例揭示的数据存储方法。
综上所述,本发明实施例提供的一种数据存储方法、装置、电子设备及存储介质。方法包括:首先,分别将N个所述数据块发送至N个所述数据节点进行预存储;然后,在至少n个第一数据节点预存储所述数据块成功时,向每个第一数据节点均发送存储指令,存储指令用于指示第一数据节点完成自身的数据块的存储;并在每个第一数据节点均完成自身的数据块的存储时,确认数据存储成功。通过先将数据块发送至数据节点进行预存储,再确认至少n个数据块预存储成功之后,再发送存储指令至存储数据块成功的数据节点,以使数据节点对数据块进行存储,能够解决现有技术中将实际数据存储成功误判为数据存储失败的问题,提高数据存储的效率。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (10)
1.一种数据存储方法,其特征在于,应用于纠删端,所述纠删端分别与N个数据节点建立有通信连接,所述纠删端预先存储有N个数据块,所述N个数据块包括n个原始数据块,且n小于N;所述方法包括:
分别将N个所述数据块发送至N个所述数据节点进行预存储,一个所述数据块对应一个所述数据节点;
在至少n个第一数据节点预存储所述数据块成功时,向每个所述第一数据节点均发送存储指令,所述存储指令用于指示所述第一数据节点完成自身的数据块的存储,其中,所述第一数据节点为N个所述数据节点中预存储所述数据块成功的数据节点;
在每个所述第一数据节点均完成自身的数据块的存储时,确认数据存储成功。
2.根据权利要求1所述的方法,其特征在于,任意两个所述数据节点之间建立有通信连接;每个所述数据块均包括状态标识和版本号,所述版本号表征当次数据存储操作的序号;
所述第一数据节点完成自身的数据块的存储,包括:
所述第一数据节点在预设时间内实时判断是否接收到所述存储指令;
若是,则所述第一数据节点将自身的数据块的状态标识由无状态修改为存储状态,以完成自身的数据块的存储,并反馈响应消息至所述纠删端;
若否,则所述第一数据节点获取每个第一数据块的第一版本号和第一状态标识,并根据每个所述第一版本号和每个所述第一状态标识对自身的数据块进行处理,以完成自身的数据块的存储,其中,一个所述第一数据块对应一个所述第一数据节点预存储的数据块。
3.根据权利要求2所述的方法,其特征在于,所述第一数据节点根据每个所述第一版本号和每个所述第一状态标识对自身的数据块进行处理,以完成自身的数据块的存储,包括:
所述第一数据节点确定所述第一状态标识为存储状态的任意一个所述第一数据块的目标版本号;
若目标数据块的版本号与所述目标版本号相同,则所述第一数据节点将所述目标数据块的状态标识由无状态修改为存储状态,以完成所述目标数据块的存储,其中,所述目标数据块为所述第一数据节点自身的数据块。
4.根据权利要求1所述的方法,其特征在于,在所述分别将N个所述数据块发送至N个所述数据节点进行预存储的步骤之后,所述方法还包括:
在p个所述第一数据节点预存储数据块成功时,向每个所述数据节点均发送回退指令,所述回退指令用于指示所述数据节点将自身的数据块回退至所述纠删端、以及在所述自身的数据块回退失败时将其删除,其中,p小于n。
5.根据权利要求4所述的方法,其特征在于,任意两个所述数据节点之间建立有通信连接;
所述数据节点在所述自身的数据块回退失败时将其删除,包括:
所述数据节点在自身的数据块回退失败时,获取每个所述数据节点对应的数据块的第二状态标识;
若每个所述第二状态标识均为无状态,则所述数据节点将自身的数据块删除。
6.根据权利要求1所述的方法,其特征在于,在所述向每个所述第一数据节点均发送存储指令的步骤之后,所述方法还包括:
在预设时间内,判断是否接收到至少一个所述第一数据节点返回的响应消息;
若是,则确定每个所述第一数据节点均完成自身的数据块的存储;
若否,则确认数据存储失败。
7.根据权利要求6所述的方法,其特征在于,所述纠删端部署于电子设备,所述电子设备还部署有至少一个从纠删端;
在所述预设时间内,判断是否接收到至少一个所述第一数据节点返回的响应消息的步骤之前,所述方法还包括:
若所述纠删端发生异常,则将任意一个所述从纠删端作为所述纠删端,以使所述纠删端接收每个所述响应消息。
8.一种数据存储装置,其特征在于,应用于纠删端,所述纠删端分别与N个数据节点建立有通信连接,所述纠删端预先存储有N个数据块,所述N个数据块包括n个原始数据块,且n小于N;所述装置包括:
预存储模块,用于分别将N个所述数据块发送至N个所述数据节点进行预存储,一个所述数据块对应一个所述数据节点;
存储模块,用于在至少n个第一数据节点预存储所述数据块成功时,向每个所述第一数据节点均发送存储指令,所述存储指令用于指示所述第一数据节点完成自身的数据块的存储,其中,所述第一数据节点为N个所述数据节点中预存储所述数据块成功的数据节点;
确认模块,用于在每个所述第一数据节点均完成自身的数据块的存储时,确认数据存储成功。
9.一种电子设备,其特征在于,所述电子设备包括:
一个或多个处理器;
存储器,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如权利要求1-7中任一项所述的数据存储方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1-7中任一项所述的数据存储方法。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202210475295.2A CN114860167B (zh) | 2022-04-29 | 2022-04-29 | 数据存储方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202210475295.2A CN114860167B (zh) | 2022-04-29 | 2022-04-29 | 数据存储方法、装置、电子设备及存储介质 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| CN114860167A true CN114860167A (zh) | 2022-08-05 |
| CN114860167B CN114860167B (zh) | 2024-11-12 |
Family
ID=82636362
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN202210475295.2A Active CN114860167B (zh) | 2022-04-29 | 2022-04-29 | 数据存储方法、装置、电子设备及存储介质 |
Country Status (1)
| Country | Link |
|---|---|
| CN (1) | CN114860167B (zh) |
Citations (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CA2896123A1 (en) * | 2012-12-28 | 2014-07-03 | Huawei Technologies Co., Ltd. | Caching method for distributed storage system, a lock server node, and a lock client node |
| CN105095013A (zh) * | 2015-06-04 | 2015-11-25 | 华为技术有限公司 | 数据存储方法、恢复方法、相关装置以及系统 |
| WO2017113276A1 (zh) * | 2015-12-31 | 2017-07-06 | 华为技术有限公司 | 分布式存储系统中的数据重建的方法、装置和系统 |
| CN107544744A (zh) * | 2016-06-27 | 2018-01-05 | 中兴通讯股份有限公司 | 一种系统数据的动态构建方法、装置及终端 |
| CN111666043A (zh) * | 2017-11-03 | 2020-09-15 | 华为技术有限公司 | 一种数据存储方法及设备 |
| CN111818124A (zh) * | 2020-05-29 | 2020-10-23 | 平安科技(深圳)有限公司 | 数据存储方法、装置、电子设备及介质 |
| CN113515531A (zh) * | 2021-05-08 | 2021-10-19 | 重庆紫光华山智安科技有限公司 | 数据访问方法、装置、客户端及存储介质 |
-
2022
- 2022-04-29 CN CN202210475295.2A patent/CN114860167B/zh active Active
Patent Citations (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CA2896123A1 (en) * | 2012-12-28 | 2014-07-03 | Huawei Technologies Co., Ltd. | Caching method for distributed storage system, a lock server node, and a lock client node |
| CN105095013A (zh) * | 2015-06-04 | 2015-11-25 | 华为技术有限公司 | 数据存储方法、恢复方法、相关装置以及系统 |
| WO2017113276A1 (zh) * | 2015-12-31 | 2017-07-06 | 华为技术有限公司 | 分布式存储系统中的数据重建的方法、装置和系统 |
| CN107544744A (zh) * | 2016-06-27 | 2018-01-05 | 中兴通讯股份有限公司 | 一种系统数据的动态构建方法、装置及终端 |
| CN111666043A (zh) * | 2017-11-03 | 2020-09-15 | 华为技术有限公司 | 一种数据存储方法及设备 |
| CN111818124A (zh) * | 2020-05-29 | 2020-10-23 | 平安科技(深圳)有限公司 | 数据存储方法、装置、电子设备及介质 |
| CN113515531A (zh) * | 2021-05-08 | 2021-10-19 | 重庆紫光华山智安科技有限公司 | 数据访问方法、装置、客户端及存储介质 |
Also Published As
| Publication number | Publication date |
|---|---|
| CN114860167B (zh) | 2024-11-12 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN111666162B (zh) | 分布式消息传输方法、装置、计算机设备及存储介质 | |
| CN111880740A (zh) | 数据处理方法、装置、计算机系统及可读存储介质 | |
| CN112714158B (zh) | 事务处理方法、中继网络、跨链网关、系统、介质和设备 | |
| CN114172894A (zh) | 数据传输方法、装置、服务器和计算机设备 | |
| CN103338118A (zh) | 一种通信网络连接方法及装置 | |
| WO2021068919A1 (zh) | 基于pbft算法改进的单节点异常主动恢复方法、系统、设备和介质 | |
| CN108418859B (zh) | 写数据的方法和装置 | |
| CN111722946A (zh) | 分布式事务处理方法、装置、计算机设备及可读存储介质 | |
| CN111241172A (zh) | 一种数据存储方法、装置、终端及计算机可读介质 | |
| CN114500323B (zh) | 通信状态的检测方法、主站、从站及可读存储介质 | |
| CN112751782B (zh) | 基于多活数据中心的流量切换方法、装置、设备及介质 | |
| CN108228789A (zh) | 从节点触发的同步异常恢复方法及装置 | |
| CN110413686B (zh) | 一种数据写入方法、装置、设备及存储介质 | |
| CN110737548A (zh) | 数据请求方法和服务器 | |
| CN114860167A (zh) | 数据存储方法、装置、电子设备及存储介质 | |
| CN111367934A (zh) | 数据一致性的检验方法、装置、服务器和介质 | |
| CN113542260B (zh) | 一种基于分发方式的仓库用语音传输方法 | |
| CN108241616B (zh) | 消息推送方法和装置 | |
| CN114416284A (zh) | 分布式作业系统控制方法、装置、设备、介质及程序产品 | |
| CN110489208B (zh) | 虚拟机配置参数核查方法、系统、计算机设备和存储介质 | |
| CN113271337A (zh) | 一种计算机消息订阅方法和装置 | |
| CN111030870A (zh) | 一种服务配置更新方法及装置 | |
| CN112214466B (zh) | 分布式集群系统及数据写入方法、电子设备、存储装置 | |
| CN107704557B (zh) | 操作互斥数据的处理方法、装置、计算机设备和存储介质 | |
| CN113051008A (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 |