一种基于区块链网络的数据存储方法以及装置与流程

文档序号:19471715发布日期:2019-12-21 02:22阅读:191来源:国知局
一种基于区块链网络的数据存储方法以及装置与流程
本申请涉及计算机
技术领域
,尤其涉及一种区块链网络的数据存储方法以及装置。
背景技术
:数据以某种格式记录在计算机内部或外部存储介质上即为数据的存储过程。目前,区块链网络中的每个节点都按照块链式结构存储完整的数据且区块链网络的每个节点上存储的数据都是独立的、地位等同的。当区块链网络中的某个节点因为受到攻击而被破坏时,该节点上存储的完整数据就会丢失,数据不安全,另外其他节点也无法获取到存储在该节点上的数据,将会导致数据缺失,影响数据的完整性。技术实现要素:本申请实施例提供一种基于区块链网络的数据存储方法以及装置,可以提高数据存储的安全性,并可以在单一节点受到攻击时,即使单一节点的数据丢失仍然不影响数据的完整性。第一方面,本申请实施例提供了一种基于区块链网络的数据存储方法,该方法包括:第一节点对第一数据进行数据分割,得到n个数据块,该第一数据中包括目标数据的至少两个备份数据,n为大于2的自然数;该第一节点获取该n个数据块中各个数据块的标识;该第一节点将该n个数据块中的各个数据块分发至区块链网络的至少一个第二节点上存储,该区块链网络包括该第一节点和该至少一个第二节点,每个第二节点上存储该n个数据块中的至少一个数据块;该第一节点根据该n个数据块中各个数据块的标识和存储路径更新该区块链网络中的区块链账本,该各个数据块的存储路径包括该各个数据块所在的节点标识。在一种可能的设计中,该方法还包括:第三节点接收读数据请求,该读数据请求用于请求该目标数据;该第三节点访问该区块链网络从该区块链账本中读取该n个数据块的标识和存储路径;该第三节点从该n个数据块的标识和存储路径中筛选出该目标数据对应的m个数据块的标识以及存储路径,m为小于n的自然数;该第三节点根据筛选出的该m个数据块的标识以及存储路径,从该m个数据块的存储路径包括的节点标识对应的节点上获取该m个数据块;该第三节点将获取到的m个数据块拼接成该目标数据。在一种可能的设计中,该第三节点将获取到的m个数据块拼接成该目标数据,包括:该第三节点向该第一节点发送数据拼接请求,该数据拼接请求包括该m个数据块的标识;该第三节点接收该第一节点针对该数据拼接请求返回的数据拼接响应,该数据拼接响应包括该m个数据块中各个数据块的拼接顺序;该第三节点根据该数据拼接响应对获取到的m个数据块进行数据拼接,得到该目标数据。在一种可能的设计中,该第一节点对第一数据进行数据分割,得到n个数据块之前,该方法还包括:第一节点对在区块链网络上达成共识后的目标数据进行备份得到该目标数据的至少两个备份数据,并将该至少两个备份数据封装成第一数据。在一种可能的设计中,该第一节点对第一数据进行数据分割,得到n个数据块,包括:该第一节点确定目标大小;该第一节点基于该目标大小对第一数据中目标数据的至少两个备份数据进行数据分割,得到n个数据块,该n个数据块中存在至少一个数据块的数据大小等于该目标大小,该至少两个备份数据中每个备份数据被分割成数据块的数量相同,该目标大小小于该目标数据的数据大小。在一种可能的设计中,该n个数据块中各个数据块的标识为哈希值;该第一节点获取该n个数据块中各个数据块的标识,包括:该第一节点计算该n个数据块中每个数据块的哈希值。在一种可能的设计中,该第一节点获取该n个数据块中各个数据块的标识之后,该方法还包括:该第一节点通过公钥对该n个数据块中的每个数据块进行加密。第二方面,本申请实施例提供了一种数据存储装置,包括:数据分割模块,用于对第一数据进行数据分割,得到n个数据块,该第一数据中包括目标数据的至少两个备份数据,n为大于2的自然数;第一获取模块,用于获取该n个数据块中各个数据块的标识;分发模块,用于将该n个数据块中的各个数据块分发至区块链网络的至少一个第二节点上存储,该区块链网络包括该第一节点和至少一个第二节点,每个第二节点上存储该n个数据块中的至少一个数据块;更新模块,用于根据该n个数据块中各个数据块的标识和存储路径更新该区块链网络中的区块链账本,该各个数据块的存储路径包括该各个数据块所在的节点标识。在一种可能的设计中,该数据存储装置还可以包括收发模块、读取模块、筛选模块、第二获取模块以及拼接模块。该收发模块,用于接收读数据请求,该读数据请求用于请求该目标数据;该读取模块,用于访问该区块链网络从该区块链账本中读取该n个数据块的标识和存储路径;该筛选模块,从该n个数据块的标识和存储路径中筛选出该目标数据对应的m个数据块的标识以及存储路径,m为小于n的自然数;该第二获取模块,用于根据筛选出的该m个数据块的标识以及存储路径,从该m个数据块的存储路径包括的节点标识对应的节点上获取该m个数据块;该拼接模块,用于将获取到的m个数据块拼接成该目标数据。在一种可能的设计中,上述拼接模块,具体用于:向该第一节点发送数据拼接请求,该数据拼接请求包括该m个数据块的标识;接收该第一节点针对该数据拼接请求返回的数据拼接响应,该数据拼接响应包括该m个数据块中各个数据块的拼接顺序;根据该数据拼接响应对获取到的m个数据块进行数据拼接,得到该目标数据。在一种可能的设计中,该数据存储装置还可以包括备份模块。该备份模块,用于对在区块链网络上达成共识后的目标数据进行备份得到该目标数据的至少两个备份数据,并将该至少两个备份数据封装成第一数据。在一种可能的设计中,上述数据分割模块,具体用于:确定目标大小;基于该目标大小对第一数据中目标数据的至少两个备份数据进行数据分割,得到n个数据块,该n个数据块中存在至少一个数据块的数据大小等于该目标大小,该至少两个备份数据中每个备份数据被分割成数据块的数量相同,该目标大小小于该目标数据的数据大小。在一种可能的设计中,上述n个数据块中各个数据块的标识为哈希值。上述第一获取模块,具体用于:计算该n个数据块中每个数据块的哈希值。在一种可能的设计中,该数据存储装置还可以包括加密模块。该加密模块,用于通过公钥对该n个数据块中的每个数据块进行加密。第三方面,本申请实施例提供了另一种数据存储装置,包括:收发模块201,用于接收读数据请求,该读数据请求用于请求该目标数据;读取模块202,用于访问该区块链网络从该区块链账本中读取该n个数据块的标识和存储路径;筛选模块203,从该n个数据块的标识和存储路径中筛选出该目标数据对应的m个数据块的标识以及存储路径,m为小于n的自然数;获取模块204,用于根据筛选出的该m个数据块的标识以及存储路径,从该m个数据块的存储路径包括的节点标识对应的节点上获取该m个数据块;拼接模块205,用于将获取到的m个数据块拼接成该目标数据。在一种可能的设计中,上述拼接模块,具体用于:向该第一节点发送数据拼接请求,该数据拼接请求包括该m个数据块的标识;接收该第一节点针对该数据拼接请求返回的数据拼接响应,该数据拼接响应包括该m个数据块中各个数据块的拼接顺序;根据该数据拼接响应对获取到的m个数据块进行数据拼接,得到该目标数据。第四方面,本申请实施例提供了一种电子设备,包括:处理器、存储器以及网络接口;该处理器分别与存储器、网络接口相连,其中,该存储器用于存储程序代码,该网络接口用于与区块链网络中的各个节点进行通信,该处理器用于调用该程序代码,以执行以下操作:对第一数据进行数据分割,得到n个数据块,该第一数据中包括目标数据的至少两个备份数据,n为大于2的自然数;获取该n个数据块中各个数据块的标识;将该n个数据块中的各个数据块通过该网络接口分发至区块链网络的至少一个第二节点上存储,该区块链网络包括该第一节点和该至少一个第二节点,每个第二节点上存储该n个数据块中的至少一个数据块;根据该n个数据块中各个数据块的标识和存储路径更新该区块链网络中的区块链账本,该各个数据块的存储路径包括该各个数据块所在的节点标识。第五方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,当所述处理器执行所述程序指令时执行本申请实施例第一方面中第一节点的基于区块链网络的数据存储方法。第六方面,本申请实施例提供了另一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,当所述处理器执行所述程序指令时执行本申请实施例第一方面中第三节点的基于区块链网络的数据存储方法。本申请实施例通过将包含冗余数据的第一数据分割得到n个数据块,将这n数据块分发到区块链网络的多个节点上存储,可以提高数据存储的安全性,并可以在单一节点受到攻击时,即使单一节点的数据丢失仍然不影响数据的完整性。附图说明为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1a是本申请实施例提供的区块链网络的系统架构图;图1b是本申请实施例提供的区块链的示意图;图1c是本申请实施例提供的区块产生过程示意图;图2是本申请实施例提供的一种基于区块链网络的数据存储方法的流程示意图;图3是本申请实施例提供的另一种基于区块链网络的数据存储方法的流程示意图;图4是本申请实施例提供的一种数据存储装置的结构示意图;图5是本申请实施例提供的另一种数据存储装置的结构示意图;图6是本申请实施例提供的一种电子设备的结构示意图。具体实施方式下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。应当理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。本申请实施例提供的基于区块链网络的数据存储方法可用于存储静态数据。静态数据是指在运行过程中主要作为控制或参考用的数据,它们在很长的一段时间内不会变化,一般不随运行而变。本申请实施例所涉及的数据(如第一数据、目标数据、备份数据等)均为静态数据。在一些可行的实施方式中,参见图1a,图1a是本申请实施例提供的区块链网络的系统架构图。如图1a所示,图1a所示的区块链网络示出了5个对等节点,分别为节点1、节点2、节点3、节点4以及节点5。节点1~5中每个节点上都可以存储数据,且各个节点上存储的数据可以不相同,但各个节点的区块链账本完全相同。节点1~5中的任意两个节点之间可以进行点对点传输(对等网络(peertopeer,p2p)传输)。可理解的,图1a仅是示例性的画出了5个对等节点,该区块链网络中实际存在的对等节点可以多于图1a所示出的对等节点,也可以少于图1a所示出的对等节点,但不得少于2个对等节点,图1a并不对本申请实施例所提供的区块链网络中对等节点的数量构成限定。如图1a所示,每个节点在进行正常工作可以接收到输入信息,并基于接收到的输入信息维护该区块链网络内的共享数据。为了保证区块链网络内的信息互通,区块链网络中的每个节点之间可以存在信息连接,节点之间可以通过上述信息连接进行信息传输。对于区块链网络中的每个节点,均具有与其对应的节点标识,而且区块链网络中的每个节点均可以存储有区块链网络中其他节点的节点标识,以便后续根据其他节点的节点标识,将生成的区块广播至区块链网络中的其他节点。每个节点中可维护一个如下表所示的节点标识列表,将节点名称和节点标识对应存储至该节点标识列表中。其中,节点标识可为ip(internetprotocol,网络之间互联的协议)地址以及其他任一种能够用于标识该节点的信息,表1中仅以ip地址为例进行说明。表1:节点名称节点标识节点1117.114.151.174节点2117.116.189.145……节点n119.123.789.258区块链网络中的每个节点均存储一条相同的区块链。区块链由多个区块组成,参见图1b,图1b是本申请实施例提供的区块链的示意图。如图1b所示,区块链由多个区块组成,创始块中包括区块头和区块主体,区块头中存储有输入信息特征值、版本号、时间戳和难度值,区块主体中存储有输入信息;创始块的下一区块以创始块为父区块,下一区块中同样包括区块头和区块主体,区块头中存储有当前区块的输入信息特征值、父区块的区块头特征值、版本号、时间戳和难度值,并以此类推,使得区块链中每个区块中存储的区块数据均与父区块中存储的区块数据存在关联,保证了区块中输入信息的安全性。在生成区块链中的各个区块时,参见图1c,图1c是本申请实施例提供的区块产生过程示意图。如图1c所示,区块链所在的节点在接收到输入信息时,对输入信息进行校验,完成校验后,将输入信息存储至内存池中,并更新其用于记录输入信息的哈希树;之后,将更新时间戳更新为接收到输入信息的时间,并尝试不同的随机数,多次进行特征值计算,使得计算得到的特征值可以满足下述公式:sha256(sha256(version+prev_hash+merkle_root+ntime+nbits+x))<target其中,sha256为计算特征值所用的特征值算法;version(版本号)为区块链中相关区块协议的版本信息;prev_hash为当前区块的父区块的区块头特征值;merkle_root为输入信息的特征值;ntime为更新时间戳的更新时间;nbits为当前难度,在一段时间内为定值,并在超出固定时间段后再次进行确定;x为随机数;target为特征值阈值,该特征值阈值可以根据nbits确定得到。这样,当计算得到满足上述公式的随机数时,便可将信息对应存储,生成区块头和区块主体,得到当前区块。随后,区块链所在节点根据区块链网络中其他节点的节点标识,将新生成的区块分别发送给其所在的区块链网络中的其他节点,由其他节点对新生成的区块进行校验,并在完成校验后将新生成的区块添加至其存储的区块链中。在一些可行的实施方式中,区块链网络中的“节点”,指的是区块链网络中的计算机,包括手机、矿机、台式机、服务器等等。为便于描述,下面以节点为例对本申请实施例提供的基于区块链网络的数据存储方法进行说明。下面将结合附图2和附图3,对本申请提供的基于区块链网络的数据存储方法进行详细说明。请参见图2,是本申请实施例提供的一种基于区块链网络的数据存储方法的流程示意图。如图2所示,该基于区块链网络的数据存储方法可以包括以下步骤:s201,第一节点对第一数据进行数据分割,得到n个数据块。在一些可行的实施方式中,第一节点可以为图1a所示的区块链网络中的任一对等节点,例如节点1。用户可以通过第一客户端将某个应用程序中的目标数据(目标数据为静态数据)上传给第一节点。第一节点可以在区块链网络上进行该目标数据的共识,具体为:第一节点接收到该目标数据之后,可以通过第一节点的私钥对该目标数据进行数字签名,并可以将数字签名后的目标数据、第一节点的公钥以及数字签名前的目标数据广播到区块链网络(即p2p网络)的各个第二节点上。各个第二节点接收到数字签名后的目标数据、第一节点的公钥以及数字签名前的目标数据之后,采用第一节点的公钥对该数字签名后的目标数据进行解密得到解密后的数据。当各个第二节点中某个第二节点解密后的数据与该数字签名前的目标数据相同时,这个第二节点就向第一节点返回共识达成响应。当各个第二节点中某个第二节点解密后的数据与该数字签名前的目标数据不相同时,这个第二节点就向第一节点返回共识失败响应。当第一节点接收到区块链网络中超过一半的节点返回共识达成响应时,说明该目标数据已达成共识。可选的,第一节点在区块链网络上进行目标数据的共识时,可以通过区块链网络的共识节点完成共识操作,也可以调用区块链网络的智能合约完成共识操作,本申请实施例对此不作限定。第一节点可以将达成共识的目标数据进行备份,得到该目标数据的至少2个备份数据,并可以将该至少2个备份数据封装成第一数据。可选的,达成共识的目标数据可以作为该目标数据的一个备份数据,即目标数据是自己的备份数据。第一节点可以确定目标大小,该目标大小可以小于该目标数据的数据大小。第一节点可以按照该目标大小分别对该第一数据中的每个备份数据进行数据分割,最后得到n个数据块,该n个数据块中存在至少1个数据块的数据大小等于该目标大小,该每个备份数据被分割成数据块的数量相同。可选的,第一节点在得到n个数据块之后,可以生成该n个数据块的拼接信息(包括拼接顺序)。其中,目标数据可以为游戏应用中的安装包和/或补丁等大型静态数据。例如,假设第一数据中包括3个备份数据,分别为备份数据a1(也可以为目标数据本身)、备份数据a2以及备份数据a3,且这3个备份数据的内容完全相同。假设每个备份数据的数据大小为100m,目标大小为4m,则每个备份数据可以分割成25个数据块,每个数据块的数据大小为4m,n=25*3=75。假设备份数据a1被分割成a1-1,a1-2,a1-3,…,a1-25这25个数据块,备份数据a2被分割成a2-1,a2-2,a2-3,…,a2-25这25个数据块,备份数据a3被分割成a3-1,a3-2,a3-3,…,a3-25这25个数据块。其中,a1-1、a2-1、a3-1这3个数据块的内容完全相同,a1-2、a2-2、a3-2这3个数据块的内容完全相同,a1-3、a2-3、a3-3这3个数据块的内容完全相同,以此类推。第一节点在将这3个备份数据全部分割完成之后可以得到如表2所示的关系表,表2中包括备份数据标识、数据块标识以及各个数据块之间的拼接信息。表2:可选的,如果上述至少2个备份数据中每个备份数据的数据大小不是上述目标大小的整数倍,则每个备份数据被分割后的最后一个数据块的数据大小可以小于该目标大小。例如,每个备份数据的大小为110m,目标大小为4m,这个每个备份数据可以被分割成28个数据块,前27个数据块的数据大小均为4m,最后一个数据块的数据大小为2m。在一些可行的实施方式中,第一节点在确定目标大小时,可以调用区块链网络的智能合约获取数据切片的大小,并可以将该数据切片的大小作为目标大小。s202,第一节点获取n个数据块中各个数据块的标识。在一些可行的实施方式中,第一节点可以为上述n个数据块中的每个数据块打上标签,这个标签可以为数据块的唯一标识。可选的,第一节点可以计算上述n个数据块中每个数据块的哈希值,并可以将数据块的哈希值作为这个数据块的唯一标识。其中,哈希是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,即将任意长度的消息压缩到某一固定长度的消息摘要。在一些可行的实施方式中,第一节点在计算上述n个数据块中每个数据块的哈希值之后,可以通过第一节点的公钥对这n个数据块中的每个数据块进行加密,以保证数据的安全性。可选的,第一节点可以使用dataencryption协议对数据块进行加密。s203、第一节点将n个数据块中的各个数据块分发至区块链网络的至少一个第二节点上存储。在一些可行的实施方式中,上述至少一个第二节点中每个第二节点上存储的数据块数量可以相同。具体地,第一节点从区块链网络的各个节点中筛选出m个第二节点,m为大于或等于1的自然数,n可以为m的整数倍。第一节点可以将上述n个数据块分成m组数据块,每组数据块包括n/m个数据块,各组数据块之间各不相同,每组数据块中各个数据块不相同。第一节点可以通过点对点传输依次将m组数据块分发给m个第二节点,每组数据块对应一个第二节点。每个第二节点接收到一组数据块之后,可以将其存储下来,并向第一节点返回存储信息,该存储信息中可以包括这个第二节点的节点标识和这一组数据块中n/m个数据块的标识,以便于第一节点更新区块链账本。其中,第一节点上可存储该n个数据块中一个或多个数据块,第一节点也可以不存储该n个数据块中的任意数据块。第一节点和上述至少一个第二节点属于同一区块链网络。例如,m=4,第一节点从区块链网络的各个节点中筛选出来的4个节点为节点2、节点3、节点4以及节点5,n=20,则每个第二节点上存储n/m=5个数据块。第一节点从20个数据块中任选5个数据块通过点对点传输发送给节点2。节点2将接收到的5个数据块存储下来,并向第一节点返回存储信息(包括接收到的5个数据块的标识以及节点2的标识)。此时,第一节点上剩余20-5=15个数据块。接着,第一节点从剩余的15个数据块中任选5个数据块通过点对点传输发送给节点3。节点3将接收到的5个数据块存储下来,并向第一节点返回存储信息(包括接收到的5个数据块的标识以及节点3的标识)。此时,第一节点上剩余15-5=10个数据块。然后,第一节点从剩余的10个数据块中任选5个数据块通过点对点传输发送给节点4。节点4将接收到的5个数据块存储下来,并向第一节点返回存储信息(包括接收到的5个数据块的标识以及节点4的标识)。此时,第一节点上剩余10-5=5个数据块。最后,第一节点将剩余的5个数据块通过点对点传输发送给节点5。节点5将接收到的5个数据块存储下来,并向第一节点返回存储信息(包括接收到的5个数据块的标识以及节点5的标识)。此时,第一节点上不剩余数据块。可选的,假设第一节点上需要存储n个数据块中的一个或多个数据块,则第一节点和m个第二节点中的每个节点上存储n/(m+1)个数据块。在另一些可行的实施方式中,第一节点可以将上述n个数据块等比例分发至区块链网络的至少一个第二节点上存储。例如,n=30,区块链网络包括节点1、节点2、节点3、节点4以及节点5这5个节点。假设第一节点为节点1。第一节点可以从30个数据块中任选2个数据块通过点对点传输发送给区块链网络中除第一节点外的任一节点,如节点3。节点3将接收到的2个数据块存储下来后,向第一节点返回存储信息(包括接收到的2个数据块的标识以及节点3的标识)。此时,第一节点上剩余30-2=28个数据块。第一节点可以从剩余的28个数据块中任选4个数据块通过点对点传输发送给区块链网络中除第一节点和节点3外的任一节点,如节点2。节点2将接收到的4个数据块存储下来后,向第一节点返回存储信息(包括接收到的4个数据块的标识以及节点2的标识)。此时,第一节点上剩余28-4=24个数据块。第一节点可以从剩余的24个数据块中任选8个数据块通过点对点传输发送给区块链网络中除第一节点、节点2和3外的任一节点,如节点5。节点5将接收到的8个数据块存储下来后,向第一节点返回存储信息(包括接收到的8个数据块的标识以及节点5的标识)。此时,第一节点上剩余24-8=16个数据块。第一节点将剩余的16个数据块通过点对点传输发送给最后一个节点,即节点4。节点4将接收到的16个数据块存储下来后,向第一节点返回存储信息(包括接收到的16个数据块的标识以及节点4的标识)。此时,第一节点上不存储数据块。s204,第一节点根据n个数据块中各个数据块的标识和存储路径更新区块链网络中的区块链账本。在一些可行的实施方式中,上述各个数据块的存储路径可以包括该各个数据块所在的节点标识。第一节点可以接收上述各个第二节点返回的存储信息,该存储信息中包括第二节点的节点标识以及存储在该第二节点上的数据块的标识。第一节点可以基于各个第二节点返回的存储信息更新区块链网络中的区块链账本。第一节点更新区块链账本的操作可以具体为:第一节点可以调用智能合约针对各个节点返回的存储信息生成一个区块,并可以调用智能合约将该区块添加到区块链上。在第一节点调用智能合约将该区块添加到区块链上之后,可以调用智能合约获取该区块的地址(或高度)。在本申请实施例中,第一节点对第一数据进行数据分割,得到n个数据块,这个第一数据包含目标数据的至少两个备份数据,并获取这n个数据块中各个数据块的标识。然后,第一节点将这n个数据块中的各个数据块分发至区块链网络的至少一个第二节点上存储,每个第二节点上可以存储这n个数据块中的至少一个数据块,第一节点和这至少一个第二节点属于同一区块链网络。最后,第一节点可以基于这n个数据块中各个数据块的标识和存储路径更新区块链网络中的区块链账本。其中,数据块的存储路径可以为存储这个数据块的节点的标识。第一节点通过将包含冗余数据的第一数据分割得到n个数据块,将这n数据块分发到区块链网络的多个节点上存储,可以提高数据存储的安全性,并可以在单一节点受到攻击时,即使单一节点的数据丢失仍然不影响数据的完整性。作为一个可选的实施例,上述第一节点将包含冗余数据的第一数据分割得到n个数据块,将这n数据块分发到区块链网络的多个节点上存储之后,经过第一节点授权的授权节点(既可以是与第一节点属于同一区块链网络的节点,也可以是与第一节点不属于同一区块链网络的节点)可以读取第一节点分发到区块链网络上存储的数据。请参见图3,图3是本申请实施例提供的另一种基于区块链网络的数据存储方法的流程示意图。如图3所示,该基于区块链网络的数据存储方法可以包括以下步骤:s301,第一节点对第一数据进行数据分割,得到n个数据块。s302,第一节点获取n个数据块中各个数据块的标识。s303,第一节点将n个数据块中的各个数据块分发至区块链网络的至少一个第二节点上存储。s304,第一节点根据n个数据块中各个数据块的标识和存储路径更新区块链网络中的区块链账本。在一些可行的实施方式中,本申请实施例的步骤s301-步骤s304可参考图2所示实施例的步骤s201-步骤s204。s305,第三节点接收读数据请求。在一些可行的实施方式中,上述第三节点可以为上述第一节点,也可以是第一节点所在的区块链网络中除第一节点外的授权节点,还可以是不属于第一节点所在的区块链网络,且是第一节点的授权节点。为便于描述,下面直接以第三节点进行说明。本申请实施例所涉及的授权节点指第一节点授权的节点,即拥有第一节点私钥的节点,或者被第一节点允许访问第一节点上传的数据的节点。可选的,当第三节点不是上述第一节点时,第一节点在更新区块链网络中的区块链账本之后,可以向第三节点发送第一节点的私钥。第三节点接收到第一节点发送的私钥之后,可以将其存储下来,说明第三节点是第一节点的授权节点。在一些可行的实施方式中,客户端可以接收用户在其上操作所产生的读数据请求,该读数据请求中可以包括上述目标数据(这里指标识)的目标标识。客户端可以向第三节点发送该读数据请求,该读数据请求可以用于请求该目标数据。s306,第三节点通过第一节点的私钥访问区块链网络从区块链账本中读取与目标数据关联的n个数据块的标识和存储路径。在一些可行的实施方式中,由于第三节点是第一节点的授权节点,也就是第三节点拥有第一节点的私钥。故第三节点可以通过第一节点的私钥访问第一节点所属的区块链网络,并可以从区块链账本中读取与上述目标数据关联的n个数据块的标识和存储路径。上述n个数据块是目标数据的至少2个备份数据分割得到,故这n个数据块与目标数据存在关联关系。其中,数据块的存储路径可以是存储这个数据块的节点的标识。s307,第三节点从读取到的n个数据块的标识和存储路径中筛选出目标数据对应的m个数据块的标识以及存储路径。在一些可行的实施方式中,由于目标数据与其备份数据的内容完全相同,也就说明可以将目标数据的1个备份数据中的一部分数据与这个目标数据的另一个备份数据中不相同的部分进行拼接,也可以得到与这个目标数据的内容完全相同的数据。例如,如上述表2所示,第一数据中包括备份数据a1(也可以为目标数据本身)、备份数据a2以及备份数据a3。备份数据a1、备份数据a2以及备份数据a3分别被分割成25个数据块。从备份数据a1被分割成的25个数据块中取一部分数据块,假设取a1-1~a1-10这10个数据块,从备份数据a2被分割成的25个数据块中取另一部分不相同的数据块,假设取a2-21~a2-25这5个数据块,从备份数据a3被分割成的25个数据块中取再一部分不相同的数据块,假设取a3-11~a3-20这10个数据块,将取出来的数据块拼接,仍然可以拼接得到一个数据与目标数据的内容完全相同,这个拼接得到的数据包括数据块a1-1~a1-10,a3-11~a3-20以及a2-21~a2-25。因此,第三节点可以从上述读取到的n个数据块的标识和存储路径中筛选出上述目标数据对应的m个数据块的标识以及存储路径。其中,该目标数据对应的m个数据块可以组成一个内容与这个目标数据的内容完全相同的数据,且该m个数据块的存储路径是允许第三节点访问的。s308,第三节点根据筛选出的m个数据块的标识以及存储路径,从m个数据块的存储路径包括的节点标识对应的节点上获取m个数据块。在一些可行的实施方式中,数据块的标识为这个数据块的哈希值。第三节点可以读取上述筛选出的m个数据块中各个数据块的存储路径,并可以向各个数据块的存储路径包括的节点标识所对应的节点发送数据获取请求,这个数据获取请求中包括这个数据块的标识。当某个节点接收到数据获取请求之后,可以计算本节点所存储的数据块中每个数据块的哈希值,当计算出的某个数据块的哈希值与数据获取请求包括的标识相同时,则向第三节点返回这个数据块。从而第三节点可以获取到m个数据块。例如,如表3所示,是数据块的标识与其存储路径的关系表,或表3是区块链账本中的多条记录。其中,存储路径中node-1对应节点1,node-2对应节点2,node-3对应节点3,node-4对应节点4,node-5对应节点5。假设m=25,m个数据块的标识分别为a1-1~a1-10,a3-11~a3-20以及a2-21~a2-25。则节点。第三节点可以基于存储路径node-2向节点2发送获取数据请求,这个获取数据请求中包括标识a1-1~a1-10。节点2接收到获取数据请求之后,可以查找与标识a1-1~a1-10对应的10和数据块并将其返回给第三节点。第三节点可以基于存储路径node-5向节点5发送获取数据请求,这个获取数据请求中包括标识a2-21~a2-25。节点5接收到获取数据请求之后,可以查找与标识a2-21~a2-25对应的5个数据块并将其返回给第三节点。第三节点可以基于存储路径node-4向节点4发送获取数据请求,这个获取数据请求中包括标识a3-11~a3-20。节点4接收到获取数据请求之后,可以查找与标识a3-11~a3-20对应的10个数据块并将其返回给第三节点。此时,第三节点就获取到了标识a1-1~a1-10,a3-11~a3-20以及a2-21~a2-25对应的25个数据块。表3:s309,第三节点将获取到的m个数据块拼接成目标数据。在一些可行的实施方式中,第一节点在更新区块链网络中的区块链账本之后,可以向第一节点的各个授权节点发送上述n个数据块的拼接信息。因为第三节点是第一节点的一个授权节点,所以第三节点也会接收到上述n个数据块的拼接信息。所以第三节点在获取到上述m个数据块之后,可以基于上述n个数据块的拼接信息(如上述表2中的拼接信息)对该m个数据块拼接成一个内容与目标数据完全相同的数据,也就是说明拼接得到的数据是目标数据。在另一些可行的实施方式中,第三节点可以向第一节点发送数据拼接请求,该数据拼接请求中可以包括上述m个数据块的标识。相应地,第一节点接收该数据拼接请求。第一节点从该数据拼接请求中提取该m个数据块的标识,并基于该m个数据块的标识生成该m个数据块的拼接顺序。第一节点向第三节点发送数据拼接响应,该数据拼接响应中故可以包括该m个数据块的拼接顺序。相应地,第三节点接收该数据拼接响应。第三节点按照该数据拼接响应中该m个数据块的拼接顺序对获取到的m个数据块进行数据拼接,得到目标数据。本申请实施例通过将包含冗余数据的第一数据分割得到n个数据块,将这n数据块分发到区块链网络的多个节点上存储,并在存储之后,可以允许其他授权节点获取多个数据块,恢复出目标数据,可以提高数据存储的安全性,并可以在单一节点受到攻击时,即使单一节点的数据丢失仍然不影响数据的完整性。上述详细阐述了本申请实施例的基于区块链网络的数据存储方法,为了便于更好地实施本申请实施例的上述方案,本申请实施例还提供了相应的装置和设备。请参见图4,是本申请实施例提供的一种数据存储装置的结构示意图。该数据存储装置100可以应用在如图2或图3的第一节点中,该数据存储装置100可以包括:数据分割模块101,用于对第一数据进行数据分割,得到n个数据块,该第一数据中包括目标数据的至少两个备份数据,n为大于2的自然数;第一获取模块102,用于获取该n个数据块中各个数据块的标识;分发模块103,用于将该n个数据块中的各个数据块分发至区块链网络的至少一个第二节点上存储,该区块链网络包括该第一节点和至少一个第二节点,每个第二节点上存储该n个数据块中的至少一个数据块;更新模块104,用于根据该n个数据块中各个数据块的标识和存储路径更新该区块链网络中的区块链账本,该各个数据块的存储路径包括该各个数据块所在的节点标识。在一些可行的实施方式中,该数据存储装置100还可以包括收发模块105、读取模块106、筛选模块107、第二获取模块108以及拼接模块109。该收发模块105,用于接收读数据请求,该读数据请求用于请求该目标数据;该读取模块106,用于访问该区块链网络从该区块链账本中读取该n个数据块的标识和存储路径;该筛选模块107,从该n个数据块的标识和存储路径中筛选出该目标数据对应的m个数据块的标识以及存储路径,m为小于n的自然数;该第二获取模块108,用于根据筛选出的该m个数据块的标识以及存储路径,从该m个数据块的存储路径包括的节点标识对应的节点上获取该m个数据块;该拼接模块109,用于将获取到的m个数据块拼接成该目标数据。在一些可行的实施方式中,上述拼接模块109,具体用于:向该第一节点发送数据拼接请求,该数据拼接请求包括该m个数据块的标识;接收该第一节点针对该数据拼接请求返回的数据拼接响应,该数据拼接响应包括该m个数据块中各个数据块的拼接顺序;根据该数据拼接响应对获取到的m个数据块进行数据拼接,得到该目标数据。在一些可行的实施方式中,该数据存储装置100还可以包括备份模块110。该备份模块110,用于对在区块链网络上达成共识后的目标数据进行备份得到该目标数据的至少两个备份数据,并将该至少两个备份数据封装成第一数据。在一些可行的实施方式中,上述数据分割模块101,具体用于:确定目标大小;基于该目标大小对第一数据中目标数据的至少两个备份数据进行数据分割,得到n个数据块,该n个数据块中存在至少一个数据块的数据大小等于该目标大小,该至少两个备份数据中每个备份数据被分割成数据块的数量相同,该目标大小小于该目标数据的数据大小。在一些可行的实施方式中,上述n个数据块中各个数据块的标识为哈希值。上述第一获取模块102,具体用于:计算该n个数据块中每个数据块的哈希值。在一些可行的实施方式中,该数据存储装置100还可以包括加密模块111。该加密模块111,用于通过公钥对该n个数据块中的每个数据块进行加密。其中,上述数据分割模块101、上述第一获取模块102、上述分发模块103、上述更新模块104、上述读取模块106、上述筛选模块107、上述第二获取模块108、上述拼接模块109、上述备份模块110以及上述加密模块111可以为一个模块,如处理模块。具体实现中,各个模块的实现还可以对应参照图2或图3所示的方法实施例中第一节点和/或第三节点的相应描述,执行上述实施例中第一节点和/或第三节点所执行的方法和功能。在本申请实施例中,第一节点对第一数据进行数据分割,得到n个数据块,这个第一数据包含目标数据的至少两个备份数据,并获取这n个数据块中各个数据块的标识。然后,第一节点将这n个数据块中的各个数据块分发至区块链网络的至少一个第二节点上存储,每个第二节点上可以存储这n个数据块中的至少一个数据块,第一节点和这至少一个第二节点属于同一区块链网络。最后,第一节点可以基于这n个数据块中各个数据块的标识和存储路径更新区块链网络中的区块链账本。其中,数据块的存储路径可以为存储这个数据块的节点的标识。第一节点通过将包含冗余数据的第一数据分割得到n个数据块,将这n数据块分发到区块链网络的多个节点上存储,可以提高数据存储的安全性,并可以在单一节点受到攻击时,即使单一节点的数据丢失仍然不影响数据的完整性。请参见图5,是本申请实施例提供的另一种数据存储装置的结构示意图。该数据存储装置200可以应用在如图2或图3的第三节点中,该数据存储装置200可以包括:收发模块201,用于接收读数据请求,该读数据请求用于请求该目标数据;读取模块202,用于访问该区块链网络从该区块链账本中读取该n个数据块的标识和存储路径;筛选模块203,从该n个数据块的标识和存储路径中筛选出该目标数据对应的m个数据块的标识以及存储路径,m为小于n的自然数;获取模块204,用于根据筛选出的该m个数据块的标识以及存储路径,从该m个数据块的存储路径包括的节点标识对应的节点上获取该m个数据块;拼接模块205,用于将获取到的m个数据块拼接成该目标数据。在一些可行的实施方式中,上述拼接模块205,具体用于:向该第一节点发送数据拼接请求,该数据拼接请求包括该m个数据块的标识;接收该第一节点针对该数据拼接请求返回的数据拼接响应,该数据拼接响应包括该m个数据块中各个数据块的拼接顺序;根据该数据拼接响应对获取到的m个数据块进行数据拼接,得到该目标数据。其中,上述读取模块202、上述筛选模块203、上述获取模块204以及上述拼接模块205可以为一个模块,如处理模块。具体实现中,各个模块的实现还可以对应参照图2或图3所示的方法实施例中第三节点的相应描述,执行上述实施例中第三节点所执行的方法和功能。请参见图6,是本申请实施例提供的一种电子设备的结构示意图。如图6所示,电子设备1000可以包括:处理器1001、存储器1002、网络接口1003。此外,该电子设备1000还可以包括至少一个通信总线1004。其中,通信总线1004用于实现这些组件之间的连接通信。存储器1002可以是高速ram存储器,也可以是非不稳定的存储器(non-volatilememory),例如至少一个磁盘存储器。存储器1002可选的还可以是至少一个位于远离前述处理器1001的存储装置。如图6所示,作为一种计算机可读存储介质的存储器1002中可以包括操作系统、网络通信模块、用户接口模块以及设备控制应用程序。在图6所示的电子设备1000中,该网络接口1003用于与区块链网络中的各个节点进行通信,处理器1001可以用于调用存储器1002中存储的设备控制应用程序,以实现:对第一数据进行数据分割,得到n个数据块,该第一数据中包括目标数据的至少两个备份数据,n为大于2的自然数;获取该n个数据块中各个数据块的标识;将该n个数据块中的各个数据块通过该网络接口1003分发至区块链网络的至少一个第二节点上存储,该区块链网络包括该第一节点和该至少一个第二节点,每个第二节点上存储该n个数据块中的至少一个数据块;根据该n个数据块中各个数据块的标识和存储路径更新该区块链网络中的区块链账本,该各个数据块的存储路径包括该各个数据块所在的节点标识。此外,这里需要指出的是:本申请实施例还提供了一种计算机可读存储介质,且所述计算机可读存储介质中存储有前文提及的数据存储装置100或数据存储装置200所执行的计算机程序,且所述计算机程序包括程序指令,当所述处理器执行所述程序指令时,能够执行前文图2或图3所对应实施例中对基于区块链网络的数据存储方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本申请所涉及的计算机可读存储介质实施例中未披露的技术细节,请参照本申请方法实施例的描述。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)或随机存储记忆体(randomaccessmemory,ram)等。以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖的范围。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1