掌桥专利:专业的专利平台
掌桥专利
首页

一种基于区块链的分布式文件存储方法及装置

文献发布时间:2023-06-19 11:45:49


一种基于区块链的分布式文件存储方法及装置

技术领域

本发明实施例涉及金融科技(Fintech)领域,尤其涉及一种基于区块链的分布式文件存储方法及装置。

背景技术

随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技转变,但由于金融行业的安全性、实时性要求,也对技术提出的更高的要求。

分布式存储是一种数据存储技术,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性、可用性和存取效率,还易于扩展。基于分布式存储的特点,开始逐渐将分布式存储应用于金融科技领域,以便为金融企业或金融企业的客户提供更为便利的服务。

随着分布式存储的不断应用,尤其在金融科技领域,为了确保金融服务质量,如何确保区块链场景中所涉及的大量文件能够有效存储成为急需解决的问题。现有方案通常采用分片存储方式来存储待存储文件,以及采用中心化服务器方式来存储待存储文件的文件索引。具体地,将待存储文件的文件进行拆分后,得到多个子文件,针对每个子文件,采用逻辑距离的方式计算每个子文件与区块链网络中除上传服务器以外的其它多个服务器之间的逻辑距离,并基于逻辑距离确定出至少一个用于存储该子文件的服务器,再将该子文件存储到至少一个服务器中,同时会将待存储文件的文件索引存储在一个服务器上。然而,由于该方案在采用逻辑距离的方式确定用于存储子文件的服务器时,会出现计算的逻辑距离很近,实际物理距离却比较远的问题,使得存储资源利用不均匀,并导致数据传输的效率低、稳定性低。

综上,目前亟需一种基于区块链的分布式文件存储方法,用以解决现有技术中存在存储资源利用不均匀、数据传输稳定性低以及文件索引存储中心化的问题。

发明内容

本发明实施例提供了一种基于区块链的分布式文件存储方法及装置,用以解决现有技术中存在存储资源利用不均匀、数据传输稳定性低以及文件索引存储中心化的问题。

第一方面,本发明实施例提供了一种基于区块链的分布式文件存储方法,包括:

第一节点将待存储文件拆分为多个文件块;所述第一节点为区块链网络中任一节点;

针对每个文件块,所述第一节点基于各节点的存储优先级确定出用于存储所述文件块的各第二节点;其中,节点的存储优先级是根据节点的存储状况确定的;所述第二节点为所述区块链网络中除所述第一节点以外的任一节点;

基于每个文件块对应的第二节点,所述第一节点将所述第二节点的物理地址或互联网协议地址进行哈希运算,生成所述第二节点的第一哈希值,并将所述第一哈希值作为所述第二节点的节点标识;针对每个文件块,将所述文件块的内容进行哈希运算,生成所述文件块的第二哈希值,并将所述第二哈希值作为所述文件块的文件块标识;

所述第一节点根据各文件块的文件块标识和对应的各第二节点的节点标识,生成文件索引,并基于所述文件索引的标识与各节点的逻辑距离,确定出用于存储所述文件索引的各第三节点;所述第三节点为所述区块链网络中除所述第一节点以外的任一节点;

所述第一节点将各文件块存储至对应的各第二节点并将所述文件索引存储至对应的各第三节点。

上述技术方案中,在需要存储待存储文件时,将该待存储文件拆分为多个文件块。再通过根据各节点的存储状况可以准确地确定出各节点的存储优先级,如此,可以使得基于各节点的存储优先级,所确定出的用于存储文件块的各第二节点更加可靠,也更加符合实际需要,以此实现对各文件块进行有效且合理地存储,即,将各文件块及时准确地存储到各第二节点中。因此,采用计算各节点的存储优先级的方式来实现对各文件块的分布式存储,可以充分提高区块链网络的存储资源利用率,提升区块链网络的吞吐量、提升数据存储的容错性以及提升数据传输的效率、稳定性,并可以确保网络吞吐、资源利用、容错性三个特性的平衡,从而可以解决现有技术中存在存储资源利用不均匀、数据传输稳定性低的问题。此外,由于文件索引的数据量较小,采用计算待存储文件与各节点的逻辑距离的方式,可以及时准确地确定出用于存储文件索引的各第三节点,并可以便于文件索引的快速定位。如此,可以实现将文件索引分布式存储到各第三节点中,以此可以消除现有技术中采用中心化方式存储文件索引的节点作恶的可能性,并可以提高文件索引存储的容错性以及能够使得区块链网络中存储资源利用的更加均衡,从而可以解决现有技术中存在文件索引存储中心化的问题。另外,通过将各第二节点的物理地址或互联网协议地址分别进行哈希运算,可以确保各第二节点的节点标识是唯一的,以便为后续准确地识别出对应的第二节点提供支持。同时,将各文件块的内容分别进行哈希运算,可以确保各文件块的文件块标识是唯一的,以便为后续准确地识别出对应的文件块提供支持。如此,基于各文件块标识以及对应的各第二节点的节点标识构建出文件索引,可以便于在后续查询存储文件时能够及时准确地查询出对应的文件块。

可选地,节点的存储优先级是根据节点的存储状况确定的,包括:

所述第一节点确定节点的网络贡献度、存储效率值和传输频率值;所述网络贡献度用于表示节点对区块链网络的吞吐量的贡献度;所述存储效率值用于表示节点的存储空间利用度;所述传输频率值用于表示节点与其它任一节点进行通信的频繁度;

所述第一节点根据所述节点的所述网络贡献度、所述存储效率值和所述传输频率值,确定所述节点的存储状况。

上述技术方案中,由于网络贡献度可以决定区块链网络的吞吐量以及文件块下载时的效率,存储效率值可以决定区块链网络中存储资源利用的均衡,以及传输频率值可以决定区块链网络中节点传输频率的均衡,因此通过根据区块链网络中每个节点的网络贡献度、存储效率值、传输频率值确定每个节点的存储状况,可以使得基于各节点的存储状况,所确定出的用于存储文件块的各第二节点更加可靠,也更加符合实际需要,以此实现对各文件块进行有效且合理地存储。

可选地,所述根据所述节点的所述网络贡献度、所述存储效率值和所述传输频率值,确定所述节点的存储状况,包括:

所述第一节点根据所述待存储文件的存储价值,确定所述网络贡献度的网络贡献权重、所述存储效率值的存储效率权重和所述传输频率值的传输频率权重;

所述第一节点根据所述节点的所述网络贡献度、所述存储效率值、所述传输频率值、所述网络贡献权重、所述传输频率权重和所述存储效率权重,确定所述节点的存储状况。

上述技术方案中,通常数据价值高的待存储文件应该存储区块链网络中网络贡献度高的区块链节点,并尽量存储在传输频率值低的区块链节点上。而且,存储在网络贡献度高的区块链节点可以使数据下载和读取时效率足够高,同时,存储在传输频率低的区块链节点,可以保证数据在区块链网络中数据存储分散,可以提升容错性。因此,通过引入待存储文件的存储价值,可以进一步提高所确定出的节点的存储状况的准确性,也使得确定出的节点的存储状况更加符合实际情况。

可选地,通过下述方式确定节点的网络贡献度:

所述第一节点确定所述节点的接收文件块的历史总流量和所述节点的上传文件块的历史总流量;

所述第一节点根据所述接收文件块的历史总流量和所述上传文件块的历史总流量,确定所述节点的网络贡献度。

上述技术方案中,由于节点的贡献度代表了节点的活跃度和参与度,因此通过根据节点接收文件块的历史总流量和上传文件块的历史总流量来确定节点的网络贡献度,如此,可以使得所确定出的节点的网络贡献度的准确性更高,更加符合实际情况,以便为后续准确地确定节点的存储优先级提供支持。

可选地,通过下述方式确定节点的传输频率值:

针对任一节点,所述第一节点确定出所述节点传输数据至所述第一节点的接收次数,并确定出所述第一节点传输数据至所述节点的上传次数;

所述第一节点根据所述接收次数和所述上传次数,确定所述节点的传输频率值。

上述技术方案中,由于传输频率值表示节点与其它任一节点进行通信的频繁度,通常在一定程度上将文件块存储至与第一节点通信较少的区块链节点,以此确保区块链网络中存储数据的离散性,并可以防止数据存储过度集中。因此,通过根据节点传输数据至第一节点的接收次数,以及第一节点传输数据至该节点的上传次数来确定该节点的传输频率值,如此,可以使得所确定出的该节点的传输频率值更加可靠,也更加符合实际情况,以便为后续准确地确定节点的存储优先级提供支持。

可选地,通过下述方式确定节点的存储效率值:

所述第一节点根据所述节点的总存储空间、已存储空间以及所述节点的处理器性能,确定所述节点的存储效率值。

上述技术方案中,由于存储效率值表示节点的存储空间利用度,通常在一定程度上尽量选择存储效率高的节点作为存储文件块的节点,以便确保区块链网站中存储资源的均衡利用。因此,通过根据节点的总存储空间、已存储空间以及节点的处理器性能来确定节点的存储效率值,可以使得所确定出的节点的存储效率值更加可靠,也更加符合实际情况,以便为后续准确地确定节点的存储优先级提供支持。

可选地,所述待存储文件的存储价值通过如下方式确定:

所述第一节点根据所述待存储文件的被使用频率和所述待存储文件的数据价值,确定所述待存储文件的存储价值;

所述根据所述待存储文件的存储价值,确定所述网络贡献度的网络贡献权重、所述存储效率值的存储效率权重和所述传输频率值的传输频率权重,包括:

所述第一节点根据设定总权重以及所述待存储文件的存储价值,确定所述网络贡献权重、所述存储效率权重以及所述传输频率权重。

上述技术方案中,通过根据待存储文件的被使用频率和待存储文件的数据价值,可以准确地确定出待存储文件的存储价值,以便为后续基于设定总权重以及待存储文件的存储价值,来确定网络贡献权重、存储效率权重以及传输频率权重提供支持。

可选地,通过下述方式确定文件索引的标识:

所述第一节点将待存储文件的内容进行哈希运算,生成所述待存储文件的第三哈希值,并将所述第三哈希值作为所述待存储文件的文件索引标识;

所述第一节点将所述文件索引标识作为文件索引的标识。

上述技术方案中,将待存储文件的内容进行哈希运算,可以确保文件索引的文件索引标识是唯一的,以便为后续准确地识别出对应的文件索引提供支持。

可选地,在将所述文件索引存储至对应的各第三节点之后,还包括:

所述第一节点接收文件查询请求;所述文件查询请求中包括文件索引标识;

所述第一节点确定所述文件索引标识与区块链网络中除所述第一节点以外的每个节点的逻辑距离;根据各节点的逻辑距离,确定各第四节点;

所述第一节点从所述各第四节点获取所述文件索引标识对应的文件索引;

所述第一节点从所述文件索引中确定出各文件块标识以及对应的各第二节点的节点标识;

针对每个文件块标识,所述第一节点从所述文件块标识所关联的各第二节点中确定出所述文件块标识对应的文件块;

所述第一节点将各文件块进行存储。

上述技术方案中,在查询存储文件时,通过确定出距离文件索引标识最近的多个区块链节点,并通过对该多个区块链节点进行依次检索,可以及时准确地获取到文件索引。再基于文件索引中存储的各文件块标识以及对应的各第二节点的节点标识,能够从每个文件块标识所关联的各第二节点中快速查询出每个文件块标识对应的文件块。如此,通过对区块链网络中距离文件索引标识最近的至少一个区块链节点进行依次检索查询,可以确保分布式存储的可用性,并可以确保能够及时准确地查询到对应的各文件块,以供用户及时使用。

第二方面,本发明实施例还提供了一种基于区块链的分布式文件存储装置,包括:

拆分单元,用于将待存储文件拆分为多个文件块;所述第一节点为区块链网络中任一节点;

处理单元,用于针对每个文件块,基于各节点的存储优先级确定出用于存储所述文件块的各第二节点;其中,节点的存储优先级是根据节点的存储状况确定的;所述第二节点为所述区块链网络中除所述第一节点以外的任一节点;基于每个文件块对应的第二节点,将所述第二节点的物理地址或互联网协议地址进行哈希运算,生成所述第二节点的第一哈希值,并将所述第一哈希值作为所述第二节点的节点标识;针对每个文件块,将所述文件块的内容进行哈希运算,生成所述文件块的第二哈希值,并将所述第二哈希值作为所述文件块的文件块标识;根据各文件块的文件块标识和对应的各第二节点的节点标识,生成文件索引,并基于所述文件索引的标识与各节点的逻辑距离,确定出用于存储所述文件索引的各第三节点;所述第三节点为所述区块链网络中除所述第一节点以外的任一节点;将各文件块存储至对应的各第二节点并将所述文件索引存储至对应的各第三节点。

可选地,所述处理单元具体用于:

确定节点的网络贡献度、存储效率值和传输频率值;所述网络贡献度用于表示节点对区块链网络的吞吐量的贡献度;所述存储效率值用于表示节点的存储空间利用度;所述传输频率值用于表示节点与其它任一节点进行通信的频繁度;

根据所述节点的所述网络贡献度、所述存储效率值和所述传输频率值,确定所述节点的存储状况。

可选地,所述处理单元具体用于:

根据所述待存储文件的存储价值,确定所述网络贡献度的网络贡献权重、所述存储效率值的存储效率权重和所述传输频率值的传输频率权重;

根据所述节点的所述网络贡献度、所述存储效率值、所述传输频率值、所述网络贡献权重、所述传输频率权重和所述存储效率权重,确定所述节点的存储状况。

可选地,所述处理单元具体用于:

确定所述节点的接收文件块的历史总流量和所述节点的上传文件块的历史总流量;

根据所述接收文件块的历史总流量和所述上传文件块的历史总流量,确定所述节点的网络贡献度。

可选地,所述处理单元具体用于:

针对任一节点,确定出所述节点传输数据至所述第一节点的接收次数,并确定出所述第一节点传输数据至所述节点的上传次数;

根据所述接收次数和所述上传次数,确定所述节点的传输频率值。

可选地,所述处理单元具体用于:

根据所述节点的总存储空间、已存储空间以及所述节点的处理器性能,确定所述节点的存储效率值。

可选地,所述处理单元具体用于:

根据所述待存储文件的被使用频率和所述待存储文件的数据价值,确定所述待存储文件的存储价值;

所述处理单元具体用于:

根据设定总权重以及所述待存储文件的存储价值,确定所述网络贡献权重、所述存储效率权重以及所述传输频率权重。

可选地,所述处理单元具体用于:

将待存储文件的内容进行哈希运算,生成所述待存储文件的第三哈希值,并将所述第三哈希值作为所述待存储文件的文件索引标识;

将所述文件索引标识作为文件索引的标识。

可选地,所述处理单元还用于:

在将所述文件索引存储至对应的各第三节点之后,接收文件查询请求;所述文件查询请求中包括文件索引标识;

确定所述文件索引标识与区块链网络中除所述第一节点以外的每个节点的逻辑距离;根据各节点的逻辑距离,确定各第四节点;

从所述各第四节点获取所述文件索引标识对应的文件索引;

从所述文件索引中确定出各文件块标识以及对应的各第二节点的节点标识;

针对每个文件块标识,从所述文件块标识所关联的各第二节点中确定出所述文件块标识对应的文件块;

将各文件块进行存储。

第三方面,本发明实施例提供一种计算设备,包括至少一个处理器以及至少一个存储器,其中,所述存储器存储有计算机程序,当所述程序被所述处理器执行时,使得所述处理器执行上述第一方面任意所述的基于区块链的分布式文件存储方法。

第四方面,本发明实施例提供一种计算机可读存储介质,其存储有可由计算设备执行的计算机程序,当所述程序在所述计算设备上运行时,使得所述计算设备执行上述第一方面任意所述的基于区块链的分布式文件存储方法。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种分布式存储系统架构的示意图;

图2为本发明实施例提供的一种基于区块链的分布式文件存储方法的流程示意图;

图3为本发明实施例提供的一种文件索引的链表结构示意图;

图4为本发明实施例提供的一种存储待存储子文件块的结构示意图;

图5为本发明实施例提供的一种存储文件索引的结构示意图;

图6为本发明实施例提供的一种基于区块链的分布式文件存储装置的结构示意图;

图7为本发明实施例提供的一种计算设备的结构示意图。

具体实施方式

为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

下面首先对本发明实施例中涉及的部分用语进行解释说明,以便于本领域技术人员进行理解。

(1)SHA-1:安全散列算法,可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数。

(2)哈希运算:把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。

(3)节点:网络中的每一个参与者就是一个节点,节点参与网络组建和数据交换。在区块链网络中,一个节点是指一个具有唯一身份的参与者,该节点具有参与区块链网络共识的能力。

如上介绍了本发明实施例中涉及的部分用语,下面对本发明实施例涉及的技术特征进行介绍。

为了便于理解本发明实施例,首先以图1中示出的系统结构为例说明适用于本发明实施例的分布式存储系统架构。该分布式存储系统架构可以应用于区块链网络中的文件存储等。如图1所示,该分布式存储系统架构可以包括用户端100和区块链网络200。其中,区块链网络200可以与用户端100进行连接,比如,可以通过有线方式连接,或者可以通过无线方式连接,本发明实施例对此并不作限定。其中,该区块链网络200中可以包括至少一个区块链节点,至少一个区块链节点中任意两个区块链节点进行通信连接,从而共同维护区块链网络200,比如区块链节点201、区块链节点202、区块链节点203和区块链节点204等,区块链节点201至204中任意两个区块链节点可以进行通信连接。

其中,在用户端100需要采用分片存储的方式存储待存储数据时,可以选择区块链网络200中任一区块链节点作为上传待存储数据的上传节点,该上传节点负责将待存储数据进行拆分处理,得到多个待存储子数据。再从区块链网络200中的其它各区块链节点中确定出用于存储待存储子数据的至少一个存储节点。然后,将多个待存储子数据存储到至少一个存储节点中。

需要说明的是,针对区块链网络200中任一区块链节点,该区块链节点可以是设置在一台独立的物理机上,比如该区块链节点可以是该独立的物理机,或者可以是该独立的物理机上运行的一个进程或者一系列进程,本发明实施例对此并不作限定。

示例性地,以用户端100选择区块链网络200中的区块链节点201作为上传待存储数据的上传节点进行描述本发明实施例分布式文件存储的过程。首先,区块链节点201接收用户端100发送的数据分布式存储请求,该数据分布式存储请求中包括待存储数据。在接收到数据分布式存储请求后,区块链节点将待存储数据进行拆分处理,得到多个待存储子数据,比如待存储子数据1、待存储子数据2和待存储子数据3。再从区块链网络200中的其它各区块链节点中确定出用于存储待存储子数据的至少一个存储节点,比如区块链节点203和区块链节点204。然后,将待存储子数据1、待存储子数据2和待存储子数据3存储到区块链节点203和区块链节点204中。比如,可以将待存储子数据1、待存储子数据2和待存储子数据3存储到区块链节点203既存储到区块链节点203中,也存储到区块链节点204中,或者,可以将待存储子数据1和待存储子数据2存储到区块链节点203中,将待存储子数据2和待存储子数据3存储到区块链节点204中,具体可以有多种方式进行存储,本发明实施例对此并不作限定。

需要说明的是,上述图1所示的结构仅是一种示例,本发明实施例对此不做限定。

基于上述描述,图2示例性的示出了本发明实施例提供的一种基于区块链的分布式文件存储方法的流程,该流程可以由基于区块链的分布式文件存储装置执行。

如图2所示,该流程具体包括:

步骤201,第一节点将待存储文件拆分为多个文件块。

步骤202,针对每个文件块,所述第一节点基于各节点的存储优先级确定出用于存储所述文件块的各第二节点。

步骤203,基于每个文件块对应的第二节点,所述第一节点将所述第二节点的物理地址或互联网协议地址进行哈希运算,生成所述第二节点的第一哈希值,并将所述第一哈希值作为所述第二节点的节点标识;针对每个文件块,将所述文件块的内容进行哈希运算,生成所述文件块的第二哈希值,并将所述第二哈希值作为所述文件块的文件块标识。

步骤204,所述第一节点根据各文件块的文件块标识和对应的各第二节点的节点标识,生成文件索引,并基于所述文件索引的标识与各节点的逻辑距离,确定出用于存储所述文件索引的各第三节点。

步骤205,所述第一节点将各文件块存储至对应的各第二节点并将所述文件索引存储至对应的各第三节点。

上述步骤201中,通常在存储待存储文件时,采用分片存储的方式进行存储待存储文件。即,将待存储文件拆分为多个文件块,再将该多个文件块进行存储到至少一个存储节点中。具体地,第一节点在接收到用户端发送的文件分布式存储请求时,该文件分布式存储请求中包括待存储文件,将待存储文件拆分为多个固定大小的待存储子文件,每个待存储子文件的大小标记为sliceLength,针对每个待存储子文件,将该待存储子文件与该待存储子文件在待存储文件中所处的位置的位序值Sequence共同打包为文件块(或者称为待存储子文件块)。

示例性地,将待存储文件拆分为5个待存储子文件,针对每个待存储子文件,将该待存储子文件与该待存储子文件在待存储文件中所处的位置的位序值共同打包为FB_Package,即该5个待存储子文件各自对应的待存储子文件块为FB_Package_a、FB_Package_b、FB_Package_c、FB_Package_d和FB_Package_e。其中,每个待存储子文件的大小sliceLength=12MB。

然后,针对每个文件块,第一节点将文件块的内容进行哈希运算,生成文件块的第二哈希值,并将第二哈希值作为文件块的文件块标识。示例性地,假设有5个文件块,即FB_Package_a、FB_Package_b、FB_Package_c、FB_Package_d和FB_Package_e。上传节点分别将5个文件块的内容做哈希运算(比如SHA-1运算或消息摘要算法等),得到该5个文件块各自的哈希值,将每个文件块的哈希值作为该文件块的唯一标识,即得到FB_CId_a、FB_CId_b、FB_CId_c、FB_CId_d和FB_CId_e。

上述步骤202中,第一节点基于各节点的存储优先级确定出用于存储文件块的各第二节点。其中,节点的存储优先级是根据节点的存储状况确定的;第二节点为区块链网络中除第一节点以外的任一节点。

具体地,第一节点首先确定节点的网络贡献度、存储效率值和传输频率值,再根据节点的网络贡献度、存储效率值和传输频率值,确定节点的存储状况。再根据各节点的存储状况确定各节点的存储优先级,并将各节点的存储优先级按照从小到大的顺序进行排序,得到排序后的存储优先级列表。然后,从排序后的存储优先级列表确定出位置处于前列的存储优先级所对应的各第二节点。如此,采用计算各节点的存储优先级的方式来实现对各文件块的分布式存储,可以充分提高区块链网络的存储资源利用率,提升区块链网络的吞吐量、提升数据存储的容错性以及提升数据传输的效率、稳定性,并可以确保网络吞吐、资源利用、容错性三个特性的平衡,从而可以解决现有技术中存在存储资源利用不均匀、数据传输稳定性低的问题。其中,网络贡献度用于表示节点对区块链网络的吞吐量的贡献度;存储效率值用于表示节点的存储空间利用度;传输频率值用于表示节点与其它任一节点进行通信的频繁度。

针对确定节点的存储状况的实施过程,第一节点首先根据待存储文件的被使用频率和待存储文件的数据价值,确定待存储文件的存储价值,并根据设定总权重以及待存储文件的存储价值,确定网络贡献度的网络贡献权重、存储效率值的存储效率权重和传输频率值的传输频率权重。再根据节点的网络贡献度、存储效率值、传输频率值、网络贡献权重、传输频率权重和存储效率权重,确定节点的存储状况。由于通常数据价值高的待存储文件应该存储区块链网络中网络贡献度高的区块链节点,并尽量存储在传输频率值低的区块链节点上。而且,存储在网络贡献度高的区块链节点可以使数据下载和读取时效率足够高,同时,存储在传输频率低的区块链节点,可以保证数据在区块链网络中数据存储分散,可以提升容错性。因此,通过引入待存储文件的存储价值,可以进一步提高所确定出的节点的存储状况的准确性,也使得确定出的节点的存储状况更加符合实际情况。

其中,通过下述方式确定节点的网络贡献度,即,第一节点确定节点的接收文件块的历史总流量和节点的上传文件块的历史总流量,并根据接收文件块的历史总流量和上传文件块的历史总流量,确定节点的网络贡献度。由于节点的贡献度代表了节点的活跃度和参与度,因此通过根据节点接收文件块的历史总流量和上传文件块的历史总流量来确定节点的网络贡献度,如此,可以使得所确定出的节点的网络贡献度的准确性更高,更加符合实际情况,以便为后续准确地确定节点的存储优先级提供支持。

通过下述方式确定节点的传输频率值,即,针对任一节点,第一节点确定出节点传输数据至第一节点的接收次数,并确定出第一节点传输数据至节点的上传次数。再根据接收次数和上传次数,确定节点的传输频率值。由于传输频率值表示节点与其它任一节点进行通信的频繁度,通常在一定程度上将文件块存储至与第一节点通信较少的区块链节点,以此确保区块链网络中存储数据的离散性,并可以防止数据存储过度集中。因此,通过根据节点传输数据至第一节点的接收次数,以及第一节点传输数据至该节点的上传次数来确定该节点的传输频率值,如此,可以使得所确定出的该节点的传输频率值更加可靠,也更加符合实际情况,以便为后续准确地确定节点的存储优先级提供支持。

通过下述方式确定节点的存储效率值,即,第一节点根据节点的总存储空间、已存储空间以及节点的处理器性能,确定节点的存储效率值。由于存储效率值表示节点的存储空间利用度,通常在一定程度上尽量选择存储效率高的节点作为存储文件块的节点,以便确保区块链网站中存储资源的均衡利用。因此,通过根据节点的总存储空间、已存储空间以及节点的处理器性能来确定节点的存储效率值,可以使得所确定出的节点的存储效率值更加可靠,也更加符合实际情况,以便为后续准确地确定节点的存储优先级提供支持。

上述步骤203和步骤204中,针对每个第二节点,第一节点将该第二节点的物理地址或互联网协议地址进行哈希运算,生成第二节点的第一哈希值,并将第一哈希值作为第二节点的节点标识。再根据各文件块的文件块标识和对应的各第二节点的节点标识,生成文件索引,并将文件索引标识作为文件索引的标识。如此,基于各文件块标识以及对应的各第二节点的节点标识构建出文件索引,以便在后续查询存储文件时可以及时准确地查询出对应的文件块。然后,根据各文件块的文件块标识和对应的各第二节点的节点标识,生成文件索引,并基于文件索引的标识与各节点的逻辑距离,确定出用于存储文件索引的各第三节点。其中,第三节点为区块链网络中除第一节点以外的任一节点。此外,第一节点也会根据待存储文件的内容进行哈希运算,生成待存储文件的第三哈希值,并将第三哈希值作为待存储文件的文件索引标识,该文件索引标识即为文件索引的标识。如此,可以确保文件索引的文件索引标识是唯一的,以便为后续准确地识别出对应的文件索引提供支持。

此外,第一节点在确定各第三节点时,将待存储文件的文件索引标识和区块链网络中其它节点的节点标识进行异或运算即可得到文件索引和其它节点之间的逻辑距离。再根据文件索引和其它节点之间的逻辑距离,确定出用于存储文件索引的各第三节点,即,将各逻辑距离按照从小到大的顺序进行排序,得到排序后的逻辑距离列表,并从排序后的逻辑距离列表确定出位置处于前列的逻辑距离所对应的各第三节点。如此,由于文件索引的数据量较小,采用计算待存储文件与各节点的逻辑距离的方式,可以及时准确地确定出用于存储文件索引的各第三节点,并可以便于文件索引的快速定位。如此,可以实现将文件索引分布式存储到各第三节点中,以此可以消除现有技术中采用中心化方式存储文件索引的节点作恶的可能性,并可以提高文件索引存储的容错性以及能够使得区块链网络中存储资源利用的更加均衡,从而可以解决现有技术中存在文件索引存储中心化的问题。

上述步骤205中,第一节点将各文件块存储至对应的各第二节点并将文件索引存储至对应的各第三节点。具体地,第一节点可以将各文件块中每个文件块分别存储至各第二节点中,比如,当前需要存储的FB_Package_a、FB_Package_b、FB_Package_c和FB_Package_d四个文件块存储到NodeA、NodeB和NodeC三个存储节点中,将FB_Package_a、FB_Package_b、FB_Package_c和FB_Package_d存储至NodeA中,将FB_Package_a、FB_Package_b、FB_Package_c和FB_Package_d存储至NodeB中,将FB_Package_a、FB_Package_b、FB_Package_c和FB_Package_d存储至NodeC中,或者,也可以采用其它方式进行存储,比如,当前需要存储的FB_Package_a、FB_Package_b、FB_Package_c和FB_Package_d四个文件块存储到NodeA、NodeB和NodeC三个存储节点中,将FB_Package_a和FB_Package_b存储至NodeA中,将FB_Package_b和FB_Package_c存储至NodeB中,将FB_Package_c和FB_Package_d存储至NodeC中,本发明实施例对此并不作限定。同时,第一节点可以将文件索引分别存储至各第三节点中。

此外,在将文件索引存储至对应的各第三节点之后,第一节点接收文件查询请求,该文件查询请求中包括文件索引标识。再确定文件索引标识与区块链网络中除第一节点以外的每个节点的逻辑距离,并根据各节点的逻辑距离,确定出各第四节点。然后,从各第四节点获取文件索引标识对应的文件索引,并从文件索引中确定出各文件块标识以及对应的各第二节点的节点标识。最后,针对每个文件块标识,从文件块标识所关联的各第二节点中确定出文件块标识对应的文件块,并将各文件块进行存储在第一节点的本地。基于此,在查询存储文件时,通过确定出距离文件索引标识最近的多个区块链节点,并通过对该多个区块链节点进行依次检索,可以及时准确地获取到文件索引。再基于文件索引中存储的各文件块标识以及对应的各第二节点的节点标识,能够从每个文件块标识所关联的各第二节点中快速查询出每个文件块标识对应的文件块。如此,通过对区块链网络中距离文件索引标识最近的至少一个区块链节点进行依次检索查询,可以确保分布式存储的可用性,并可以确保能够及时准确地查询到对应的各文件块,以供用户及时使用。

基于此,下面以区块链网络中任一区块链节点作为上传待存储文件的上传节点,对本发明实施例中基于区块链的分布式文件存储方法的实施过程进行具体描述。

Step1:上传节点接收用户端发送的文件分布式存储请求。

用户端在需要采用分片存储的方式存储待存储文件时,可以选择区块链网络中任一区块链节点作为上传待存储文件的上传节点。在选择出上传节点后,用户端可以向该上传节点发送文件分布式存储请求,该文件分布式存储请求中包括待存储文件。该上传节点在接收到文件分布式存储请求后,确定区块链网络中其它各区块链节点各自的节点标识。具体地,针对其它各区块链节点中任一区块链节点,上传节点可以根据该区块链节点的物理地址(Medium/Media Access Control,MAC地址)或互联网协议地址(Internet ProtocolAddress,IP地址)进行哈希运算,生成该区块链节点的第一哈希值,并将第一哈希值作为该区块链节点的节点标识。

假设区块链网络中除了上传节点以外还有4个区块链节点,比如区块链节点A、区块链节点B、区块链节点C和区块链节点D,即NodeA、NodeB、NodeC和NodeD。示例性地,以根据区块链节点的物理地址进行哈希运算为例进行描述确定区块链节点的节点标识的实施过程。具体地,针对NodeA、NodeB、NodeC和NodeD,根据NodeA的物理地址进行哈希运算可以得到20字节的哈希值,并将该哈希值作为NodeA的唯一标识,即Node_ID(NodeA)。根据NodeB的物理地址进行哈希运算可以得到20字节的哈希值,并将该哈希值作为NodeB的唯一标识,即Node_ID(NodeB)。根据NodeC的物理地址进行哈希运算可以得到20字节的哈希值,并将该哈希值作为NodeC的唯一标识,即Node_ID(NodeC)。根据NodeD的物理地址进行哈希运算可以得到20字节的哈希值,并将该哈希值作为NodeD的唯一标识,即Node_ID(NodeD)。

Step2:上传节点对待存储文件进行拆分处理,生成多个待存储子文件。

上传节点对用户端发送的待存储文件进行拆分处理,将待存储文件拆分为m个待存储子文件。具体地,将待存储文件拆分为m个固定大小的待存储子文件,每个待存储子文件的大小标记为sliceLength,针对每个待存储子文件,将该待存储子文件与该待存储子文件在待存储文件中所处的位置的位序值Sequence共同打包为待存储子文件块,即FB_Package。其中,m的大小可以根据本领域技术人员的经验或根据具体的应用场景进行设置,本发明实施例对此并不作限定。

示例性地,将待存储文件拆分为4个待存储子文件,针对每个待存储子文件,将该待存储子文件与该待存储子文件在待存储文件中所处的位置的位序值共同打包为FB_Package,即该4个待存储子文件各自对应的待存储子文件块为FB_Package_1、FB_Package_2、FB_Package_3和FB_Package_4。其中,每个待存储子文件的大小sliceLength=10MB。

Step3:上传节点将每个待存储子文件进行哈希运算,确定出每个待存储子文件的哈希值,并将每个待存储子文件的哈希值作为对应的每个待存储子文件的子文件标识。

针对拆分后的m个待存储子文件块中任一待存储子文件块,上传节点将该待存储子文件块的内容进行哈希运算,确定出该待存储子文件块的哈希值,并将该待存储子文件块的哈希值作为该存储子文件块的唯一标识,即FB_CId。

示例性地,假设有4个待存储子文件块,即FB_Package_1、FB_Package_2、FB_Package_3和FB_Package_4。上传节点将FB_Package_1的内容做哈希运算(比如SHA-1运算或消息摘要算法等),得到20字节的哈希值,将该20字节的哈希值作为FB_Package_1的唯一标识,即FB_CId_1。将FB_Package_2的内容做哈希运算(比如SHA-1运算或消息摘要算法等),得到20字节的哈希值,将该20字节的哈希值作为FB_Package_2的唯一标识,即FB_CId_2。将FB_Package_3的内容做哈希运算(比如SHA-1运算或消息摘要算法等),得到20字节的哈希值,将该20字节的哈希值作为FB_Package_3的唯一标识,即FB_CId_3。将FB_Package_4的内容做哈希运算(比如SHA-1运算或消息摘要算法等),得到20字节的哈希值,将该20字节的哈希值作为FB_Package_4的唯一标识,即FB_CId_4。

Step4:上传节点构造待存储文件的文件索引。

上传节点采用链表的结构形式来构造待存储文件的文件索引FileIndex。其中,该文件索引中存储了待存储文件拆分后的各待存储子文件块的子文件块标识FB_CId和子文件块标识对应的待存储子文件块所存储节点的Node_ID集合列表,该Node_ID集合列表标记为FB_Node_List。

参考图3,图3为本发明实施例提供的一种文件索引的链表结构示意图。基于该图3,文件索引FileIndex中存储了每个待存储子文件块标识以及每个待存储子文件块标识对应的待存储子文件块所存储的节点列表。根据该文件索引可以查询到每个待存储子文件块标识,并基于每个待存储子文件块标识可以从存储待存储子文件块的各存储节点中查询到对应的待存储子文件块。

示例性地,假设有4个待存储子文件块标识,即FB_CId_1、FB_CId_2、FB_CId_3和FB_CId_4。以FB_CId_1为例,假设FB_CId_1对应的待存储子文件块FB_Package_1存储在NodeA、NodeB和NodeC三个节点中。则FB_CId_1对应的待存储子文件块FB_Package_1所存储的节点集合列表FB_Node_List可以如表1所示。

表1

需要说明的是,FB_CId_2、FB_CId_3和FB_CId_4所对应的存储节点结合列表均可以按照FB_CId_1所对应的存储节点结合列表的构造方式进行构造,在此不再赘述。

此外,上传节点可以对待存储文件的内容进行哈希运算(比如SHA-1运算或消息摘要算法等),得到20字节的哈希值,并将该20字节的哈希值作为文件索引FileIndex的唯一标识,即FileIndex_CId。

Step5:上传节点从区块链网络中其它各区块链节点中确定出符合第一设定条件的至少一个区块链节点,并将各待存储子文件块上传至该至少一个区块链节点中。

具体地,上传节点通过结合网络贡献度、存储效率、传输频率对区块链网络中其它各区块链节点进行综合评估,确定出针对其它各区块链节点的存储优先级记录。再基于该存储优先级记录确定出符合第一设定条件的至少一个区块链节点,并将各待存储子文件块上传至该至少一个区块链节点中。

示例性地,假设有4个待存储子文件块,即FB_Package_1、FB_Package_2、FB_Package_3和FB_Package_4。其中,每个待存储子文件块可以上传至存储优先级记录中优先级最高的i(3≤i≤8)个区块链节点上,当然,本领域技术人员也可以根据经验或根据实际的应用场景对i进行设置。比如,从存储优先级记录中确定出优先级最高的3个区块链节点,即NodeA、NodeB和NodeC。则可以将FB_Package_1、FB_Package_2、FB_Package_3和FB_Package_4分别存储到NodeA、NodeB和NodeC三个区块链节点中,即将FB_Package_1、FB_Package_2、FB_Package_3和FB_Package_4存储到NodeA中,将FB_Package_1、FB_Package_2、FB_Package_3和FB_Package_4存储到NodeB中,将FB_Package_1、FB_Package_2、FB_Package_3和FB_Package_4存储到NodeC中。当然,也可以将FB_Package_1、FB_Package_2存储到NodeA中,将FB_Package_2、FB_Package_3存储到NodeB中,将FB_Package_1、FB_Package_3和FB_Package_4存储到NodeC中,具体可以有多种方式进行存储,本发明实施例对此并不作限定。

下面对本发明实施例中通过结合网络贡献度、存储效率、传输频率对区块链网络中其它各区块链节点进行综合评估,确定出针对其它各区块链节点的存储优先级记录的实施过程进行描述。

其中,上传节点计算区块链网络中其它各区块链节点的存储优先级,可以得到存储优先级记录(存储优先级列表),即Z_List。该Z_List中包含区块链节点标识Node_ID和对应的Z值,Z为存储优先级基准值,Z值是由网络贡献度R、存储效率值S、传输频率值P计算得到。而且,Z值越小,代表区块链节点的存储优先级越高。示例性地,该存储优先级列表的结构形式可以如表2所示。

表2

其中,Z_List是按照从小到大的顺序对各Z值进行排列,即按照Z值递增的顺序进行排列,如此,基于表2即可知,Z(NodeA)

步骤a、上传节点确定区块链网络中其它各区块链节点的网络贡献度。

针对区块链网络中其它各区块链节点每个区块链节点,上传节点根据该区块链节点接收待存储子文件块(或待存储文件)的历史总流量以及上传待存储子文件块的历史总流量,确定该区块链节点的网络贡献度。

其中,区块链节点的网络贡献度代表了区块链节点的活跃度和参与度,网络贡献度越高的区块链节点,对于网络吞吐量贡献越大,在下载待存储子文件块时的效率也越高。

具体地,上传节点在需要获取区块链网络中其它各区块链节点的各种类型的流量情况时,可以基于区块链网络中其它各区块链节点各自的互联网协议地址向其它各区块链节点发送流量获取请求,以用于获取在流量获取请求发送时刻之前其它各区块链节点接收待存储子文件块的历史总流量以及上传待存储子文件块的历史总流量。针对其它各区块链节点中每个区块链节点,该区块链节点在接收到流量获取请求后,将自己本地存储的接收待存储子文件块的历史总流量以及上传待存储子文件块的历史总流量发送给上传节点。或者,也可以设置一个流量监控中心,该流量监控中心用于监控区块链网络中各区块链节点接收待存储子文件块的流量情况以及上传待存储子文件块的流量情况,并对监控的各区块链节点接收待存储子文件块的流量情况以及上传待存储子文件块的流量情况进行存储。如此,上传节点在需要获取区块链网络中其它各区块链节点接收待存储子文件块的流量情况以及上传待存储子文件块的流量情况时,可以向流量监控中心发送流量获取请求,以用于获取在流量获取请求发送时刻之前其它各区块链节点接收待存储子文件块的历史总流量以及上传待存储子文件块的历史总流量,该流量获取请求中包括流量获取对象(比如区块链节点标识)以及具体获取什么样的流量(比如获取区块链节点接收待存储子文件块的流量以及上传待存储子文件块的流量)。流量监控中心在接收到流量获取请求后,将对应区块链节点接收待存储子文件块的流量情况以及上传待存储子文件块的流量情况发送给上传节点。

针对区块链网络中其它各区块链节点中每个区块链节点,上传节点在获取到该区块链节点的接收待存储子文件块的历史流量SQ以及上传待存储子文件块的历史总流量UQ后,就可以计算该区块链节点的网络贡献度R。其中,该网络贡献度R的计算公式可以为:

其中,R(Ratio)表示其它各区块链节点中任一区块链节点的网络贡献度,SQ表示接收待存储子文件块的历史总流量,UQ表示上传待存储子文件块的历史总流量,流量为数据的字节大小,单位为byte。

需要说明的是,针对任一区块链节点,若该区块链节点的R越低,表示该区块链节点对网络的贡献度越大。

示例性地,假设区块链网络中除了上传节点以外还有4个区块链节点,即NodeA、NodeB、NodeC和NodeD。比如NodeA接收待存储子文件块的历史总流量SQ=100Mb,上传待存储子文件块至区块链网络中的历史总流量UQ=10000Mb,则基于计算R的公式可以计算出NodeA的网络贡献度R(NodeA)=1。比如NodeB接收待存储子文件块的历史总流量SQ=200Mb,上传待存储子文件块至区块链网络中的历史总流量UQ=10000Mb,则基于计算R的公式可以计算出NodeB的网络贡献度R(NodeB)=2。比如NodeC接收待存储子文件块的历史总流量SQ=300Mb,上传待存储子文件块至区块链网络中的历史总流量UQ=10000Mb,则基于计算R的公式可以计算出NodeC的网络贡献度R(NodeC)=3。比如NodeD接收待存储子文件块的历史总流量SQ=400Mb,上传待存储子文件块至区块链网络中的历史总流量UQ=10000Mb,则基于计算R的公式可以计算出NodeD的网络贡献度R(NodeD)=4。

基于上述所计算出的各区块链节点的网络贡献度R,即可确定出一个网络贡献度节点列表R_List。示例性地,该网络贡献度节点列表的结构形式可以如表3所示。其中,该网络贡献度节点列表记录有各区块链节点标识Node_ID以及对应的网络贡献度R。

表3

其中,R_List是按照从小到大的顺序对各R值进行排列,即按照R值递增的顺序进行排列,如此,基于表3即可知,R(NodeA)

此外,按照上述示例所计算出的其它各区块链节点各自的网络贡献度,则可以得出对应的网络贡献度节点列表如表4所示。

表4

步骤b、上传节点确定区块链网络中其它各区块链节点的传输频率值。

针对区块链网络中其它各区块链节点,上传节点从本地存储的网络传输频率统计表中确定出其它各区块链节点各自的传输频率值。

其中,基于网络传输频率统计表,在一定程度上尽量选择与上传节点通信较少的区块链节点进行上传待存储子文件块,这样可以保证区块链网络中待存储子文件块的离散性,防止待存储子文件块的存储过度集中。

具体地,每个区块链节点都会维护一个网络传输频率统计表,即P_List,该网络传输频率统计表记录有区块链节点标识Node_ID和对应的传输频率值P。区块链节点的传输频率越低,表示该区块链节点与上传节点之间的通信越少,上传节点可以尽可能选择该区块链节点进行上传待存储子文件块。示例性地,该网络传输频率统计表的结构形式可以如表5所示。

表5

其中,P_List是按照从小到大的顺序对各P值进行排列,即按照P值递增的顺序进行排列,如此,基于表5即可知,P(NodeA)

进一步地,上传节点在本地会维护一个网络传输频率统计表,在每次与区块链网络中其它区块链节点进行数据传输后,对与自己进行数据传输连接的区块链节点所对应的传输次数P值进行累加。其中,对与上传节点存在数据传输连接的区块链节点的传输频率值进行累加的公式可以为:

P(Node(i))=P(Node(i))′+1

其中,P(Node(i))表示上传节点与其它区块链节点中任一区块链节点存在数据传输,对发生数据传输之前该区块链节点的传输频率值进行累加后的值,P(Node(i))′表示其它区块链节点中任一区块链节点与上传节点发生数据传输之前的传输频率值。

比如,以区块链节点NodeA传输数据给区块链节点NodeB为例,即NodeA作为上传节点,NodeB作为接收节点。NodeA在本地维护的网络传输频率统计表中对NodeB的传输频率值进行累加,即,在NodeA维护的网络传输频率统计表中,P(NodeB)=P(NodeB)′+1。同时,NodeB也会在自己本地维护的网络传输频率统计表中对NodeA的传输频率值进行累加,即,P(NodeA)=P(NodeA)′+1。

或者,示例性地,假设上传节点在本地维护的网络传输频率统计表记录有4个区块链节点的传输频率值,即P(NodeA)=1、P(NodeB)=2、P(NodeC)=3和P(NodeD)=4。假设上传节点向NodeA、NodeB和NodeC三个区块链节点上传待存储子文件块,则在将待存储子文件块传输给NodeA、NodeB和NodeC三个区块链节点后,将NodeA对应的传输频率值P(NodeA)进行累加,即NodeA对应的累加后的传输频率值=P(NodeA)+1=2;将NodeB对应的传输频率值P(NodeB)进行累加,即NodeB对应的累加后的传输频率值=P(NodeB)+1=3;将NodeC对应的传输频率值P(NodeC)进行累加,即NodeC对应的累加后的传输频率值=P(NodeC)+1=4。或者,假设上传节点向NodeA、NodeB、NodeC和NodeD四个区块链节点上传待存储子文件块,则在将待存储子文件块传输给NodeA、NodeB、NodeC和NodeD四个区块链节点后,将NodeA对应的传输频率值P(NodeA)进行累加,即NodeA对应的累加后的传输频率值=P(NodeA)+1=2;将NodeB对应的传输频率值P(NodeB)进行累加,即NodeB对应的累加后的传输频率值=P(NodeB)+1=3;将NodeC对应的传输频率值P(NodeC)进行累加,即NodeC对应的累加后的传输频率值=P(NodeC)+1=4;将NodeD对应的传输频率值P(NodeD)进行累加,即NodeD对应的累加后的传输频率值=P(NodeD)+1=5。同理,NodeA、NodeB、NodeC和NodeD四个区块链节点也会各自在自己本地维护的网络传输频率统计表中对上传节点的传输频率值进行累加。

此外,按照上述第二种示例所计算出的其它各区块链节点各自的传输频率值,则可以得出对应的网络传输频率统计表如表6所示。

表6

步骤c、上传节点确定区块链网络中其它各区块链节点的存储效率值。

针对区块链网络中其它各区块链节点每个区块链节点,根据该区块链节点的总存储空间、已存储空间以及处理器核心数,确定该区块链节点的存储效率值。

其中,针对同一待存储子文件块,存储效率越高的节点,优先级较高,考虑到网络节点的存储资源空间大小、CPU效率等因素的不同,通过尽量选择存储效率高的区块链节点可以确保网络中存储资源的均衡利用。

具体地,上传节点在需要获取区块链网络中其它各区块链节点的存储空间使用情况以及处理器核心数时,可以基于区块链网络中其它各区块链节点各自的互联网协议地址向其它各区块链节点发送数据获取请求,以用于获取在数据获取请求发送时刻之前其它各区块链节点的存储空间使用情况以及处理器核心数。针对其它各区块链节点中每个区块链节点,该区块链节点在接收到数据获取请求后,将自己的存储空间使用情况以及处理器核心数发送给上传节点。或者,也可以设置一个存储空间监控中心,该存储空间监控中心用于监控区块链网络中各区块链节点的存储空间使用情况,并对监控的各区块链节点的总存储空间、已使用存储空间以及处理器核心数进行记录。如此,上传节点在需要获取其它各区块链节点的存储空间使用情况以及处理器核心数时,可以向存储空间监控中心发送数据获取请求,以用于获取在数据获取请求发送时刻之前其它各区块链节点的总存储空间、已使用存储空间以及处理器核心数,该数据获取请求中包括数据获取对象(比如区块链节点标识)以及具体获取什么样的数据(比如获取区块链节点的存储空间使用情况以及处理器核心数)。存储空间监控中心在接收到数据获取请求后,将对应区块链节点的存储空间使用情况以及处理器核心数发送给上传节点。

针对区块链网络中其它各区块链节点中每个区块链节点,上传节点在获取到该区块链节点的总存储空间SM、已使用存储空间SD以及处理器核心数Count(CPU_Core)后,就可以计算该区块链节点的存储效率值S。其中,该存储效率值S的计算公式可以为:

其中,S表示其它各区块链节点中任一区块链节点的存储效率值,SM表示其它各区块链节点中任一区块链节点的总存储空间,SD表示其它各区块链节点中任一区块链节点的已存储空间,SL表示待存储子文件块所占用的空间大小,Count(CPU_Core)表示其它各区块链节点中任一区块链节点的处理器的核心数。

需要说明的是,针对任一区块链节点,若该区块链节点的S越低,表示该区块链节点的存储效率越大。

示例性地,假设区块链网络中除了上传节点以外还有4个区块链节点,即NodeA、NodeB、NodeC和NodeD,并以待存储子文件块FB_Package_1为例进行描述,假设待存储子文件块FB_Package_1所占用的空间大小为10MB,即SL=10MB。比如,对于NodeA,假设NodeA的总存储空间SM=1000MB,已存储空间SD=600MB,CPU核心数为8,则基于计算存储效率值S的计算公式可以计算出NodeA的存储效率值S(NodeA)=8。对于NodeB,假设NodeB的总存储空间SM=2000MB,已存储空间SD=500MB,CPU核心数为8,则基于计算存储效率值S的计算公式可以计算出NodeB的存储效率值S(NodeB)=15.5。对于NodeC,假设NodeC的总存储空间SM=3000MB,已存储空间SD=500MB,CPU核心数为8,则基于计算存储效率值S的计算公式可以计算出NodeC的存储效率值S(NodeC)=20。对于NodeD,假设NodeC的总存储空间SM=2000MB,已存储空间SD=800MB,CPU核心数为8,则基于计算存储效率值S的计算公式可以计算出NodeD的存储效率值S(NodeD)=13.9。

基于上述所计算出的各区块链节点的存储效率值S,即可确定出一个网络贡献度节点列表S_List。示例性地,该存储效率节点列表的结构形式可以如表7所示。其中,该存储效率节点列表记录有各区块链节点标识Node_ID以及对应的存储效率值S。

表7

其中,S_List是按照从大到小的顺序对各S值进行排列,即按照S值递减的顺序进行排列,如此,基于表7即可知,R(NodeC)>R(NodeB)>R(NodeA)。

此外,按照上述示例所计算出的其它各区块链节点各自的存储效率值,则可以得出对应的存储效率节点列表如表8所示。

表8

步骤d、上传节点确定区块链网络中其它各区块链节点的存储优先级基准值。

上传节点在确定出区块链网络中其它各区块链节点的网络贡献度、传输频率值以及存储效率值后,即可获得网络贡献度节点列表、网络传输频率统计表以及存储效率节点列表后,也就可以基于网络贡献度节点列表、网络传输频率统计表以及存储效率节点列表确定其它各区块链节点中每个区块链节点的存储优先级基准值。其中,每个区块链节点的存储优先级基准值可以满足下述形式:

其中,Node(i)表示其它各区块链节点中任一区块链节点,List

示例性地,假设区块链网络中除了上传节点以外还有4个区块链节点,即NodeA、NodeB、NodeC和NodeD。则对于NodeA,可以从网络贡献度节点列表中查询出NodeA的网络贡献度在网络贡献度节点列表中所处的位置Index(R(NodeA)),从网络传输频率统计表中查询出NodeA的传输频率值在网络传输频率统计表中所处的位置Index(P(NodeA)),以及从存储效率节点列表中查询出NodeA的存储效率值在存储效率节点列表中所处的位置Index(S(NodeA))。基于此,即可根据计算每个区块链节点的存储优先级基准值的方式计算出NodeA的存储优先级基准值,即Z(NodeA)=Index(R(NodeA))*q

需要说明的是,在计算存储优先级基准值确定存储优先级高低的过程中,存储效率值S决定区块链网络中区块链节点的存储资源利用的均衡,其权重越高,资源利用越均衡。但是,同时,如果存储效率值S的权重过高,则会导致网络吞吐量和文件下载效率的降低,并可能导致存储数据的过度集中化。传输频率值P决定区块链网络中区块链节点的传输频率的均衡,如此可促使数据存储的离散性,提升数据存储的容错性。但是,同时,如果传输频率值的权重过高,则会导致网络吞吐量和文件下载效率的降低。网络贡献度R决定网络流量的吞吐量以及文件下载时的效率,其权重越高,对网络吞吐量贡献越大。但是,同时,如果网络贡献度的权重过高,则会导致存储资源利用不均衡。基于此可知,结合网络贡献度R、存储效率值S和传输频率值P来确定区块链节点的存储优先级基准值,可以确保分布式网络的网络吞吐、资源利用、容错性三个特性的平衡。

下面对本发明实施例中确定网络贡献权重、存储效率权重或传输频率权重的实施过程进行描述。

基于上述可知,q

其中,网络贡献权重和存储效率权重的占比相同,对于数据存储价值越高的数据,两者权重越高,同时,传输频率权重占比越低。相反,对于数据存储价值越低的数据,即y值越低的数据,网络贡献权重和存储效率权重的占比越低,同时,传输频率权重占比越高。

基于此,即可根据数据存储价值以及网络贡献权重、存储效率权重和传输频率权重三者的总权重值,确定出网络贡献权重、存储效率权重和传输频率权重。其中,网络贡献权重、存储效率权重和传输频率权重的计算公式可以为:

其中,q

y表示数据本身的存储价值,由以下两个因素确定,即:

a、数据后续使用频率f

表9

b、数据本身价值λ,依据本领域技术人员的经验或根据实际应用场景进行设置,则λ的取值选择范围可以如表10所示。

表10

需要说明的是,y值越高,表示数据存储价值越高,应存储到区块链网络中网络贡献度高的区块链节点,并尽量存储在传输频率P值低的区块链节点上。存储在网络贡献度高的区块链节点可以使数据下载和读取时效率足够高,同时,存储在传输频率低的区块链节点,可以保证数据在区块链网络中数据存储分散,可以提升容错性。

其中,数据存储价值y的计算公式可以为:

y=f

示例性地,假设网络贡献权重、存储效率权重和传输频率权重三者的总权重值totalweight=10。由于一份文件是作为一个整体使用的,所以一个文件的所有子文件块的y值是相同的,比如,针对一个待存储文件,该待存储文件有FB_Package_1、FB_Package_2、FB_Package_3和FB_Package_4四个待存储子文件块,假设该待存储文件的后续使用频率为中,设置为0.5,该待存储文件的数据本身价值为中,取值为0.5,根据上述数据存储价值y的计算公式,可以计算出y=0.70。然后根据上述网络贡献权重、存储效率权重和传输频率权重的计算公式即可得出,

再以区块链网络中除了上传节点以外还有4个区块链节点为例,即NodeA、NodeB、NodeC和NodeD。则对于NodeA,可以从网络贡献度节点列表中查询出NodeA的网络贡献度在网络贡献度节点列表中所处的位置Index(R(NodeA))=1,从网络传输频率统计表中查询出NodeA的传输频率值在网络传输频率统计表中所处的位置Index(P(NodeA))=1,以及从存储效率节点列表中查询出NodeA的存储效率值在存储效率节点列表中所处的位置Index(S(NodeA))=4。基于此,即可根据计算每个区块链节点的存储优先级基准值的方式计算出NodeA的存储优先级基准值,即Z(NodeA)=1×3.5+1×3+4×3.5=20.5。对于NodeB,可以从网络贡献度节点列表中查询出NodeB的网络贡献度在网络贡献度节点列表中所处的位置Index(R(NodeB))=2,从网络传输频率统计表中查询出NodeB的传输频率值在网络传输频率统计表中所处的位置Index(P(NodeB))=2,以及从存储效率节点列表中查询出NodeB的存储效率值在存储效率节点列表中所处的位置Index(S(NodeB))=2。基于此,即可根据计算每个区块链节点的存储优先级基准值的方式计算出NodeB的存储优先级基准值,即Z(NodeB)=2×3.5+2×3+2×3.5=20。对于NodeC,可以从网络贡献度节点列表中查询出NodeC的网络贡献度在网络贡献度节点列表中所处的位置Index(R(NodeC))=3,从网络传输频率统计表中查询出NodeC的传输频率值在网络传输频率统计表中所处的位置Index(P(NodeC))=3,以及从存储效率节点列表中查询出NodeC的存储效率值在存储效率节点列表中所处的位置Index(S(NodeC))=1。基于此,即可根据计算每个区块链节点的存储优先级基准值的方式计算出NodeC的存储优先级基准值,即Z(NodeC)=3×3.5+3×3+1×3.5=23。对于NodeD,可以从网络贡献度节点列表中查询出NodeD的网络贡献度在网络贡献度节点列表中所处的位置Index(R(NodeD))=4,从网络传输频率统计表中查询出NodeD的传输频率值在网络传输频率统计表中所处的位置Index(P(NodeD))=4,以及从存储效率节点列表中查询出NodeD的存储效率值在存储效率节点列表中所处的位置Index(S(NodeD))=3。基于此,即可根据计算每个区块链节点的存储优先级基准值的方式计算出NodeD的存储优先级基准值,即Z(NodeD)=4×3.5+4×3+3×3.5=36.5。

基于上述示例即可得出对应的存储优先级列表可以如表11所示。

表11

基于表11可知,Z(NodeB)

在得到表11后,即可根据表11,选择该列表中选取出优先级最高的i个区块链节点。比如,选取出3个区块链节点,即NodeA、NodeB和NodeC三个节点作为存储节点。然后,上传节点将当前需要存储的FB_Package_1、FB_Package_2、FB_Package_3和FB_Package_4四个待存储子文件块存储到NodeA、NodeB和NodeC三个存储节点中。比如,如图4所示,图4为本发明实施例提供的一种存储待存储子文件块的结构示意图,将FB_Package_1、FB_Package_2、FB_Package_3和FB_Package_4存储到NodeA中,将FB_Package_1、FB_Package_2、FB_Package_3和FB_Package_4存储到NodeB中,将FB_Package_1、FB_Package_2、FB_Package_3和FB_Package_4存储到NodeC中。当然,也可以采用其它方式进行存储,本发明实施例对此并不作限定。同时,上传节点也会记录下这三个存储节点的节点标识,即记录Node_ID(NodeA)、Node_ID(NodeB)和Node_ID(NodeC),并将Node_ID(NodeA)、Node_ID(NodeB)和Node_ID(NodeC)加入到FB_Node_List中。其中,每上传一个FB_Package,都将FB_Package对应的FB_CId和对应的FB_Node_List打包加入到文件索引FileIndex的链表中。比如,以上传FB_Package_1为例,在上传FB_Package_1,会将FB_Package_1对应的FB_CId_1以及FB_Package_1对应的存储节点列表FB_Node_List(包括Node_ID(NodeA)、Node_ID(NodeB)和Node_ID(NodeC))进行打包加入到待存储文件对应的文件索引FileIndex的链表中。

Step6:上传节点从区块链网络中其它各区块链节点中确定出符合第二设定条件的至少一个区块链节点,并将待存储文件的文件索引上传至该至少一个区块链节点中。

上传节点在上传待存储文件的文件索引时,也会将待存储文件的文件索引存储到至少一个区块链节点中。具体地,上传节点首先采用逻辑距离的方式从区块链网络中其它各区块链节点中确定出符合第二设定条件的至少一个区块链节点。示例性地,针对待存储文件的文件索引FileIndex,将文件索引FileIndex存储到距离该文件索引FileIndex对应的FileIndex_CId最近的i(3≤i≤8)个区块链节点上。由于文件索引FileIndex较小,因此采用逻辑距离的方式确定用于存储文件索引的区块链节点,如此,可以方便文件索引的快速定位,同时可以提升文件索引的查询效率。

下面对本发明实施例中确定用于存储待存储文件的文件索引的区块链节点的实施过程进行描述。

a、上传节点通过对文件索引FileIndex对应的FileIndex_CId和区块链网络中其它区块链节点的Node_Id进行异或运算即可得到文件索引和区块链节点之间的逻辑距离X。

继续以区块链网络中除了上传节点以外还有4个区块链节点为例,即NodeA、NodeB、NodeC和NodeD。其中,对于NodeA、NodeB、NodeC和NodeD各自的节点标识Node_ID(NodeA)、Node_ID(NodeB)、Node_ID(NodeC)和Node_ID(NodeD)均是20个字节的哈希值。而且,待存储文件的文件索引FileIndex对应的FileIndex_CId,同样也是20个字节的哈希值。比如,以NodeA的节点标识Node_ID(NodeA)为例,Node_ID(NodeA)为20个字节的哈希值,换算为二进制,即为一个160位二进制数,而且,文件索引FileIndex对应的FileIndex_CId同样为20个字节的哈希值,换算为二进制,即为一个160位二进制数。再将这两个二进制数进行按位异或运算,即可得到一个160位的二进制数,转换为十进制,所得到的十进制值即为距离值X。

示例性地,假设Node_ID(NodeA)=e929e1c850e165f4f135,Node_ID(NodeB)=e929e1c850e165f4f136,Node_ID(NodeC)=e929e1c850e165f4f137,Node_ID(NodeD)=e929e1c850e165f4f138,文件索引FileIndex对应的FileIndex_CId=e929e1c850e165f4f134。如此,FileIndex_CId与NodeA、NodeB、NodeC和NodeD各自的节点标识进行按位异或运算,即可得到文件索引FileIndex与NodeA的距离为1,文件索引FileIndex与NodeB的距离为2,文件索引FileIndex与NodeC的距离为3,文件索引FileIndex与NodeD的距离为4。

b、上传节点通过对文件索引和区块链网络中其区块链节点之间的逻辑距离进行排序,确定逻辑距离节点列表。

在得到文件索引和其它区块链节点之间的逻辑距离X后,上传节点按照从小到大的顺序对各逻辑距离X进行排列,即按照逻辑距离X递增的顺序进行排列,如此即可形成逻辑距离节点列表。再从逻辑距离节点列表中选取出前i个区块链节点,即选取出逻辑距离X较小的i个区块链节点,也就是距离文件索引FileIndex对应的FileIndex_CId最近的i个区块链节点。比如,如图5所示,图5为本发明实施例提供的一种存储文件索引的结构示意图,选取出3个区块链节点,即NodeA、NodeB和NodeC三个节点作为存储节点,该三个存储节点即为距离文件索引FileIndex对应的FileIndex_CId最近的区块链节点。然后,将需要存储的文件索引FileIndex分别存储到NodeA、NodeB和NodeC三个节点中。

其中,文件索引FileIndex中记录有各待存储子文件块的存储节点信息,即存储有每个待存储子文件块标识以及每个待存储子文件块标识对应的待存储子文件块所存储的节点列表。如此,通过文件索引FileIndex,即可查询出存储有对应待存储子文件块的存储节点。

Step7:在待存储文件上传后,用户端可以向下载节点发送文件查询请求,以下载获取相应的存储文件。

用户端在将一个或者多个待存储文件上传后,若后续需要下载某一存储文件时,可以选择区块链网络中任一区块链节点作为下载存储文件的下载节点。当然,用户端在上传待存储子文件块时所选择的上传节点也可能成为下载节点。此外,用户端本地可能存储有一个或多个文件索引标识FileIndex_CId,其中,每个FileIndex_CId对应一个存储文件。以一个文件索引标识FileIndex_CId为例,在选择出下载节点后,用户端可以向下载节点发送文件查询请求,该文件查询请求包括该存储文件的文件索引对应的文件索引标识FileIndex_CId。该下载节点在接收到文件查询请求后,确定出距离文件索引标识FileIndex_CId最近的j个区块链节点。具体地,下载节点通过对文件索引FileIndex对应的FileIndex_CId和区块链网络中除下载节点以外的其它区块链节点的Node_Id进行异或运算即可得到文件索引FileIndex_CId和除下载节点以外的其它区块链节点之间的逻辑距离X。再通过对文件索引和除下载节点以外的其它区块链节点之间的逻辑距离进行排序,确定逻辑距离节点列表,并从逻辑距离节点列表中选取出前j个区块链节点,即选取出逻辑距离X较小的j个区块链节点,也就是距离文件索引FileIndex对应的FileIndex_CId最近的j个区块链节点。然后,下载节点按照j个区块链节点在逻辑距离节点列表中的顺序依次向该j个区块链节点发送文件索引获取请求,以用于获取FileIndex_CId对应的文件索引数据,在向该j个区块链节点依次发送文件索引获取请求的过程中,直至从该j个区块链节点中任一区块链节点中查询出FileIndex_CId对应的文件索引数据,比如,在该j个区块链节点中第一个区块链节点没查询到,则向第二个区块链节点发送文件索引获取请求,在第二个区块链节点查询出FileIndex_CId对应的文件索引数据,或者,在第二个区块链节点中也没查询到,则向第三个区块链节点发送文件索引获取请求,直至查询出FileIndex_CId对应的文件索引数据。

在查询出FileIndex_CId对应的文件索引数据后,通过文件索引数据即可查询出各存储子文件块的子文件块标识FB_CId以及对应的存储节点列表FB_Node_List。再通过并行方式即可从对应的存储节点中获取各存储子文件块FB_Package_1、FB_Package_2、…、FB_Package_N。即,下载节点基于子文件块标识FB_CId以及对应的存储节点列表FB_Node_List,依次向子文件块标识对应的存储节点发送存储子文件块获取请求,以用于获取FB_CId对应的存储子文件块,在向FB_Node_List中各存储节点依次发送存储子文件块获取请求的过程中,直至从FB_Node_List中任一存储节点中查询出FB_CId对应的存储子文件块,比如,在该FB_Node_List中第一个存储节点没查询到,则向第二个存储节点发送存储子文件块获取请求,在第二个存储节点查询出FB_CId对应的存储子文件块,或者,在第二个存储节点中也没查询到,则向第三个存储节点发送存储子文件块获取请求,直至查询出FB_CId对应的存储子文件块。

然后,将各存储子文件块FB_Package_1、FB_Package_2、…、FB_Package_N,按照每个存储子文件块中包含的位序值Sequence,将每个存储子文件块中的数据写入到本地结果文件的指定位置,如此,即可下载到相应的存储文件。其中,写入的方式可以按照下述方式进行写入,即:

FB_Package.Sequence*sliceLength(位序值*分片大小)。

需要说明的是,将待存储子文件块或待存储文件的文件索引至少存储在i个区块链节点中,即,对待存储子文件块或待存储文件的文件索引都做至少i份冗余,如此,有助于提升存储数据(待存储子文件块或待存储文件的文件索引)的容错性。同样,在查找时,也会会从区块链网络中优先级高的区块链节点中,依次对优先级高的区块链节点进行检索,查询出对应的文件索引数据,并基于文件索引数据可以查询出对应的待存储子文件块,如此,就可以保证分布式系统的可用性。此外,对待存储文件的文件索引进行分布式存储,可以解决现有技术中文件索引存储中心化的问题,而且,由于文件索引数据的数据量较小,采用逻辑距离的方式进行确定用于存储文件索引的存储节点,可以便于文件索引的快速定位。同时,针对待存储子文件块,采用计算存储优先级基准值的方式进行分布式存储,可以充分提高区块链网络(或分布式网络)的存储资源利用率,提升区块链网络的吞吐量以及提升数据存储的容错性,并可以确保网络吞吐、资源利用、容错性三个特性的平衡。

上述实施例表明,在需要存储待存储文件时,将该待存储文件拆分为多个文件块。再通过根据各节点的存储状况可以准确地确定出各节点的存储优先级,如此,可以使得基于各节点的存储优先级,所确定出的用于存储文件块的各第二节点更加可靠,也更加符合实际需要,以此实现对各文件块进行有效且合理地存储,即,将各文件块及时准确地存储到各第二节点中。因此,采用计算各节点的存储优先级的方式来实现对各文件块的分布式存储,可以充分提高区块链网络的存储资源利用率,提升区块链网络的吞吐量、提升数据存储的容错性以及提升数据传输的效率、稳定性,并可以确保网络吞吐、资源利用、容错性三个特性的平衡,从而可以解决现有技术中存在存储资源利用不均匀、数据传输稳定性低的问题。此外,由于文件索引的数据量较小,采用计算待存储文件与各节点的逻辑距离的方式,可以及时准确地确定出用于存储文件索引的各第三节点,并可以便于文件索引的快速定位。如此,可以实现将文件索引分布式存储到各第三节点中,以此可以消除现有技术中采用中心化方式存储文件索引的节点作恶的可能性,并可以提高文件索引存储的容错性以及能够使得区块链网络中存储资源利用的更加均衡,从而可以解决现有技术中存在文件索引存储中心化的问题。另外,通过将各第二节点的物理地址或互联网协议地址分别进行哈希运算,可以确保各第二节点的节点标识是唯一的,以便为后续准确地识别出对应的第二节点提供支持。同时,将各文件块的内容分别进行哈希运算,可以确保各文件块的文件块标识是唯一的,以便为后续准确地识别出对应的文件块提供支持。如此,基于各文件块标识以及对应的各第二节点的节点标识构建出文件索引,以便在后续查询存储文件时可以及时准确地查询出对应的文件块。

基于相同的技术构思,图6示例性的示出了本发明实施例提供的一种基于区块链的分布式文件存储装置,该装置可以执行基于区块链的分布式文件存储方法的流程。

如图6所示,该装置包括:

拆分单元601,用于将待存储文件拆分为多个文件块;所述第一节点为区块链网络中任一节点;

处理单元602,用于针对每个文件块,基于各节点的存储优先级确定出用于存储所述文件块的各第二节点;其中,节点的存储优先级是根据节点的存储状况确定的;所述第二节点为所述区块链网络中除所述第一节点以外的任一节点;基于每个文件块对应的第二节点,将所述第二节点的物理地址或互联网协议地址进行哈希运算,生成所述第二节点的第一哈希值,并将所述第一哈希值作为所述第二节点的节点标识;针对每个文件块,将所述文件块的内容进行哈希运算,生成所述文件块的第二哈希值,并将所述第二哈希值作为所述文件块的文件块标识;根据各文件块的文件块标识和对应的各第二节点的节点标识,生成文件索引,并基于所述文件索引的标识与各节点的逻辑距离,确定出用于存储所述文件索引的各第三节点;所述第三节点为所述区块链网络中除所述第一节点以外的任一节点;将各文件块存储至对应的各第二节点并将所述文件索引存储至对应的各第三节点。

可选地,所述处理单元602具体用于:

确定节点的网络贡献度、存储效率值和传输频率值;所述网络贡献度用于表示节点对区块链网络的吞吐量的贡献度;所述存储效率值用于表示节点的存储空间利用度;所述传输频率值用于表示节点与其它任一节点进行通信的频繁度;

根据所述节点的所述网络贡献度、所述存储效率值和所述传输频率值,确定所述节点的存储状况。

可选地,所述处理单元602具体用于:

根据所述待存储文件的存储价值,确定所述网络贡献度的网络贡献权重、所述存储效率值的存储效率权重和所述传输频率值的传输频率权重;

根据所述节点的所述网络贡献度、所述存储效率值、所述传输频率值、所述网络贡献权重、所述传输频率权重和所述存储效率权重,确定所述节点的存储状况。

可选地,所述处理单元602具体用于:

确定所述节点的接收文件块的历史总流量和所述节点的上传文件块的历史总流量;

根据所述接收文件块的历史总流量和所述上传文件块的历史总流量,确定所述节点的网络贡献度。

可选地,所述处理单元602具体用于:

针对任一节点,确定出所述节点传输数据至所述第一节点的接收次数,并确定出所述第一节点传输数据至所述节点的上传次数;

根据所述接收次数和所述上传次数,确定所述节点的传输频率值。

可选地,所述处理单元602具体用于:

根据所述节点的总存储空间、已存储空间以及所述节点的处理器性能,确定所述节点的存储效率值。

可选地,所述处理单元602具体用于:

根据所述待存储文件的被使用频率和所述待存储文件的数据价值,确定所述待存储文件的存储价值;

所述处理单元602具体用于:

根据设定总权重以及所述待存储文件的存储价值,确定所述网络贡献权重、所述存储效率权重以及所述传输频率权重。

可选地,所述处理单元602具体用于:

将待存储文件的内容进行哈希运算,生成所述待存储文件的第三哈希值,并将所述第三哈希值作为所述待存储文件的文件索引标识;

将所述文件索引标识作为文件索引的标识。

可选地,所述处理单元602还用于:

在将所述文件索引存储至对应的各第三节点之后,接收文件查询请求;所述文件查询请求中包括文件索引标识;

确定所述文件索引标识与区块链网络中除所述第一节点以外的每个节点的逻辑距离;根据各节点的逻辑距离,确定各第四节点;

从所述各第四节点获取所述文件索引标识对应的文件索引;

从所述文件索引中确定出各文件块标识以及对应的各第二节点的节点标识;

针对每个文件块标识,从所述文件块标识所关联的各第二节点中确定出所述文件块标识对应的文件块;

将各文件块进行存储。

基于相同的技术构思,本发明实施例还提供了一种计算设备,如图7所示,包括至少一个处理器701,以及与至少一个处理器连接的存储器702,本发明实施例中不限定处理器701与存储器702之间的具体连接介质,图7中处理器701和存储器702之间通过总线连接为例。总线可以分为地址总线、数据总线、控制总线等。

在本发明实施例中,存储器702存储有可被至少一个处理器701执行的指令,至少一个处理器701通过执行存储器702存储的指令,可以执行前述的基于区块链的分布式文件存储方法中所包括的步骤。

其中,处理器701是计算设备的控制中心,可以利用各种接口和线路连接计算设备的各个部分,通过运行或执行存储在存储器702内的指令以及调用存储在存储器702内的数据,从而实现数据处理。可选的,处理器701可包括一个或多个处理单元,处理器701可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理下发指令。可以理解的是,上述调制解调处理器也可以不集成到处理器701中。在一些实施例中,处理器701和存储器702可以在同一芯片上实现,在一些实施例中,它们也可以在独立的芯片上分别实现。

处理器701可以是通用处理器,例如中央处理器(CPU)、数字信号处理器、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件,可以实现或者执行本发明实施例中公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合基于区块链的分布式文件存储方法实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。

存储器702作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块。存储器702可以包括至少一种类型的存储介质,例如可以包括闪存、硬盘、多媒体卡、卡型存储器、随机访问存储器(Random AccessMemory,RAM)、静态随机访问存储器(Static Random Access Memory,SRAM)、可编程只读存储器(Programmable Read Only Memory,PROM)、只读存储器(Read Only Memory,ROM)、带电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、磁性存储器、磁盘、光盘等等。存储器702是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。本发明实施例中的存储器702还可以是电路或者其它任意能够实现存储功能的装置,用于存储程序指令和/或数据。

基于相同的技术构思,本发明实施例还提供了一种计算机可读存储介质,其存储有可由计算设备执行的计算机程序,当所述程序在所述计算设备上运行时,使得所述计算设备执行上述基于区块链的分布式文件存储方法的步骤。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

相关技术
  • 一种基于区块链的可信投融资尽调文件分布式大文件点状存储方法
  • 一种基于区块链智能合约的文件分布式存储方法
技术分类

06120113047673