CN111198662A - 一种数据存储方法、装置和计算机可读存储介质 - Google Patents
一种数据存储方法、装置和计算机可读存储介质 Download PDFInfo
- Publication number
- CN111198662A CN111198662A CN202010004352.XA CN202010004352A CN111198662A CN 111198662 A CN111198662 A CN 111198662A CN 202010004352 A CN202010004352 A CN 202010004352A CN 111198662 A CN111198662 A CN 111198662A
- Authority
- CN
- China
- Prior art keywords
- data
- node
- nodes
- slave
- request
- 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; 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/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
-
- 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/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]
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
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
本发明实施例公开了一种数据存储方法、装置和计算机可读存储介质;本发明实施例在从节点接收终端发送的数据写入请求后,该数据写入请求携带写入数据,从节点根据所述数据写入请求,从主节点中获取写入数据的数据编号,从节点将写入数据和数据编号作为同步数据发送至分布式数据***的其他节点,并接收其他节点发送的反馈信息,从节点根据所述反馈信息,确定成功接收到同步数据的其他节点的第一节点数量,从节点基于所述第一节点数量,对写入数据进行存储;该方案可以大大提升数据存储的效率。
Description
技术领域
本发明涉及通信技术领域,具体涉及一种数据存储方法、装置和计算机可读存储介质。
背景技术
近年来,随着大数据技术的飞速发展,单一的数据库或者服务节点已经无法支撑业务和数据的增长,因而分布式数据***开始广泛应用,现有的分布式数据***大部分采用单主类的数据处理方式,其中单主类数据处理方式为在分布式数据***中存在一个主节点,主节点负责数据的写入并同步给其他节点。
在对现有技术的研究和实践过程中,本发明的发明人发现对于单主类数据处理方式只允许主节点处理数据写入,当需要处理的数据较多时,会造成主节点出现数据积压等情况,因此,会大大降低数据存储的效率。
发明内容
本发明实施例提供一种数据存储方法、装置和计算机可读存储介质。可以提高数据存储的效率。
一种数据存储方法,包括:
所述从节点接收终端发送的数据写入请求,所述数据写入请求携带写入数据,所述数据写入请求用于将所述写入数据写入至所述分布式数据***的节点;
所述从节点根据所述数据写入请求,从所述主节点中获取所述写入数据的数据编号,所述数据编号为所述写入数据在所述分布式数据***中的顺序标识;
所述从节点将所述写入数据和数据编号作为同步数据发送至所述分布式数据***的其他节点,并接收所述其他节点发送的反馈信息;
所述从节点根据所述反馈信息,确定成功接收到所述同步数据的其他节点的第一节点数量;
所述从节点基于所述第一节点数量,对所述写入数据进行存储。
相应的,本发明实施例提供一种数据存储装置,包括:
接收单元,用于所述从节点接收终端发送的数据写入请求,所述数据写入请求携带写入数据,所述数据写入请求用于将所述写入数据写入至所述分布式数据***的节点;
获取单元,用于所述从节点根据所述数据写入请求,从所述主节点中获取所述写入数据的数据编号,所述数据编号为所述写入数据在所述分布式数据***中的顺序标识;
发送单元,用于所述从节点将所述写入数据和数据编号作为同步数据发送至所述分布式数据***的其他节点,并接收所述其他节点发送的反馈信息;
确定单元,用于所述从节点根据所述反馈信息,确定成功接收到所述同步数据的其他节点的第一节点数量;
存储单元,用于所述从节点基于所述第一节点数量,对所述写入数据进行存储。
可选的,在一些实施例中,所述存储单元,具体可以用于当所述第一节点数量超过所有节点的数量的半数时,所述从节点将所述同步数据写入所述从节点的本地数据库,并向所述其他节点发送数据保存请求,以将所述同步数据保存至所述其他节点的本地数据库;当所述第一节点数量未超过所有节点的数量的半数时,所述从节点将所述写入数据丢弃,并向所述其他节点发送数据丢弃请求,以将所述其他节点接收到的所述同步数据丢弃。
可选的,在一些实施例中,所述获取单元,具体可以用于根据所述数据写入请求,所述从节点生成数据同步请求;所述从节点将所述数据同步请求发送至所述主节点;当所述主节点返回所述数据编号时,所述从节点接收所述数据编号;当所述主节点未返回所述数据编号时,所述从节点返回数据写入失败的提示信息至所述终端。
可选的,在一些实施例中,所述获取单元,具体可以用于所述从节点向所述主节点发送测试请求,所述测试请求用于测试所述主节点的状态;所述从节点接收所述测试请求的反馈信息,并根据所述反馈信息确定所述主节点是否处于正常状态;当所述反馈信息为所述主节点为异常状态时,所述从节点确定所述主节点处于异常状态,所述从节点触发新主节点确定流程;所述从节点将所述数据同步请求发送至所述主节点,包括:当所述主节点处于正常状态时,所述从节点将所述同步数据请求发送至所述主节点。
可选的,在一些实施例中,所述获取单元,具体可以用于所述从节点向其他从节点发送选择新主节点的投票请求;所述从节点接收所述其他从节点针对所述投票请求答复的投票结果,所述投票结果包括同意发出投票请求的从节点为新主节点和不同意发出投票请求的从节点成为新主节点;当投票结果为同意发出投票请求的从节点为新主节点的数量超过从节点总数的一半时,所述从节点当选为新主节点。
可选的,在一些实施例中,所述获取单元,具体可以用于所述其他从节点接收到所述从节点发送的所述投票请求;所述其他从节点将所述第一数据编号与所述其他从节点的当前最大的第二数据编号进行对比;当所述第二数据编号未超过所述第一数据编号时,所述其他从节点向所述从节点发送同意发出投票请求的从节点为新主节点的投票结果;当所述第二数据编号超过所述第一数据编号时,所述其他从节点向所述从节点发送不同意发出投票请求的从节点为新主节点的投票结果。
可选的,在一些实施例中,所述获取单元,具体可以用于当第二数据编号未超所述第一数据编号,且在预设时间间隔内所述其他从节点接收到至少两个投票请求时,所述其他从节点向第一次发送所述投票请求的从节点发送同意发出投票请求的从节点为新主节点的投票结果。
可选的,在一些实施例中,所述数据存储装置还可以包括第一故障恢复单元,应用于从节点,具体可以用于所述从节点向所述主节点发送数据检测请求,所述数据检测请求用于获取所述主节点的数据编号中最大的目标数据编号;所述从节点接收到所述主节点发送的所述目标数据编号;当所述目标数据编号超过所述从节点的数据编号中最大的当前数据编号时,所述从节点确定自身数据存在缺失,并从所述主节点中获取所述从节点缺失的数据。
可选的,在一些实施例中,所述第一故障单元,具体可以用于所述从节点确定自身数据存在缺失;所述从节点向所述主节点发送第一数据获取请求,所述第一数据获取请求携带所述从节点的当前数据编号;所述从节点接收所述主节点根据所述当前数据编号发送的所述从节点缺失的数据。
可选的,在一些实施例中,所述数据存储装置还可以包括第二故障恢复单元,应用于主节点,具体可以用于所述主节点接收到所述数据获取请求;所述主节点将所述数据获取请求中的当前数据编号与所述目标编号进行对比;所述主节点根据对比结果确定所述从节点缺失的数据;所述主节点向所述从节点发送所述从节点缺失的数据。
可选的,在一些实施例中,所述第二故障恢复单元,具体可以用于当所述主节点接收到数据写入请求时,所述主节点将所述同步数据发送至所述其他节点;当其他节点中的其他主节点接收到所述同步数据时,所述主节点确定其他主节点的身份,并获取所述其他主节点的身份标识。
可选的,在一些实施例中,所述第二故障恢复单元,具体可以用于当所述主节点接收到所述其他主节点发送的同步数据时,所述主节点确定所述其他主节点的身份,并获取所述其他主节点的身份标识。
可选的,在一些实施例中,所述第二故障恢复单元,具体可以用于所述主节点根据所述其他主节点的身份标识,向所述其他主节点发送所述数据比较请求,所述数据比较请求用于获取其他主节点的数据编号最大的第一目标数据编号;所述主节点接收到所述其他主节点发送的第一目标数据编号;当所述第一目标数据编号超过所述主节点的数据编号中最大的第二目标数据编号时,所述主节点变为从节点,并从所述其他主节点中获取所述主节点缺失的数据。
可选的,在一些实施例中,所述第二故障恢复单元,具体可以用于所述主节点确定自身存在数据缺失;所述主节点向所述其他主节点发送第二数据获取请求,所述第二数据获取请求携带所述主节点的第二目标数据编号;所述主节点接收所述其他主节点根据所述第二目标数据编号发送的主节点缺失的数据。
可选的,在一些实施例中,数据存储装置还可以包括写入单元,所述写入单元具体应用于主节点的数据写入,所述写入单元,具体可以用于所述主节点接收所述终端发送的数据写入请求;所述主节点根据所述数据写入请求生成所述写入数据的数据编号;所述主节点将所述写入数据和数据编号作为同步数据发送至所述分布式数据***的从节点,并接收所述从节点发送的反馈信息;所述主节点根据所述反馈信息,确定成功接收到所述同步数据的从节点的第二节点数量;当所述第二节点数量超过所述分布式数据***的节点总数的一半时,所述主节点将写入数据存储至主节点的本地数据库,并向所述从节点发送所述数据保存请求,以将所述同步数据保存至从节点的本地数据库;当所述第二节点数量未超过所述分布式数据***的节点总数的一半时,所述主节点将所述写入数据丢弃,并向所述从节点发送所述数据丢弃请求,以使得所述从节点将所述同步数据丢弃。
此外,本发明实施例还提供一种电子设备,包括处理器和存储器,所述存储器存储有应用程序,所述处理器用于运行所述存储器内的应用程序实现本发明实施例提供的数据存储方法。
此外,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有多条指令,所述指令适于处理器进行加载,以执行本发明实施例所提供的任一种数据存储方法中的步骤。
本发明实施例在从节点接收终端发送的数据写入请求后,该数据写入请求携带写入数据,数据写入请求用于将写入数据写入至分布式数据***的节点中,从节点根据所述数据写入请求,从主节点中获取写入数据的数据编号,该数据编号为写入数据在分布式数据***中的顺序标识,从节点将写入数据和数据编号作为同步数据发送至分布式数据***的其他节点,并接收其他节点发送的反馈信息,从节点根据所述反馈信息,确定成功接收到同步数据的其他节点的第一节点数量,从节点基于所述第一节点数量,对写入数据进行存储;由于该方案可以采用从节点接收写入数据,并采用主节点对写入数据进行编号,从节点将数据编号和写入数据作为同步数据同步至分布式数据***的其他节点,采用了多个节点接收写入数据,并运行主节点来编号,既可以多个的节点来接收更多的写入数据,还可以保障写入数据的有序同步,因此,可以大大提升数据存储的效率。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的数据存储方法的场景示意图;
图2是本发明实施例提供的数据存储方法的流程示意图;
图3是本发明实施例提供的从节点获取数据编号的流程示意图;
图4是本发明实施例提供的测试主节点的状态的流程示意图;
图5是本发明实施例提供的确定新主节点的流程示意图;
图6是本发明实施例提供的写入数据同步的流程示意图;
图7是本发明实施例提供的单一节点故障恢复的流程示意图;
图8是本发明实施例提供的脑裂故障中原始主节点在第一子节点集群的示意图;
图9是本发明实施例提供的脑裂故障中原始主节点在第二子节点集群的示意图;
图10是本发明实施例提供的数据存储的另一种流程示意图;
图11是本发明实施例提供的数据存储装置的结构示意图;
图12是本发明实施例提供的数据存储装置的获取单元的结构示意图;
图13是本发明实施例提供的数据存储装置的另一结构示意图;
图14是本发明实施例提供的电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供一种数据处理方法、装置和计算机可读存储介质。其中,该数据处理装置可以集成在电子设备中,该电子设备可以是服务器,也可以是终端等设备,其中,该数据处理装置主要用于分布式数据***的数据写入操作,可以为分布式数据***中的主节点和从节点的数据写入操作装置,可以为一个节点集群,节点集群中可以包括主节点和从节点。
例如,参见图1,以数据处理装置集成在电子设备中,且用于分布式数据***中从节点的数据写入为例,从节点接收终端发送的数据写入请求,该数据写入请求携带写入数据,从节点根据数据写入请求,从主节点中获取写入数据的数据编号,从节点将写入数据和数据编号作为同步数据发送至分布式数据***的其他节点,并接受其他节点发送的反馈信息,从节点根据反馈信息,确定成功接受到同步数据的其他节点的节点数量,从节点基于节点数量,对写入数据进行存储。
可选的,当写入数据从分布式数据***的主节点进行写入时,主节点接收终端发送的数据写入请求,主节点根据该数据写入请求生成写入数据的数据编号,主节点将写入数据和数据编号作为同步数据发送至分布式数据***的从节点,并接受从节点发送的反馈信息,主节点根据反馈信息,确定成功接受到同步数据的从节点的节点数量,主节点基于节点数量,对写入数据进行存储。
以下分别进行详细说明。需要说明的是,以下实施例的描述顺序不作为对实施例优选顺序的限定。
本实施例将从数据存储装置的角度进行描述,该数据存储装置具体可以集成在电子设备中,该电子设备可以是服务器,也可以是终端等设备;其中,该终端可以包括平板电脑、笔记本电脑、以及个人计算(PC,Personal Computer)等设备。
一种数据存储方法,应用于分布式数据***的从节点,包括:
从节点接收终端发送的数据写入请求,该数据写入请求携带写入数据,从节点根据数据写入请求,从主节点中获取写入数据的数据编号,从节点将写入数据和数据编号作为同步数据发送至分布式数据***的其他节点,并接受其他节点发送的反馈信息,从节点根据反馈信息,确定成功接受到同步数据的其他节点的节点数量,从节点基于节点数量,对写入数据进行存储。
如图2所示,该数据存储方法的具体流程如下:
101、从节点接收终端发送的数据写入请求。
其中,数据写入请求携带写入数据,比如,可以携带视频、音频、图像和文本等数据,数据写入请求主要用于将写入数据写入至分布式数据***的节点中。
例如,从节点接收终端发送的数据写入请求的方式可以有多种,比如,终端直接可以该节点的地址将数据写入请求发送至分布式数据***的从节点,从节点接收到该数据写入请求。终端还可以将写入数据请求中携带的写入数据存储至第三方数据库,并在写入数据请求中将写入数据存储至第三方数据库的存储地址发送至从节点,从节点接收到该数据写入请求后,在该数据写入请求中获取写入数据存储在第三方数据库中的存储地址,根据存储地址,在第三方数据库中获取到该写入数据,还可以在获取到该写入数据后,向终端发送提示信息,用于提示终端从节点成功获取到写入数据。
102、从节点根据数据写入请求,从主节点中获取写入数据的数据编号。
其中,数据编号(TransactionIdentity document,TxID)为写入数据在分布式数据***中的顺序标识,比如,当分布式数据***的节点接收到第一个写入数据时,主节点可以对该数据编号为TxID1,当分布式数据***节点接收到第二个写入数据时,主节点可以对该数据编号为TxID2,当分布式数据***节点接收到第三个写入数据时,主节点可以对该数据编号为TxID3,依次类推,该数据编号在分布式数据***中主要是标识接收写入数据的顺序。
例如,从节点根据数据写入请求,从节点获取写入数据的数据编号的过程可以如图3所示,具体如下:
S1、根据数据写入请求,从节点生成数据同步请求。
其中,数据同步请求用于向主节点获取写入数据对应的数据编号。
例如,从节点根据数据写入请求,生成数据同步请求,比如,从节点接收到数据写入请求后,根据接收到的数据写入请求生成数据同步请求,并在该数据同步请求中添加写入数据的相关信息,譬如,写入数据的名称、接收时间、类型和/或数据大小等信息。
S2、从节点将数据同步请求发送至主节点。
例如,从节点获取分布式数据***中主节点的地址,根据该地址,从节点将数据同步请求发送至主节点。
S3、当主节点返回数据编号时,从节点接收到数据编号。
例如,当主节点成功接收到数据同步请求后,主节点根据数据同步请求中写入数据的相关信息,对写入数据进行编号,生成该写入数据的数据编号,并将写入数据的数据编号发送至从节点,从节点接收到该数据编号。
S4、当主节点未返回数据编号时,从节点返回数据写入失败的提示信息至终端。
例如,当主节点未成功接收到数据同步请求,或者接收到数据同步请求后,未返回写入数据的数据编号时,导致从节点未接收到写入数据的编号,此时,从节点返回数据写入失败的提示信息至终端,并把写入数据丢弃。
可选的,当从节点将数据同步请求发送至主节点之前,还可以测试主节点的状态,当主节点处于正常状态时,才将数据同步请求发送至主节点,当主节点处于异常状态时,在分布式数据***中需要重选选择新主节点。因此,在步骤“从节点将数据同步请求发送至主节点”之前,数据存储方法还可以包括:
从节点向主节点发送测试请求,该测试请求用于测试主节点的状态,从节点接收测试请求的反馈信息,并根据反馈信息确定主节点是否处于正常状态,当主节点处于正常状态时,从节点将同步数据请求发送至主节点。
例如,测试主节点是否处于正常状态,如图4所示,从节点向主节点发送测试请求,当主节点接收到该测试请求后,会延迟一段时间(Td)再发送反馈信息,因此,可以根据接收到反馈信息的时间来判断主节点的状态,当在Td内未接收到主节点发送的反馈信息,此时分布式数据***就可以生成主节点处于异常状态的反馈信息,当在Td时间内接收到主节点发送的反馈信息时,就可以表示此时主节点处于正常状态,从节点接收到该测试请求的反馈信息,当反馈信息为主节点处于正常状态,表明此时主节点依然正常状态,主节点和从节点的主从关系依然处于正常状态。当主节点处于正常状态,表明分布式数据***中主从关系依然还存在,从节点可以将数据同步请求发送至主节点。
其中,从节点测试主节点是否正常,即从节点与主节点的主从关系是否正常,这个测试的过程,可以是在每一个接收到数据写入请求后,向主节点发送同步数据之前进行测试,还可以设定一个时间间隔,每隔一个时间间隔,从节点就发送一个测试请求,用来测试此时主节点的状态,即时此时并没有接收到数据写入请求,比如,可以设定每隔1分钟,从节点就向主节点发送测试请求。
可选的,当从节点接收到的反馈信息为主节点处于异常状态时,从节点确定主节点处于异常状态。当主节点处于异常状态时,从节点触发新主节点确定流程,比如,当主节点处于异常状态时,从节点触发在分布式数据***中确定新主节点的流程,该流程用于在分布式数据***中选出新主节点,而这个新主节点的候选对象就是触发该流程的从节点。其中,主节点处于异常状态是需要多次进行确认的,比如,当给主节点发送测试请求,主节点在预设时间间隔内未接收到反馈信息或者反馈信息未主节点未接收时,从节点需要在预设时间间隔外再发一次测试请求,如果该测试请求的反馈信息仍然为主节点处于异常或者主节点未接收到该测试请求,才能真正确认主节点存在异常,如果第二次测试请求的反馈信息为主节点处于正常,则判断主节点仍然处于正常状态,当判断主节点处于正常状态时,继续向主节点发送数据同步请求。
可选的,当从节点确定主节点处于异常状态时,需要在分布式数据***中确定新主节点,此时,分布式数据***进入新主节点确定流程,从节点的工作过程如图5所示,具体如下:
从节点向分布式数据***中其他从节点发送选择新主节点的投票请求,其中,投票请求携带从节点的数据编号中最大的第一数据编号,从节点接收其他从节点针对该投票请求答复的投票结果,投票结果可以存在两种情况,一种是同意发出投票请求的从节点为新主节点,另一种是不同意发出投票请求的从节点为新主节点。当从节点接收到同意发出投票请求的从节点为新主节点的投票结果的数量超过分布式数据***的从节点总数的一半时,从节点就自动当选为主节点。在当选为主节点后,从节点变为主节点,自身就可以生成写入数据的数据编号,并进行写入数据存储的下一个步骤了。当从节点接收到同意发出投票请求的从节点为新主节点的投票结果的数量未超过分布式数据***的从节点总数的一半时,此时,由从节点发起的选择新主节点的流程选主失败,从节点向发送数据写入请求的终端返回写入数据失败的提示信息。
可选的,在选主流程过程中,其他从节点在接收到投票请求后,将投票请求中携带的从节点的第一数据编号与自身数据编号中最大的第二数据编号进行对比。当第二数据编号未超过第一数据编号时,其他从节点向从节点发送同意发出投票请求的从节点为新主节点的投票结果,比如,当第一数据编号为TxID5,第二数据编号为TxID4,其他从节点发现自身的第二数据编号未超过从节点的第一数据编号,此时,其他从节点就会向从节点发送同意发出投票请求的从节点为新主节点的投票结果。当其他从节点自身数据编号中最大的第二数据编号超过第一数据编号时,其他从节点向从节点发送不同意发出投票请求的从节点为新主节点的投票结果,比如,第二数据编号为TxID5,第一数据编号为TxID4时,其他从节点向从节点发送不同意发出投票请求的从节点为新主节点的投票结果。
可选的,当第二数据编号未超过第一数据编号,且在预设时间间隔内其他从节点接收到两个不同从节点发送的投票请求时,在这种情况下,就需要根据接收到投票请求的次数来向不同投票请求对应的从节点发送投票结果,一般来说,其他从节点会向第一发送投票请求的从节点发送同意发出投票请求的从节点为新主节点的投票结果。比如,比如,当两个不同从节点的第一数据编号都为TxID5,第二数据编号为TxID4,在一个时间间隔内,其他从节点向第一次发送投票请求给自身的从节点发送同意发出投票请求的从节点为新主节点的投票结果,譬如,在五分钟内,其他从节点接收到了两个投票请求,两个投票请求分别对应第一从节点和第二从节点,但是其他从节点第一个接收到的第一从节点发送的投票请求,此时第一从节点的第一数据编号超过自身的第二数据编号,其他从节点给第一从节点发送同意第一从节点为新主节点的投票结果,虽然,第二从节点的第一数据编号同样大于自身的第二数据编号,但是其他从节点依然要给第二从节点发送不同意第二从节点为新主节点的投票结果。假设第一从节点发送投票请求,其他从节点发送同意第一从节点为新主节点的投票结果。超过预设时间间隔后,比如,预设时间间隔为十分钟,但是在第十一分钟,其他从节点又接收到第二从节点发送的投票请求,当第二从节点的第一数据编号超过其他从节点自身的第二数据编号时,其他从节点仍然可以对第二从节点的投票请求发送同意第二从节点为新主节点的投票结果。
103、从节点将写入数据和数据编号作为同步数据发送至分布式数据***的其他节点,并接收其他节点发送的反馈信息。
例如,从节点将写入数据和数据编号作为同步数据发送至分布式数据***的其他节点,并接收其他节点发送的反馈信息。例如,以分布式数据***存在一个主节点和两个从节点,分别为从节点A和从节点B为例,从节点A将写入数据和写入数据的数据编号,譬如TxID2,作为同步数据,发送至主节点和从节点B,当主节点接收到该同步数据时,向从节点A发送成功接收到同步数据的反馈信息,当主节点未接收到该同步数据时,主节点无法向从节点A发送反馈信息,同理,从节点B只有在成功接收到同步数据,才会给从节点A发送反馈信息。当主节点或从节点B发送反馈信息至从节点A时,从节点接收该反馈信息。
104、从节点根据反馈信息,确定成功接收到同步数据的其他节点的第一节点数量。
例如,从节点根据反馈信息,确定成功接收到同步数据的其他节点的节点数量,比如,还是以分布式数据***存在一个主节点和两个从节点,分别为从节点A和从节点B,从节点A发送同步数据为例,当主节点成功接收到同步数据时,主节点会向从节点A发送反馈信息,因此,当从节点A接收到主节点的反馈信息,就可以确定主节点成功接收到同步数据,同理,对于从节点B也一样,因此,只需要根据接收到了多少反馈信息,就可以确定成功接收到同步数据的节点数量,譬如,成功接收到主节点和从节点B的反馈信息,就可以确定成功接收到同步数据的第一节点数量为两个,又譬如,成功接收到主节点或从节点B两个节点中的任一个发送的反馈信息,就可以确定成功接收到同步数据的第一节点数量为一个。
105、从节点基于第一节点数量,对写入数据进行存储。
例如,从节点将成功接收到同步数据的其他节点的第一节点数量与分布式数据***的节点总数的一半进行比较,当第一节点数量超过分布式数据***的节点总数的一半时,比如,分布式数据***存在一个主节点和三个从节点时,那当成功接收到同步数据的其他节点的节点数量超过两个时,譬如,从节点A发送同步数据,成功接收到同步数据的其他节点为主节点、从节点B和从节点C时,此时,从节点将同步数据写入从节点A的本地数据库,同时向主节点、从节点B和从节点C发送数据保存请求,当主节点、从节点B和从节点C接收到数据保存请求时,主节点、从节点B和从节点C分别将同步数据存储至自身的本地数据库,以完成写入数据在分布式数据***的同步。当第一节点数量未超过分布式数据***节点总数的一半时,比如,分布式数据***存在一个主节点和三个从节点时,那当成功接收到同步数据的其他节点的节点数量未超过两个时,譬如,从节点A发送同步数据,成功接收到同步数据的其他节点为主节点、从节点B时,此时,从节点将写入数据丢弃,并向其他节点发送数据丢弃请求,其他节点接收到数据丢弃请求时,其他节点中接收到了同步数据的节点将同步数据丢弃。
可选的,当分布式数据***的主节点接收到数据写入请求时,对写入数据的同步过程,如图6所示,具体如下:
主节点接收终端发送的数据写入请求,主节点根据数据写入请求生成该写入数据的数据编号,主节点将写入数据和数据编号作为同步数据发送至分布式数据***的从节点,并接收从节点发送的反馈信息,主节点根据接收到的反馈信息,确定成功接收到同步数据的从节点的第二节点数量,当第二节点数量超过分布式数据***的节点总数的一半时,主节点将写入数据存储至主节点的本地数据库,并向从节点发送数据保存请求,以将同步数据保存至从节点的本地数据库。
例如,主节点接收终端发送的数据写入请求,主节点根据数据写入请求,生成写入数据请求中的写入数据的数据编号,将写入数据和数据编号作为同步数据发送至分布式数据***的从节点,当从节点接收到同步数据时,从节点就向主节点发送成功接收到同步数据的反馈信息,主节点根据反馈信息,确定成功接收到同步数据的从节点的第二节点数量,当第二节点数量超过分布式数据***节点总数的一半时,比如,分布式数据***的节点总数为6,当接收到同步数据的从节点的第二节点数量超过3个时,譬如,第二节点数量为4时,主节点将写入数据存储(写入)至主节点的本地数据库,并向从节点发送数据保存请求,从节点接收到数据保存请求后,接收到同步数据的从节点将同步数据保存至从节点的本地数据库。
可选的,为了解决分布式数据***中的节点故障恢复的问题,可以对从节点和主节点进行设定,以满足分布式数据***的使用,具体可以为单一节点的故障恢复和脑裂(网络隔离)故障恢复中从节点和主节点进行设定。
(1)应对单一节点故障恢复
例如,应对单一节点故障恢复的过程如图7所示,从节点可以预设时间间隔向主节点发送数据检测请求,数据检测请求用于获取主节点的数据编号中最大的目标数据编号。当该从节点出现故障,不能发送数据检测请求,但是一旦该从节点故障被恢复,在故障恢复之后,立刻向主节点发送数据检测请求,当主节点处于正常状态时,从节点就可以接收到主节点发送的目标数据编号,从节点将目标数据编号与自身数据编号中最大的当前数据编号进行对比。当目标数据编号超过当前数据编号时,比如,目标数据编号为TxID5,当前数据编号为TxID4时,从节点确定自身数据存在缺失,并从主节点红获取缺失的数据。比如,当从节点确认自身数据存在缺失时,从节点向主节点发送数据获取请求,数据获取请求携带从节点的当前数据编号,从节点接收主节点根据当前数据编号发送的缺失的数据,并将缺失的数据存储至本地数据库。当目标数据编号未超过当前数据编号时,从节点确定自身未存在缺失数据,此时,从节点处于正常状态,可以接收同步数据,也可以接收写入数据请求。
可选的,在这种情况下,主节点接收数据获取请求,主节点将数据获取请求中的当前数据编号与自身的目标数据编号进行对比,主节点根据对比结果,确定从节点缺失的数据,比如,当目标数据编号为TxID5,当前数据编号为TxID4时,主节点确定从节点缺失的数据为TxID5对应的写入数据,主节点将TxID5对应的写入数据作为从节点缺失的数据发送至从节点。
可选的,当分布式数据***中原始主节点出现故障时,从节点会再次选出分布式数据***内的新主节点,当原始主节点自身的数据编号小于新主节点的最大数据编号时,原始主节点此时作为从节点向新主节点发送数据获取请求,重复从节点故障恢复的过程即可。
(2)应对脑裂(网络隔离)故障恢复
其中,脑裂故障为分布式数据***的节点集群中的节点出现网络隔离,比如,一个节点集群***为两个数量不等的子节点集群,两个子节点集群的节点之间不能互相通信。此时,又存在两种情况,第一种情况为分布式数据***中原始主节点在从节点数量超过从节点总数的一半的第一子节点集群里,第二种情况为分布式数据***中原始主节点在从节点数量未超过从节点总数的一半的第二子节点集群。
C1、当原始主节点在第一子节点集群,分布式数据***的故障恢复过程。
例如,当原始主节点在第一子节点集群时,如图8所示,由于第一子节点集群中从节点的数量超过了全部从节点的一半,第一子节点集群中当从节点或者主节点接收到数据写入请求时,在第一子节点集群中,由于主节点和从节点都处于正常状态,因此,可以将数据写入请求中的写入数据进行同步,在这种情况下,整个分布式数据***是可以正常运行的。但是,第二子节点集群中的从节点4或从节点5接收到数据写入请求时,从节点4或从节点5向主节点发送数据同步请求,但是由于出现脑裂故障,从节点4或从节点5无法从主节点获取到写入数据的数据编号,从节点4或从节点5确定主节点处于异常状态,因此,从节点4或从节点5会触发新主节点确定流程,但是从节点4或从节点5触发新主节点确定流程后,只有一个从节点会接收到投票请求,并返回投票结果,就算那一个从节点发送同意发出投票请求的从节点,也会因为同意的投票结果数量未超过从节点总数的一半而确定新主节点失败,进而导致数据写入失败。当这种情况的网络隔离故障被恢复时,第二子节点集群的从节点4或者从节点5可以接收到除了对方以外的从节点发送的同步数据时,从节点4或从节点5就可以知道主节点已处于正常状态,在这种情况下,从节点4或从节点5就会向主节点发送数据检测请求,来判断自身是否存在数据缺失,当接收到主节点发送的目标数据编号后,将目标数据编号与自身最大的当前数据编号进行对比,当目标数据编号超过当前数据编号时,确定自身存在数据缺失,并向主节点发送自身的当前数据编号,主节点在接收到从节点4或从节点5发送的当前数据编号后,确定从节点4或从节点5缺失的数据,并将缺失的数据发送至从节点4或从节点5。
其中,在这种情况下,正在需要故障恢复的是第二子节点集群中的从节点。
C2、当原始主节点在第二子节点集群,分布式数据***的故障恢复过程。
例如,当原始主节点在第二子节点集群时,如图9所示,当出现网络隔离故障,第一子节点集群中的从节点接收到数据写入请求时,比如从节点1接收到终端发送的数据写入请求,此时从节点向主节点发送数据同步请求,结果由于网络隔离的故障,会导致从节点1确定主节点处于异常状态,因此,从节点1会触发在第一子节点集群中确定新主节点的流程,从节点1向从节点2-4发送投票请求,从节点1接收从节点2-4发送的投票结果,当投票结果中存在三个同意发出投票请求的从节点1为新主节点时,从节点1当选为第一子节点集群中的新主节点。而在第二子节点集群中,当主节点或者从节点5接收到数据写入请求时,在向其他节点发送同步数据时,导致成功接收同步数据的其他节点数量不会超过节点总数的一半,使得数据写入失败,因此,第二子节点集群中不能正常工作。
当网络故障恢复后,在分布式数据***中,就会存在两个主节点,一个是原始主节点,另一个是从节点变成新主节点。在分布式数据***中,只有在原始主节点和新主节点存在同步数据的发送和接收的过程,原始主节点和新主节点就会感知到对方的存在。
原始主节点和新主节点感知到对方的存在主要有两种情况:
第一种是原始主节点或者新主节点中任意一个主节点接收到数据写入请求,比如,以原始主节点接收到数据写入请求时,原始主节点生成写入数据的数据编号,将写入数据和写入数据的数据编号作为同步数据发送给分布式数据***的其他节点,当将同步数据发送至新主节点,且新主节点成功接收到同步数据时,原始主节点就可以确定新主节点的身份,当原始主节点确定新主节点的身份后,获取新主节点的身份标识。
第二种是原始主节点或新主节点中任意一个节点接收到对方发送的同步数据,比如,以原始主节点接收到新主节点发送的同步数据为例,原始主节点可以确定发送同步数据的新主节点的身份,并获取新主节点的身份标识。
当主节点确定分布式数据***中到还存在其他主节点时,主节点根据获取的其他主节点的身份标识,向其他主节点发送数据比较请求,该数据比较请求用于获取其他主节点的数据编号中最大的第一目标数据编号。主节点接收到其他主节点发送的第一目标数据编号,并将第一目标数据编号与自身数据编号中最大的第二目标数据编号进行对比,当第一目标数据编号超过自身的第二目标数据编号时,主节点变为从节点,并从其他主节点中获取主节点缺失的数据。比如,当第一目标数据编号为TxID5,第二目标数据编号为TxID4时,原始主节点就变为从节点,并从新主节点中获取原始主节点缺失的数据。
可选的,主节点获取缺失的数据和从节点获取缺失的数据过程类似,当主节点确定自身存在数据缺失时,其实,此时主节点已经变为从节点,因此,就变成了从节点从另一个主节点处获取缺失的数据。
由以上可知,本实施例在从节点接收终端发送的数据写入请求后,该数据写入请求携带写入数据,数据写入请求用于将写入数据写入至分布式数据***的节点中,从节点根据所述数据写入请求,从主节点中获取写入数据的数据编号,该数据编号为写入数据在分布式数据***中的顺序标识,从节点将写入数据和数据编号作为同步数据发送至分布式数据***的其他节点,并接收其他节点发送的反馈信息,从节点根据所述反馈信息,确定成功接收到同步数据的其他节点的第一节点数量,从节点基于所述第一节点数量,对写入数据进行存储;由于该方案可以采用从节点接收写入数据,并采用主节点对写入数据进行编号,从节点将数据编号和写入数据作为同步数据同步至分布式数据***的其他节点,采用了多个节点接收写入数据,并运用主节点来编号,既可以多个的节点来接收更多的写入数据,还可以保障写入数据的有序同步,因此,可以大大提升数据存储的效率。
根据上面实施例所描述的方法,以下将举例作进一步详细说明。
在本实施例中,将以该数据存储装置具体集成在电子设备,电子设备可以包括主节点服务器和从节点服务器为例进行说明。
如图10所示,一种数据存储方法,具体流程如下:
201、从节点服务器接收终端发送的数据写入请求。
例如,终端直接可以该节点的地址将数据写入请求发送至分布式数据***的从节点服务器,从节点服务器接收到该数据写入请求。终端还可以将写入数据请求中携带的写入数据存储至第三方数据库,并在写入数据请求中将写入数据存储至第三方数据库的存储地址发送至从节点服务器,从节点服务器接收到该数据写入请求后,在该数据写入请求中获取写入数据存储在第三方数据库中的存储地址,根据存储地址,在第三方数据库中获取到该写入数据,还可以在获取到该写入数据后,向终端发送提示信息,用于提示终端从节点服务器成功获取到写入数据。
202、根据数据写入请求,从节点服务器生成数据同步请求。
例如,从节点服务器接收到数据写入请求后,根据接收到的数据写入请求生成数据同步请求,并在该数据同步请求中添加写入数据的相关信息,譬如,写入数据的名称、接收时间、类型和/或数据大小等信息。
203、从节点服务器将数据同步请求发送至主节点服务器。
例如,从节点服务器获取分布式数据***中主节点服务器的地址,根据该地址,从节点服务器将数据同步请求发送至主节点服务器。
可选的,当从节点服务器将数据同步请求发送至主节点之服务器前,还可以测试主节点服务器的状态,当主节点服务器处于正常状态时,才将数据同步请求发送至主节点,当主节点服务器处于异常状态时,在分布式数据***中需要重选选择新主节点服务器。因此,在步骤“从节点服务器将数据同步请求发送至主节点服务器”之前,数据存储方法还可以包括:
从节点服务器向主节点服务器发送测试请求,该测试请求用于测试主节点服务器的状态,从节点服务器接收测试请求的反馈信息,并根据反馈信息确定主节点服务器是否处于正常状态,当主节点服务器处于正常状态时,从节点服务器将同步数据请求发送至主节点服务器。
例如,测试主节点服务器是否处于正常状态,从节点服务器向主节点服务器发送测试请求,当主节点服务器接收到该测试请求后,会延迟一段时间(Td)再发送反馈信息,因此,可以根据接收到反馈信息的时间来判断主节点服务器的状态,当在Td内未接收到主节点服务器发送的反馈信息,此时分布式数据***就可以生成主节点服务器处于异常状态的反馈信息,当在Td时间内接收到主节点服务器发送的反馈信息时,就可以表示此时主节点服务器处于正常状态,从节点服务器接收到该测试请求的反馈信息,当反馈信息为主节点服务器处于正常状态,表明此时主节点服务器依然正常状态,主节点服务器和从节点服务器的主从关系依然处于正常状态。当主节点服务器处于正常状态,表明分布式数据***中主从关系依然还存在,从节点服务器可以将数据同步请求发送至主节点服务器。
可选的,当从节点服务器接收到的反馈信息为主节点服务器处于异常状态时,从节点服务器确定主节点服务器处于异常状态。当主节点服务器处于异常状态时,从节点服务器触发新主节点服务器确定流程,比如,当主节点服务器处于异常状态时,从节点服务器触发在分布式数据***中确定新主节点服务器的流程,该流程用于在分布式数据***中选出新主节点服务器,而这个新主节点服务器的候选对象就是触发该流程的从节点服务器。其中,主节点服务器处于异常状态是需要多次进行确认的,比如,当给主节点服务器发送测试请求,主节点服务器在预设时间间隔内未接收到反馈信息或者反馈信息未主节点服务器未接收时,从节点服务器需要在预设时间间隔外再发一次测试请求,如果该测试请求的反馈信息仍然为主节点服务器处于异常或者主节点服务器未接收到该测试请求,才能真正确认主节点服务器存在异常,如果第二次测试请求的反馈信息为主节点服务器处于正常,则判断主节点服务器仍然处于正常状态,当判断主节点服务器处于正常状态时,继续向主节点服务器发送数据同步请求。
可选的,当从节点服务器确定主节点服务器处于异常状态时,需要在分布式数据***中确定新主节点服务器,此时,分布式数据***进入新主节点服务器确定流程,从节点服务器为的工作过程具体如下:
从节点服务器向分布式数据***中其他从节点服务器发送选择新主节点服务器的投票请求,其中,投票请求携带从节点服务器的数据编号中最大的第一数据编号,从节点服务器接收其他从节点服务器针对该投票请求答复的投票结果,投票结果可以存在两种情况,一种是同意发出投票请求的从节点服务器为新主节点服务器服务器,另一种是不同意发出投票请求的从节点服务器为新主节点服务器服务器。当从节点服务器接收到同意发出投票请求的从节点服务器为新主节点服务器的投票结果的数量超过分布式数据***的从节点服务器总数的一半时,从节点服务器就自动当选为主节点服务器。在当选为主节点服务器后,从节点服务器变为主节点服务器,自身就可以生成写入数据的数据编号,并进行写入数据存储的下一个步骤了。当从节点服务器接收到同意发出投票请求的从节点服务器为新主节点服务器的投票结果的数量未超过分布式数据***的从节点服务器总数的一半时,此时,由从节点服务器发起的选择新主节点服务器的流程选主失败,从节点服务器向发送数据写入请求的终端返回写入数据失败的提示信息。
可选的,在选主流程过程中,其他从节点服务器在接收到投票请求后,将投票请求中携带的从节点服务器的第一数据编号与自身数据编号中最大的第二数据编号进行对比。当第二数据编号未超过第一数据编号时,其他从节点服务器向从节点服务器发送同意发出投票请求的从节点服务器为新主节点服务器的投票结果,比如,当第一数据编号为TxID5,第二数据编号为TxID4,其他从节点服务器发现自身的第二数据编号未超过从节点服务器的第一数据编号,此时,其他从节点服务器就会向从节点服务器发送同意发出投票请求的从节点服务器为新主节点服务器的投票结果。当其他从节点服务器自身数据编号中最大的第二数据编号超过第一数据编号时,其他从节点服务器向从节点服务器发送不同意发出投票请求的从节点服务器为新主节点服务器的投票结果,比如,第二数据编号为TxID5,第一数据编号为TxID4时,其他从节点服务器向从节点服务器发送不同意发出投票请求的从节点服务器为新主节点服务器的投票结果。
可选的,当第二数据编号未超过第一数据编号,且在预设时间间隔内其他从节点服务器接收到两个不同从节点服务器发送的投票请求时,在这种情况下,就需要根据接收到投票请求的次数来向不同投票请求对应的从节点服务器发送投票结果,一般来说,其他从节点服务器会向第一发送投票请求的从节点服务器发送同意发出投票请求的从节点服务器为新主节点服务器的投票结果。比如,比如,当两个不同从节点服务器的第一数据编号都为TxID5,第二数据编号为TxID4,在一个时间间隔内,其他从节点服务器向第一次发送投票请求给自身的从节点服务器发送同意发出投票请求的从节点服务器为新主节点服务器的投票结果,譬如,在五分钟内,其他从节点服务器接收到了两个投票请求,两个投票请求分别对应第一从节点服务器和第二从节点服务器,但是其他从节点服务器第一个接收到的第一从节点服务器发送的投票请求,此时第一从节点服务器的第一数据编号超过自身的第二数据编号,其他从节点服务器给第一从节点服务器发送同意第一从节点服务器为新主节点服务器的投票结果,虽然,第二从节点服务器的第一数据编号同样大于自身的第二数据编号,但是其他从节点服务器依然要给第二从节点服务器发送不同意第二从节点服务器为新主节点服务器的投票结果。假设第一从节点服务器发送投票请求,其他从节点服务器发送同意第一从节点服务器为新主节点服务器的投票结果。超过预设时间间隔后,比如,预设时间间隔为十分钟,但是在第十一分钟,其他从节点服务器又接收到第二从节点服务器发送的投票请求,当第二从节点服务器的第一数据编号超过其他从节点服务器自身的第二数据编号时,其他从节点服务器仍然可以对第二从节点服务器的投票请求发送同意第二从节点服务器为新主节点服务器的投票结果。
204、当主节点服务器返回数据编号时,从节点服务器接收到数据编号。
例如,当主节点服务器成功接收到数据同步请求后,主节点服务器根据数据同步请求中写入数据的相关信息,对写入数据进行编号,生成该写入数据的数据编号,并将写入数据的数据编号发送至从节点服务器,从节点服务器接收到该数据编号。
205、当主节点服务器未返回数据编号时,从节点服务器返回数据写入失败的提示信息至终端。
例如,当主节点服务器未成功接收到数据同步请求,或者接收到数据同步请求后,未返回写入数据的数据编号时,导致从节点服务器未接收到写入数据的编号,此时,从节点服务器返回数据写入失败的提示信息至终端,并把写入数据丢弃。
206、当从节点服务器接收到数据编号时,从节点服务器将写入数据和数据编号作为同步数据发送至分布式数据***的其他节点服务器,并接收其他节点服务器发送的反馈信息。
例如,以分布式数据***存在一个主节点服务器和两个从节点服务器,分别为主节点服务器、从节点服务器A和从节点服务器B为例,从节点服务器A将写入数据和写入数据的数据编号,譬如TxID2,作为同步数据,发送至主节点服务器和从节点B服务器,当主节点服务器接收到该同步数据时,向从节点服务器A发送成功接收到同步数据的反馈信息,当主节点服务器未接收到该同步数据时,主节点服务器无法向从节点服务器A发送反馈信息,同理,从节点服务器B只有在成功接收到同步数据,才会给从节点服务器A发送反馈信息。当主节点服务器或从节点服务器B发送反馈信息至从节点服务器A时,从节点服务器接收该反馈信息。
207、从节点服务器根据反馈信息,确定成功接收到同步数据的其他节点服务器的第一节点数量。
例如,还是以分布式数据***存在一个主节点服务器和两个从节点服务器,分别为主节点服务器、从节点服务器A和从节点服务器B,从节点服务器A发送同步数据为例,当主节点服务器成功接收到同步数据时,主节点服务器会向从节点服务器A发送反馈信息,因此,当从节点服务器A接收到主节点服务器的反馈信息,就可以确定主节点服务器成功接收到同步数据,同理,对于从节点服务器B也一样,因此,只需要根据接收到了多少反馈信息,就可以确定成功接收到同步数据的节点数量,譬如,成功接收到主节点和从节点B的反馈信息,就可以确定成功接收到同步数据的第一节点数量为两个,又譬如,成功接收到主节点服务器或从节点服务器B两个节点中的任一个发送的反馈信息,就可以确定成功接收到同步数据的第一节点数量为一个。
208、从节点服务器基于第一节点数量,对写入数据进行存储。
例如,从节点服务器将成功接收到同步数据的其他节点服务器的第一节点数量与分布式数据***的节点服务器总数的一半进行比较,当第一节点数量超过分布式数据***的节点服务器总数的一半时,比如,分布式数据***存在一个主节点服务器和三个从节点服务器时,那当成功接收到同步数据的其他节点服务器的节点数量超过两个时,譬如,从节点服务器A发送同步数据,成功接收到同步数据的其他节点服务器为主节点服务器、从节点服务器B和从节点服务器C时,此时,从节点服务器A将同步数据写入从节点服务器A的本地数据库,同时向主节点服务器、从节点服务器B和从节点服务器C发送数据保存请求,当主节点服务器、从节点服务器B和从节点服务器C接收到数据保存请求时,主节点服务器、从节点服务器B和从节点服务器C分别将同步数据存储至自身的本地数据库,以完成写入数据在分布式数据***的同步。当第一节点数量未超过分布式数据***节点服务器总数的一半时,比如,分布式数据***存在一个主节点服务器和三个从节点服务器时,那当成功接收到同步数据的其他节点服务器的节点数量未超过两个时,譬如,从节点服务器A发送同步数据,成功接收到同步数据的其他节点服务器为主节点服务器、从节点服务器B时,此时,从节点服务器将写入数据丢弃,并向其他节点服务器发送数据丢弃请求,其他节点服务器接收到数据丢弃请求时,其他节点服务器中接收到了同步数据的节点服务器,比如主节点服务器、从节点服务器B将同步数据丢弃。
可选的,当分布式数据***中的主节点服务器接收到数据写入请求时,对写入数据的同步过程,可以如下:
主节点服务器接收终端发送的数据写入请求,主节点服务器根据数据写入请求生成该写入数据的数据编号,主节点服务器将写入数据和数据编号作为同步数据发送至分布式数据***的从节点服务器,并接收从节点服务器发送的反馈信息,主节点服务器根据接收到的反馈信息,确定成功接收到同步数据的从节点服务器的第二节点数量,当第二节点数量超过分布式数据***的节点服务器总数的一半时,主节点服务器将写入数据存储至主节点服务器的本地数据库,并向从节点服务器发送数据保存请求,以将同步数据保存至从节点服务器的本地数据库。
例如,主节点服务器接收终端发送的数据写入请求,主节点服务器根据数据写入请求,生成写入数据请求中的写入数据的数据编号,将写入数据和数据编号作为同步数据发送至分布式数据***的从节点服务器,当从节点服务器接收到同步数据时,从节点服务器就向主节点服务器发送成功接收到同步数据的反馈信息,主节点服务器根据反馈信息,确定成功接收到同步数据的从节点服务器的第二节点数量,当第二节点数量超过分布式数据***节点服务器总数的一半时,比如,分布式数据***的节点总数为6,当接收到同步数据的从节点服务器的第二节点数量超过3个时,譬如,第二节点数量为4时,主节点服务器将写入数据存储(写入)至主节点服务器的本地数据库,并向从节点服务器发送数据保存请求,从节点服务器接收到数据保存请求后,接收到同步数据的从节点服务器将同步数据保存至从节点服务器的本地数据库。
可选的,为了解决分布式数据***中节点服务器出现故障并恢复的问题,可以对主节点服务器和从节点服务器进行设定,以满足分布式数据***的使用。具体可以针对分布式数据***中出现单一节点服务器故障并恢复和脑裂(网络隔离)故障恢复中从节点服务器和主节点服务器进行设定。
(1)处理单一节点服务器的故障恢复
例如,当从节点服务器出现故障并恢复时,从节点服务器可以预设时间间隔向主节点服务器发送数据检测请求,数据检测请求用于获取主节点服务器的数据编号中最大的目标数据编号。当该从节点服务器出现故障,不能发送数据检测请求,但是一旦该从节点服务器故障被恢复,在故障恢复之后,立刻向主节点服务器发送数据检测请求,当主节点服务器处于正常状态时,从节点服务器就可以接收到主节点服务器发送的目标数据编号,从节点服务器将目标数据编号与自身数据编号中最大的当前数据编号进行对比。当目标数据编号超过当前数据编号时,比如,目标数据编号为TxID5,当前数据编号为TxID4时,从节点服务器确定自身数据存在缺失,并从主节点服务器红获取缺失的数据。比如,当从节点服务器确认自身数据存在缺失时,从节点服务器向主节点服务器发送数据获取请求,数据获取请求携带从节点服务器的当前数据编号,从节点服务器接收主节点服务器根据当前数据编号发送的缺失的数据,并将缺失的数据存储至本地数据库。
可选的,在这种情况下,主节点服务器接收数据获取请求,主节点服务器将数据获取请求中的当前数据编号与自身的目标数据编号进行对比,主节点服务器根据对比结果,确定从节点服务器缺失的数据,比如,当目标数据编号为TxID5,当前数据编号为TxID4时,主节点服务器确定从节点服务器缺失的数据为TxID5对应的写入数据,主节点服务器将TxID5对应的写入数据作为从节点服务器缺失的数据发送至从节点服务器。
可选的,当分布式数据***中原始主节点服务器出现故障时,从节点服务器会再次选出分布式数据***内的新主节点服务器,原始主节点服务器此时作为从节点服务器向新主节点服务器发送数据获取请求,重复从节点服务器故障恢复的过程即可。
(2)处理脑裂(网络隔离)的故障恢复
例如,在处理脑裂(网络隔离)的故障恢复时,由于节点服务器集群会***为两个节点数量不等的第一子节点服务集群和第二子节点服务器集群。需要分两种情况来考虑,第一种情况为分布式数据***中原始主节点服务器在从节点数量超过从节点服务器总数的一半的第一子节点服务器集群里,第二种情况为分布式数据***中原始主节点服务器在从节点服务器数量未超过从节点服务器总数的一半的第二子节点服务器集群。
A1、当原始主节点服务器在第一子节点服务器集群,分布式数据***的故障恢复过程。
例如,当原始主节点服务器在第一子节点服务器集群时,由于第一子节点服务器集群中从节点服务器的数量超过了全部从节点服务器的一半,第一子节点服务器集群中当从节点服务器或者主节点服务器接收到数据写入请求时,在第一子节点服务器集群中,由于主节点服务器和从节点服务器都处于正常状态,因此,可以将数据写入请求中的写入数据进行同步,在这种情况下,整个分布式数据***是可以正常运行的。但是,第二子节点服务器集群中的从节点服务器4或从节点服务器5接收到数据写入请求时,从节点服务器4或从节点服务器5向主节点服务器发送数据同步请求,但是由于出现脑裂故障,从节点服务器4或从节点服务器5无法从主节点服务器获取到写入数据的数据编号,从节点服务器4或从节点服务器5确定主节点服务器处于异常状态,因此,从节点服务器4或从节点服务器5会触发新主节点服务器确定流程,但是从节点服务器4或从节点服务器5触发新主节点服务器确定流程后,只有一个从节点服务器会接收到投票请求,并返回投票结果,就算那一个从节点服务器发送同意发出投票请求的从节点服务器,也会因为同意的投票结果数量未超过从节点服务器总数的一半而确定新主节点服务器失败,进而导致数据写入失败。当这种情况的网络隔离故障被恢复时,第二子节点服务器集群的从节点服务器4或者从节点服务器5可以接收到除了对方以外的从节点服务器发送的同步数据时,从节点服务器4或从节点服务器5就可以知道主节点服务器已处于正常状态,在这种情况下,从节点服务器4或从节点服务器5就会向主节点服务器发送数据检测请求,来判断自身是否存在数据缺失,当接收到主节点服务器发送的目标数据编号后,将目标数据编号与自身最大的当前数据编号进行对比,当目标数据编号超过当前数据编号时,确定自身存在数据缺失,并向主节点服务器发送自身的当前数据编号,主节点服务器在接收到从节点服务器4或从节点服务器5发送的当前数据编号后,确定从节点服务器4或从节点服务器5缺失的数据,并将缺失的数据发送至从节点服务器4或从节点服务器5。
其中,在这种情况下,正在需要故障恢复的是第二子节点服务器集群中的从节点服务器。
A2、当原始主节点服务器在第二子节点服务器集群,分布式数据***的故障恢复过程。
例如,当原始主节点服务器在第二子节点集群时,当出现网络隔离故障,第一子节点服务器集群中的从节点服务器接收到数据写入请求时,比如从节点服务器1接收到终端发送的数据写入请求,此时从节点服务器向主节点服务器发送数据同步请求,结果由于网络隔离的故障,会导致从节点服务器1确定主节点服务器处于异常状态,因此,从节点服务器1会触发在第一子节点服务器集群中确定新主节点服务器的流程,从节点服务器1向从节点服务器2-4发送投票请求,从节点服务器1接收从节点服务器2-4发送的投票结果,当投票结果中存在三个同意发出投票请求的从节点服务器1为新主节点服务器时,从节点服务器1当选为第一子节点服务器集群中的新主节点服务器。而在第二子节点集群中,当主节点服务器或者从节点服务器5接收到数据写入请求时,在向其他节点发送同步数据时,导致成功接收同步数据的其他节点数量不会超过节点总数的一半,使得数据写入失败,因此,第二子节点集群中不能正常工作。
当网络故障恢复后,在分布式数据***中,就会存在两个主节点服务器,一个是原始主节点服务器,另一个是从节点服务器变成新主节点服务器。在分布式数据***中,只有在原始主节点服务器和新主节点服务器存在同步数据的发送和接收的过程,原始主节点服务器和新主节点服务器就会感知到对方的存在。
原始主节点服务器和新主节点服务器感知到对方的存在主要有两种情况:
第一种是原始主节点服务器或者新主节点服务器中任意一个主节点服务器接收到数据写入请求,比如,以原始主节点服务器接收到数据写入请求时,原始主节点服务器生成写入数据的数据编号,将写入数据和写入数据的数据编号作为同步数据发送给分布式数据***的其他节点,当将同步数据发送至新主节点服务器,且新主节点服务器成功接收到同步数据时,原始主节点服务器就可以确定新主节点服务器的身份,当原始主节点服务器确定新主节点服务器的身份后,获取新主节点服务器的身份标识。
第二种是原始主节点服务器或新主节点服务器中任意一个节点接收到对方发送的同步数据,比如,以原始主节点服务器接收到新主节点服务器发送的同步数据为例,原始主节点服务器可以确定发送同步数据的新主节点服务器的身份,并获取新主节点服务器的身份标识。
当主节点服务器确定分布式数据***中到还存在其他主节点服务器时,主节点服务器根据获取的其他主节点服务器的身份标识,向其他主节点服务器发送数据比较请求,该数据比较请求用于获取其他主节点服务器的数据编号中最大的第一目标数据编号。主节点服务器接收到其他主节点服务器发送的第一目标数据编号,并将第一目标数据编号与自身数据编号中最大的第二目标数据编号进行对比,当第一目标数据编号超过自身的第二目标数据编号时,主节点服务器变为从节点服务器,并从其他主节点服务器中获取主节点服务器缺失的数据。比如,当第一目标数据编号为TxID5,第二目标数据编号为TxID4时,原始主节点服务器就变为从节点服务器,并从新主节点服务器中获取原始主节点服务器缺失的数据。
可选的,主节点服务器获取缺失的数据和从节点服务器获取缺失的数据过程类似,当主节点服务器确定自身存在数据缺失时,其实,此时主节点服务器已经变为从节点服务器,因此,就变成了从节点服务器从另一个主节点服务器处获取缺失的数据。
由以上可知,本实施例在从节点服务器接收终端发送的数据写入请求后,该数据写入请求携带写入数据,数据写入请求用于将写入数据写入至分布式数据***的节点服务器中,从节点服务器根据所述数据写入请求,从主节点服务器中获取写入数据的数据编号,该数据编号为写入数据在分布式数据***中的顺序标识,从节点服务器将写入数据和数据编号作为同步数据发送至分布式数据***的其他节点服务器,并接收其他节点服务器发送的反馈信息,从节点服务器根据所述反馈信息,确定成功接收到同步数据的其他节点服务器的第一节点数量,从节点服务器基于所述第一节点数量,对写入数据进行存储;由于该方案可以采用从节点服务器接收写入数据,并采用主节点服务器对写入数据进行编号,从节点服务器将数据编号和写入数据作为同步数据同步至分布式数据***的其他节点服务器,采用了多个节点服务器接收写入数据,并运用主节点服务器来编号,既可以多个的节点服务器来接收更多的写入数据,还可以保障写入数据的有序同步,因此,可以大大提升数据存储的效率。
为了更好地实施以上方法,本发明实施例还提供一种数据存储装置,该数据存储装置包括主节点和从节点,可以集成在电子设备,比如服务器等设备中,可以为单个服务器,也可以为多个服务器组成的服务器集群。
例如,如图11所示,该数据存储装置可以包括接收单元301、获取单元302、发送单元303、确定单元304和存储单元305,如下:
(1)接收单元301;
接收单元301,用于从节点接收终端发送的数据写入请求,数据写入请求携带写入数据,数据写入请求用于将写入数据写入至分布式数据***的节点。
例如,接收单元301,具体可以用于终端直接可以该节点的地址将数据写入请求发送至分布式数据***的从节点,从节点接收到该数据写入请求。终端还可以将写入数据请求中携带的写入数据存储至第三方数据库,并在写入数据请求中将写入数据存储至第三方数据库的存储地址发送至从节点,从节点接收到该数据写入请求后,在该数据写入请求中获取写入数据存储在第三方数据库中的存储地址,根据存储地址,在第三方数据库中获取到该写入数据。
(2)获取单元302;
获取单元302,用于从节点根据数据写入请求,从主节点中获取所述写入数据的数据编号。
其中,获取单元302可以包括生成子单元3021、发送子单元3022、接收子单元3023和返回子单元3024,如图12所示,具体如下:
生成子单元3021,用于根据数据写入请求,从节点生成数据同步请求;
发送子单元3022,用于从节点将数据同步请求发送至主节点;
接收子单元3023,用于当主节点返回数据编号时,从节点接收数据编号;
返回子单元3024,用于当主节点未返回数据编号时,从节点返回数据写入失败的提示信息至终端。
例如,根据数据写入请求,生成子单元3021的从节点生成数据同步请求,发送子单元3022的从节点将数据同步请求发送至主节点,当主节点返回数据编号时,接收子单元3023的从节点接收数据编号,当主节点未返回数据编号时,返回子单元3024的从节点返回数据写入失败的提示信息至终端。
(3)发送单元303;
发送单元303,用于从节点将写入数据和数据编号作为同步数据发送至分布式数据***的其他节点,并接收其他节点发送的反馈信息。
例如,发送单元303,具体可以用于节点将写入数据和数据编号作为同步数据发送至分布式数据***的其他节点,当其他节点成功接收到同步数据时,其他节点给从节点发送接收成功的反馈信息,当其他节点未成功接收到同步数据时,其他节点就不返回反馈信息,从节点接收成功接收到同步数据的其他节点发送的反馈信息。
(4)确定单元304,;
确定单元304,用于从节点根据反馈信息,确定成功接收到同步数据的其他节点的第一节点数量。
比如,确定单元304,具体可以用于当接收到其他节点发送的反馈信息时,就可以认定其他节点成功接收到同步数据,因此,只需要分析接收到的反馈信息的数量,就可以确定成功接收到同步数据的其他节点的第一节点数量。
(5)存储单元305;
存储单元305,用于从节点基于第一节点数量,对写入数据进行存储。
例如,存储单元305具体可以用于从节点将成功接收到同步数据的其他节点的第一节点数量与分布式数据***的节点总数的一半进行比较,当第一节点数量超过分布式数据***的节点总数的一半时,从节点将同步数据写入从节点的本地数据库,并向其他节点发送数据保存请求,以将同步数据保存至其他节点的本地数据库;当第一节点数量未超过节点总数的一半时,从节点将写入数据丢弃,并向其他节点发送数据丢弃请求,以将其他节点接收到的同步数据丢弃。
可选的,数据存储装置还可以包括写入单元306,如图13所示,具体如下:
写入单元306,用于主节点接收终端发送的数据写入请求,主节点根据数据写入请求生成写入数据的数据编号,主节点将写入数据和数据编号作为同步数据发送至分布式数据***的从节点,并接收从节点发送的反馈信息,主节点根据反馈信息,确定成功接收到同步数据的从节点的第二节点数量,当第二节点数量超过分布式数据***的节点总数的一半时,主节点将写入数据存储至主节点的本地数据库,并向从节点发送数据保存请求,以将同步数据保存至从节点的本地数据库,当第二节点数量未超过分布式数据***的节点总数的一半时,主节点将写入数据丢弃,并向从节点发送数据丢弃请求,以使得从节点将同步数据丢弃。
具体实施时,以上各个单元可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个单元的具体实施可参见前面的方法实施例,在此不再赘述。
由以上可知,本实施例在接收单元301的从节点接收终端发送的数据写入请求后,该数据写入请求携带写入数据,数据写入请求用于将写入数据写入至分布式数据***的节点中,获取单元302的从节点根据所述数据写入请求,从主节点中获取写入数据的数据编号,该数据编号为写入数据在分布式数据***中的顺序标识,发送单元303的从节点将写入数据和数据编号作为同步数据发送至分布式数据***的其他节点,并接收其他节点发送的反馈信息,确定单元304的从节点根据所述反馈信息,确定成功接收到同步数据的其他节点的第一节点数量,存储单元305的从节点基于所述第一节点数量,对写入数据进行存储;由于该方案可以采用从节点接收写入数据,并采用主节点对写入数据进行编号,从节点将数据编号和写入数据作为同步数据同步至分布式数据***的其他节点,采用了多个节点接收写入数据,并运行主节点来编号,既可以多个的节点来接收更多的写入数据,还可以保障写入数据的有序同步,因此,可以大大提升数据存储的效率。
本发明实施例还提供一种电子设备,如图14所示,其示出了本发明实施例所涉及的电子设备的结构示意图,具体来讲:
该电子设备可以包括一个或者一个以上处理核心的处理器401、一个或一个以上计算机可读存储介质的存储器402、电源403和输入单元404等部件。本领域技术人员可以理解,图14中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
处理器401是该电子设备的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器402内的软件程序和/或模块,以及调用存储在存储器402内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。可选的,处理器401可包括一个或多个处理核心;优选的,处理器401可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作***、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器401中。
存储器402可用于存储软件程序以及模块,处理器401通过运行存储在存储器402的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器402可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据电子设备的使用所创建的数据等。此外,存储器402可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器402还可以包括存储器控制器,以提供处理器401对存储器402的访问。
电子设备还包括给各个部件供电的电源403,优选的,电源403可以通过电源管理***与处理器401逻辑相连,从而通过电源管理***实现管理充电、放电、以及功耗管理等功能。电源403还可以包括一个或一个以上的直流或交流电源、再充电***、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
该电子设备还可包括输入单元404,该输入单元404可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
尽管未示出,电子设备还可以包括显示单元等,在此不再赘述。具体在本实施例中,电子设备中的处理器401会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器402中,并由处理器401来运行存储在存储器402中的应用程序,从而实现各种功能,如下:
从节点接收终端发送的数据写入请求后,该数据写入请求携带写入数据,数据写入请求用于将写入数据写入至分布式数据***的节点中,从节点根据所述数据写入请求,从主节点中获取写入数据的数据编号,该数据编号为写入数据在分布式数据***中的顺序标识,从节点将写入数据和数据编号作为同步数据发送至分布式数据***的其他节点,并接收其他节点发送的反馈信息,从节点根据所述反馈信息,确定成功接收到同步数据的其他节点的第一节点数量,从节点基于所述第一节点数量,对写入数据进行存储
例如,从节点接收终端发送的数据写入请求,根据数据写入请求,从节点生成数据同步请求,从节点将数据同步请求发送至主节点,当主节点返回数据编号时,从节点接收到数据编号,当主节点未返回数据编号时,从节点返回数据写入失败的提示信息至终端。当从节点接收到数据编号时,从节点将写入数据和数据编号作为同步数据发送至分布式数据***的其他节点,并接收其他节点发送的反馈信息,从节点根据反馈信息,确定成功接收到同步数据的其他节点的第一节点数量,当第一节点数量超过节点总数的一半时,从节点将同步数据写入从节点的本地数据库,并向其他节点发送数据保存请求,以将同步数据保存至其他节点的本地数据库,当第一节点数量未超过节点总数的一半时,从节点将写入数据丢弃,并向其他节点发送数据丢弃请求,以将其他节点接收到的同步数据丢弃。
以上各个操作的具体实施可参见前面的实施例,在此不作赘述。
由以上可知,本发明实施例在从节点接收终端发送的数据写入请求后,该数据写入请求携带写入数据,数据写入请求用于将写入数据写入至分布式数据***的节点中,从节点根据所述数据写入请求,从主节点中获取写入数据的数据编号,该数据编号为写入数据在分布式数据***中的顺序标识,从节点将写入数据和数据编号作为同步数据发送至分布式数据***的其他节点,并接收其他节点发送的反馈信息,从节点根据所述反馈信息,确定成功接收到同步数据的其他节点的第一节点数量,从节点基于所述第一节点数量,对写入数据进行存储;由于该方案可以采用从节点接收写入数据,并采用主节点对写入数据进行编号,从节点将数据编号和写入数据作为同步数据同步至分布式数据***的其他节点,采用了多个节点接收写入数据,并运行主节点来编号,既可以多个的节点来接收更多的写入数据,还可以保障写入数据的有序同步,因此,可以大大提升数据存储的效率。
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
为此,本发明实施例提供一种计算机可读存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以执行本发明实施例所提供的任一种数据存储方法中的步骤。例如,该指令可以执行如下步骤:
从节点接收终端发送的数据写入请求后,该数据写入请求携带写入数据,数据写入请求用于将写入数据写入至分布式数据***的节点中,从节点根据所述数据写入请求,从主节点中获取写入数据的数据编号,该数据编号为写入数据在分布式数据***中的顺序标识,从节点将写入数据和数据编号作为同步数据发送至分布式数据***的其他节点,并接收其他节点发送的反馈信息,从节点根据所述反馈信息,确定成功接收到同步数据的其他节点的第一节点数量,从节点基于所述第一节点数量,对写入数据进行存储
例如,从节点接收终端发送的数据写入请求,根据数据写入请求,从节点生成数据同步请求,从节点将数据同步请求发送至主节点,当主节点返回数据编号时,从节点接收到数据编号,当主节点未返回数据编号时,从节点返回数据写入失败的提示信息至终端。当从节点接收到数据编号时,从节点将写入数据和数据编号作为同步数据发送至分布式数据***的其他节点,并接收其他节点发送的反馈信息,从节点根据反馈信息,确定成功接收到同步数据的其他节点的第一节点数量,当第一节点数量超过节点总数的一半时,从节点将同步数据写入从节点的本地数据库,并向其他节点发送数据保存请求,以将同步数据保存至其他节点的本地数据库,当第一节点数量未超过节点总数的一半时,从节点将写入数据丢弃,并向其他节点发送数据丢弃请求,以将其他节点接收到的同步数据丢弃。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
其中,该计算机可读存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。
由于该计算机可读存储介质中所存储的指令,可以执行本发明实施例所提供的任一种数据存储方法中的步骤,因此,可以实现本发明实施例所提供的任一种数据存储方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
以上对本发明实施例所提供的一种数据存储方法、装置和计算机可读存储介质进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本发明的限制。
Claims (15)
1.一种数据存储方法,用于分布式数据***的数据写入操作,其中所述分布式数据***包括一个主节点和至少两个从节点,其特征在于,包括:
所述从节点接收终端发送的数据写入请求,所述数据写入请求携带写入数据,所述数据写入请求用于将所述写入数据写入至所述分布式数据***的节点;
所述从节点根据所述数据写入请求,从所述主节点中获取所述写入数据的数据编号,所述数据编号为所述写入数据在所述分布式数据***中的顺序标识;
所述从节点将所述写入数据和数据编号作为同步数据发送至所述分布式数据***的其他节点,并接收所述其他节点发送的反馈信息;
所述从节点根据所述反馈信息,确定成功接收到所述同步数据的其他节点的第一节点数量;
所述从节点基于所述第一节点数量,对所述写入数据进行存储。
2.根据权利要求1所述的数据存储方法,其特征在于,所述从节点基于所述第一节点数量,对所述写入数据进行存储,包括:
当所述第一节点数量超过节点总数的一半时,所述从节点将所述同步数据写入所述从节点的本地数据库,并向所述其他节点发送数据保存请求,以将所述同步数据保存至所述其他节点的本地数据库;
当所述第一节点数量未超过节点总数的一半时,所述从节点将所述写入数据丢弃,并向所述其他节点发送数据丢弃请求,以将所述其他节点接收到的所述同步数据丢弃。
3.根据权利要求1所述的数据存储方法,其特征在于,所述从节点根据所述数据写入请求,从所述主节点中获取所述写入数据的数据编号,包括:
根据所述数据写入请求,所述从节点生成数据同步请求;
所述从节点将所述数据同步请求发送至所述主节点;
当所述主节点返回所述数据编号时,所述从节点接收所述数据编号;
当所述主节点未返回所述数据编号时,所述从节点返回数据写入失败的提示信息至所述终端。
4.根据权利要求3所述的数据存储方法,其特征在于,所述从节点将所述数据同步请求发送至所述主节点之前,还包括:
所述从节点向所述主节点发送测试请求,所述测试请求用于测试所述主节点的状态;
所述从节点接收所述测试请求的反馈信息,并根据所述反馈信息确定所述主节点是否处于正常状态;
当所述反馈信息为所述主节点为异常状态时,所述从节点确定所述主节点处于异常状态,所述从节点触发新主节点确定流程;
所述从节点将所述数据同步请求发送至所述主节点,包括:当所述主节点处于正常状态时,所述从节点将所述同步数据请求发送至所述主节点。
5.根据权利要求4所述的数据存储方法,其特征在于,所述新主节点确定流程包括:
所述从节点向其他从节点发送选择新主节点的投票请求;
所述从节点接收所述其他从节点针对所述投票请求答复的投票结果,所述投票结果包括同意发出投票请求的从节点为新主节点和不同意发出投票请求的从节点成为新主节点;
当投票结果为同意发出投票请求的从节点为新主节点的数量超过从节点总数的一半时,所述从节点当选为新主节点。
6.根据权利要求5所的数据存储方法,其特征在于,所述投票请求携带所述从节点的数据编号最大的第一数据编号,所述从节点向其他从节点发送选择新主节点的投票请求之后,还包括:
所述其他从节点接收到所述从节点发送的所述投票请求;
所述其他从节点将所述第一数据编号与所述其他从节点的当前最大的第二数据编号进行对比;
当所述第二数据编号未超过所述第一数据编号时,所述其他从节点向所述从节点发送同意发出投票请求的从节点为新主节点的投票结果;
当所述第二数据编号超过所述第一数据编号时,所述其他从节点向所述从节点发送不同意发出投票请求的从节点为新主节点的投票结果。
7.根据权利要求6所述的数据存储方法,其特征在于,还包括:
当第二数据编号未超所述第一数据编号,且在预设时间间隔内所述其他从节点接收到至少两个投票请求时,所述其他从节点向第一次发送所述投票请求的从节点发送同意发出投票请求的从节点为新主节点的投票结果。
8.根据权利要求1所述的数据存储方法,其特征在于,还包括:
所述从节点向所述主节点发送数据检测请求,所述数据检测请求用于获取所述主节点的数据编号中最大的目标数据编号;
所述从节点接收到所述主节点发送的所述目标数据编号;
当所述目标数据编号超过所述从节点的数据编号中最大的当前数据编号时,所述从节点确定自身数据存在缺失,并从所述主节点中获取缺失的数据。
9.根据权利要求8所述的数据存储方法,其特征在于,所述从节点确定自身数据存在缺失,并从所述主节点中获取缺失的数据,包括:
所述从节点确定自身数据存在缺失;
所述从节点向所述主节点发送第一数据获取请求,所述第一数据获取请求携带所述从节点的当前数据编号;
所述从节点接收所述主节点根据所述当前数据编号发送的所述从节点缺失的数据。
10.根据权利要求1所述的数据存储方法,其特征在于,所述分布式数据***包括至少两个主节点时,还包括:
当所述主节点接收到数据写入请求时,所述主节点将所述同步数据发送至所述其他节点;
当其他节点中的其他主节点接收到所述同步数据时,所述主节点确定其他主节点的身份,并获取所述其他主节点的身份标识。
11.根据权利要求10所述的数据存储方法,其特征在于,还包括:
当所述主节点接收到所述其他主节点发送的所述同步数据时,所述主节点确定所述其他主节点的身份,并获取所述其他主节点的身份标识。
12.根据权利要求10或11所述的数据存储方法,其特征在于,所述主节点确定其他主节点的身份,并获取所述其他主节点的身份标识之后,还包括:
所述主节点根据所述其他主节点的身份标识,向所述其他主节点发送所述数据比较请求,所述数据比较请求用于获取其他主节点的数据编号最大的第一目标数据编号;
所述主节点接收到所述其他主节点发送的第一目标数据编号;
当所述第一目标数据编号超过所述主节点的数据编号中最大的第二目标数据编号时,所述主节点变为从节点,并从所述其他主节点中获取所述主节点缺失的数据。
13.根据权利要求12所述的数据存储方法,其特征在于,所述主节点从所述其他主节点中获取所述主节点缺失的数据,包括:
所述主节点确定自身存在数据缺失;
所述主节点向所述其他主节点发送第二数据获取请求,所述第二数据获取请求携带所述主节点的第二目标数据编号;
所述主节点接收所述其他主节点根据所述第二目标数据编号发送的主节点缺失的数据。
14.根据权利要求1所述的数据存储方法,其特征在于,还包括:
所述主节点接收所述终端发送的数据写入请求;
所述主节点根据所述数据写入请求生成所述写入数据的数据编号;
所述主节点将所述写入数据和数据编号作为同步数据发送至所述分布式数据***的从节点,并接收所述从节点发送的反馈信息;
所述主节点根据所述反馈信息,确定成功接收到所述同步数据的从节点的第二节点数量;
当所述第二节点数量超过所述分布式数据***的节点总数的一半时,所述主节点将所述同步数据存储至主节点的本地数据库,并向所述从节点发送所述数据保存请求,以将所述同步数据保存至从节点的本地数据库;
当所述第二节点数量未超过所述分布式数据***的节点总数的一半时,所述主节点将所述写入数据丢弃,并向所述从节点发送所述数据丢弃请求,以使得所述从节点将所述同步数据丢弃。
15.一种数据存储方法,其特征在于,包括:
接收单元,用于所述从节点接收终端发送的数据写入请求,所述数据写入请求携带写入数据,所述数据写入请求用于将所述写入数据写入至所述分布式数据***的节点;
获取单元,用于所述从节点根据所述数据写入请求,从所述主节点中获取所述写入数据的数据编号,所述数据编号为所述写入数据在所述分布式数据***中的顺序标识;
发送单元,用于所述从节点将所述写入数据和数据编号作为同步数据发送至所述分布式数据***的其他节点,并接收所述其他节点发送的反馈信息;
确定单元,用于所述从节点根据所述反馈信息,确定成功接收到所述同步数据的其他节点的第一节点数量;
存储单元,用于所述从节点基于所述第一节点数量,对所述写入数据进行存储。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010004352.XA CN111198662B (zh) | 2020-01-03 | 2020-01-03 | 一种数据存储方法、装置和计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010004352.XA CN111198662B (zh) | 2020-01-03 | 2020-01-03 | 一种数据存储方法、装置和计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111198662A true CN111198662A (zh) | 2020-05-26 |
CN111198662B CN111198662B (zh) | 2023-07-14 |
Family
ID=70746679
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010004352.XA Active CN111198662B (zh) | 2020-01-03 | 2020-01-03 | 一种数据存储方法、装置和计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111198662B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111625601A (zh) * | 2020-05-27 | 2020-09-04 | 北京字节跳动网络技术有限公司 | 一种数据写入方法、装置、计算机设备及存储介质 |
CN112068997A (zh) * | 2020-09-09 | 2020-12-11 | 恒生电子股份有限公司 | 数据备份方法、装置、设备及存储介质 |
CN112527901A (zh) * | 2020-12-10 | 2021-03-19 | 杭州比智科技有限公司 | 数据存储***、方法、计算设备及计算机存储介质 |
CN113282334A (zh) * | 2021-06-07 | 2021-08-20 | 深圳华锐金融技术股份有限公司 | 软件缺陷的恢复方法、装置、计算机设备和存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104933132A (zh) * | 2015-06-12 | 2015-09-23 | 广州巨杉软件开发有限公司 | 基于操作序列号的分布式数据库有权重选举方法 |
US20170168756A1 (en) * | 2014-07-29 | 2017-06-15 | Hewlett Packard Enterprise Development Lp | Storage transactions |
CN107295080A (zh) * | 2017-06-19 | 2017-10-24 | 北京百度网讯科技有限公司 | 应用于分布式服务器集群的数据存储方法和服务器 |
JP2017224253A (ja) * | 2016-06-17 | 2017-12-21 | 富士通株式会社 | 並列処理装置及びメモリキャッシュ制御方法 |
US20190042659A1 (en) * | 2016-02-17 | 2019-02-07 | Hangzhou Hikvision Technology Co. Ltd | Data writing and reading and apparatus and cloud storage system |
-
2020
- 2020-01-03 CN CN202010004352.XA patent/CN111198662B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170168756A1 (en) * | 2014-07-29 | 2017-06-15 | Hewlett Packard Enterprise Development Lp | Storage transactions |
CN104933132A (zh) * | 2015-06-12 | 2015-09-23 | 广州巨杉软件开发有限公司 | 基于操作序列号的分布式数据库有权重选举方法 |
US20190042659A1 (en) * | 2016-02-17 | 2019-02-07 | Hangzhou Hikvision Technology Co. Ltd | Data writing and reading and apparatus and cloud storage system |
JP2017224253A (ja) * | 2016-06-17 | 2017-12-21 | 富士通株式会社 | 並列処理装置及びメモリキャッシュ制御方法 |
CN107295080A (zh) * | 2017-06-19 | 2017-10-24 | 北京百度网讯科技有限公司 | 应用于分布式服务器集群的数据存储方法和服务器 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111625601A (zh) * | 2020-05-27 | 2020-09-04 | 北京字节跳动网络技术有限公司 | 一种数据写入方法、装置、计算机设备及存储介质 |
CN111625601B (zh) * | 2020-05-27 | 2023-03-14 | 北京火山引擎科技有限公司 | 一种数据写入方法、装置、计算机设备及存储介质 |
CN112068997A (zh) * | 2020-09-09 | 2020-12-11 | 恒生电子股份有限公司 | 数据备份方法、装置、设备及存储介质 |
CN112068997B (zh) * | 2020-09-09 | 2023-12-19 | 恒生电子股份有限公司 | 数据备份方法、装置、设备及存储介质 |
CN112527901A (zh) * | 2020-12-10 | 2021-03-19 | 杭州比智科技有限公司 | 数据存储***、方法、计算设备及计算机存储介质 |
CN113282334A (zh) * | 2021-06-07 | 2021-08-20 | 深圳华锐金融技术股份有限公司 | 软件缺陷的恢复方法、装置、计算机设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111198662B (zh) | 2023-07-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111198662A (zh) | 一种数据存储方法、装置和计算机可读存储介质 | |
CN108847982B (zh) | 一种分布式存储集群及其节点故障切换方法和装置 | |
EP2691859B1 (en) | Fault detection and recovery as a service | |
CN106843749B (zh) | 写入请求处理方法、装置及设备 | |
US10331625B2 (en) | Managing sequential data store | |
US7539150B2 (en) | Node discovery and communications in a network | |
CN112506702B (zh) | 数据中心容灾方法、装置、设备及存储介质 | |
CN111541762B (zh) | 数据处理的方法、管理服务器、设备及存储介质 | |
CN106960060B (zh) | 一种数据库集群的管理方法及装置 | |
WO2016183967A1 (zh) | 一种关键组件的故障告警方法、装置及大数据管理*** | |
CN110351313B (zh) | 数据缓存方法、装置、设备及存储介质 | |
CN108140035B (zh) | 分布式***的数据库复制方法及装置 | |
CN112000735A (zh) | 一种数据处理方法、装置、*** | |
CN111651320A (zh) | 一种高并发连接方法和*** | |
CN113190620B (zh) | Redis集群之间数据的同步方法、装置、设备及存储介质 | |
CN105323271B (zh) | 一种云计算***以及云计算***的处理方法和装置 | |
CN113765690A (zh) | 集群切换方法、***、装置、终端、服务器及存储介质 | |
US11381642B2 (en) | Distributed storage system suitable for sensor data | |
CN111092956A (zh) | 资源同步方法、装置、存储介质及设备 | |
CN113342893B (zh) | 基于区块链的节点同步方法、装置、存储介质及服务器 | |
CN114564458B (zh) | 集群间数据同步的方法、装置、设备和存储介质 | |
CN113364874B (zh) | 基于区块链的节点同步方法、装置、存储介质及服务器 | |
Lin et al. | ReHRS: A hybrid redundant system for improving MapReduce reliability and availability | |
CN117395263B (zh) | 一种数据同步方法、装置、设备和存储介质 | |
CN116991635B (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 | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20201010 Address after: Room 2012, building 12, 13, 15, fangmaoyuan (phase II), 1177 Huanhu Road, Tianding street, Yuelu District, Changsha City, Hunan Province Applicant after: Tencent cloud computing (Changsha) Co.,Ltd. Address before: 518057 Nanshan District science and technology zone, Guangdong, Zhejiang Province, science and technology in the Tencent Building on the 1st floor of the 35 layer Applicant before: TENCENT TECHNOLOGY (SHENZHEN) Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |