一种文件存储方法、电子设备、系统和介质与流程

文档序号:14479057阅读:150来源:国知局

本发明涉及数据存储技术,尤其涉及一种文件存储方法、电子设备、系统和介质。



背景技术:

数据存储最简单直接的方式是使用软盘、硬盘、光盘等介质。但很容易损坏,导致数据丢失。通常的做法是使用多个介质存储副本,或者使用raid等技术做冗余存储。但管理难度大,技术门槛高,只能解决单一存储介质损坏的问题,不能彻底确保数据安全。

近几年被广为接受的存储产品是网盘。这是一种互联网产品,为用户提供稳定、可靠的存储方式。其原理是在多个异地机房,搭建服务器集群,使用分布式文件系统存储文件数据,分布式数据库存储文件索引和所属关系。该方案的问题是成本高昂,不仅前期投入的服务器、存储装置会很大,而且运营费用也很高,需要大量的采购带宽,需要专业的研发团队维护。此外,该方案采用客户机/服务器模式,还带来了数据隐私问题;产品提供方有能力随意查看用户的数据,进行分析和数据挖掘。



技术实现要素:

为了克服现有技术的不足,本发明的目的在于提供一种文件存储方法、电子设备、系统和介质,可以将待存储文件编码为多个文件,并将编码后的文件分布存储于不同的存储节点,不需要中心服务器,可以实现分布式的存储。

本发明的目的采用以下技术方案实现:

一种文件存储方法,基于p2p方式实现,具体包括以下步骤:

根据待存储文件的文件参数生成存储请求,所述存储请求包括副本需求数;

发送所述存储请求至外部节点;

获取接受所述存储请求的外部节点的信息;

从所述接受存储请求的外部节点中选取多个存储节点;

根据所选取存储节点的数量将所述待存储文件编码为多个文件;

将编码后的多个文件分发至选取的存储节点。

进一步地,所述根据所选取存储节点的数量将所述待存储文件编码为多个文件,具体包括以下步骤:

根据所选取存储节点的数量计算编码参数;

通过喷泉码方法,根据所述编码参数将待存储文件编码为多个文件。

进一步地,所述编码参数包括片段数量、数据块大小。

进一步地,所述通过喷泉码方法,根据所述编码参数将待存储文件编码为多个文件,具体包括以下步骤:

根据所述数据块大小将待存储文件分割为至少一个数据块;

将各数据块编码为n个片段,n为所述片段数量;

从各数据块的n个片段分别提取一片段,并将提取的片段组装为一编码后的文件,重复该步骤直至所有数据块片段组装完成,最终形成n个编码后的文件。

进一步地,所述根据所述数据块大小将待存储文件分割为至少一个数据块,具体为:

若所述文件大小小于分割阈值,则所述数据块大小等于所述文件大小。

进一步地,所述存储请求包括源节点标识、容量需求、存储时长、副本需求数、费用意向、路由跳数要求、生存时间、跳数概率函数的至少一项。

进一步地,所述获取接受所述存储请求的外部节点的信息之后,还包括以下步骤:

若所述接受所述存储请求的外部节点的数目小于所述副本需求数,则执行需求修改指令。

进一步地,执行需求修改指令时,仍与所述接受所述存储请求的外部节点保持心跳。

进一步地,所述将编码后的多个文件分发至选取的存储节点之后,还包括以下步骤:

接收各存储节点反馈的校验数据;

根据所述校验数据判断相应的编码后的文件是否正确存储。

进一步地,所述将编码后的多个文件分发至选取的存储节点之后,还包括以下步骤:

生成分发至各存储节点的文件的存储索引,并将所述存储索引发送至外部节点。

进一步地,所述存储索引包括源节点标识,所述生成分发至各存储节点的文件的存储索引,并将所述存储索引发送至外部节点之后,还包括以下步骤:

若本地的存储索引不存在,恢复所述存储索引。

进一步地,所述文件存储方法还包括以下步骤:

检查所述存储节点的状态是否正常;

若状态正常的存储节点数量小于预设阈值,则向外部节点增加存储。

进一步地,所述文件存储方法还包括以下步骤:

若状态正常的存储节点数量小于预设阈值,且所述待存储文件不存在,则从所述存储节点恢复所述待存储文件,之后向外部节点增加存储。

本发明的目的还可采用以下技术方案实现:

一种电子设备,包括存储器、处理器以及存储在存储器中的程序,所述程序被配置成由处理器执行,处理器执行所述程序时实现上述的文件存储方法的步骤。

本发明的目的还可采用以下技术方案实现:

一种文件存储方法,基于p2p方式实现,具体包括以下步骤:

获取源节点的存储请求,并判断是否接受所述存储请求;

若接受,则向所述源节点发送接受所述存储请求的信息。

从所述源节点接收编码后的文件。

进一步地,所述存储请求包括副本需求数,所述方法还包括:

调整所述存储请求,并向外部节点转发调整后的存储请求;

所述调整所述存储请求具体为将所述副本需求数减一。

进一步地,所述存储请求还包括源节点标识、容量需求、存储时长、费用意向、路由跳数要求、生存时间中的至少一项。

进一步地,所述判断是否接受所述存储请求,具体为根据所述存储请求和跳数概率函数判断是否接受所述存储请求。

进一步地,所述根据所述存储请求和跳数概率函数判断是否接受所述存储请求,具体为:

若符合所述存储请求,且与所述源节点间的跳数小于第一阈值,则以第一接受概率接受所述存储请求;

若符合所述存储请求,且与所述源节点间的跳数大于第一阈值,则以第二接受概率接受所述存储请求。

进一步地,所述跳数概率函数具体为通过所述存储请求获取,或者预先存储在本地。

进一步地,所述存储请求还包括冗余参数,所述跳数概率函数根据所述冗余参数调整。

进一步地,所述从所述源节点接收编码后的文件之后,还包括以下步骤:

计算所接收文件的校验数据,并将所述校验数据发送至所述源节点。

进一步地,所述从所述源节点接收编码后的文件之后,还包括以下步骤:

从所述源节点接收存储索引。

本发明的目的还可采用以下技术方案实现:

一种电子设备,包括存储器、处理器以及存储在存储器中的程序,所述程序被配置成由处理器执行,处理器执行所述程序时实现上述的文件存储方法的步骤。

本发明的目的还可采用以下技术方案实现:

一种文件存储系统,包括上述的电子设备。

本发明的目的还可采用以下技术方案实现:

一种存储介质,所述介质存储有计算机程序,所述计算机程序被处理器执行时实现上述文件存储方法的步骤。

相比现有技术,本发明的有益效果在于:通过将待存储文件编码为多个文件,并将编码后的文件分布存储于不同的存储节点,不需要中心服务器,可以实现分布式的存储;即使获取到个别的编码后的文件,也不足以恢复源文件,因此数据泄露的风险极低;而且不同的存储节点一般位于不同的地址,因此可以避免多数存储节点灭失的情况,因此存储数据的可靠性很高。而且文件存储方法不依赖任何个体,可以实现自管理,用户不用担心数据被其他个体随意查看或者其他个体间的数据转移问题。

附图说明

图1为本发明实施例的源节点侧的文件存储方法的流程示意图;

图2为本发明实施例的外部节点/存储节点侧的文件存储方法的流程示意图;

图3为图1中根据所述文件参数将所述待存储文件编码为多个文件的示意图。

具体实施方式

下面,结合附图以及具体实施方式,对本发明做进一步描述,需要说明的是,在不相冲突的前提下,以下描述的各实施例之间或各技术特征之间可以任意组合形成新的实施例。

本发明实施例提供的文件存储方法基于p2p方式实现。网络中具有一系列的p2p节点,p2p节点可以是通用计算机、服务器或者专用的p2p网络设备。在本实施例中,p2p节点采用专用的p2p网络设备,因此用户更有意愿将节点并入p2p网络,可以保证p2p网络上节点的稳定性。该专用的p2p网络设备具有网络接口,处理器和存储器,还可自带或外接存储设备,网络接口可以通过有线或无线方式接入网络。

文件存储时,需要存储文件的p2p节点可以从存储设备获取待存储文件,经过处理后通过网络接口传输至网络中的其他p2p节点进行存储。需要存储文件的p2p节点可以作为源节点,其他p2p节点作为相对于该源节点的外部节点,实际要起存储作用的外部节点为存储节点。

图1为本发明实施例的源节点侧的文件存储方法的流程示意图;图2为本外部节点/存储节点侧的文件存储方法的流程示意图。

如图1和图2所示的文件存储方法,基于p2p方式实现,具体包括以下步骤:

步骤s110、源节点根据待存储文件的文件参数生成存储请求,所述存储请求包括副本需求数;

文件参数可以包括文件大小,对于不同大小的待存储文件,需要将其组织成不同数量的文件存储至不同数量的备份节点,所需要的备份节点数目即副本需求数。

文件参数还可以包括文件标识。作为优选的实施方式,文件标识可以为待存储文件的哈希值,特定的待存储文件对应于一特定的哈希值,可以根据哈希值标记待存储文件的身份,以及验证待存储文件的正确性。

步骤s120、源节点发送存储请求至外部节点。

源节点和外部节点均具有一个节点标识,在p2p网络中,节点标识可以为节点所用公钥的哈希值,该公钥由节点的私钥确定。

节点的所有本地数据及其元数据,都要使用私钥加密后,才能发放到网络中。因此,可以用公钥证明p2p网络中的文件是哪个节点拥有的,而且可以用私钥保证只有私钥所有者才可以使用该文件。

步骤s210、外部节点获取源节点的存储请求,并判断是否接受所述存储请求。

作为优选的实施方式,存储请求包括源节点标识、容量需求、存储时长、费用意向、路由跳数要求、生存时间(ttl,timetolive)中的至少一项。

源节点标识可以为源节点所用公钥的哈希值,可以供外部节点识别该源节点,而不需要根据ip地址等识别源节点。因此待存储文件的所有者可以在异地使用存储的文件。容量需求、存储时长可以为编码后的文件的大小,可以由外部节点判断是否有能力存储该文件。费用意向可以表示源节点愿意为外部节点保存该文件付出的代价,例如愿意支付一定数量的虚拟奖励或积分。路由跳数要求可以包括最大路由跳数,如果外部节点距离该源节点跳数过多,则不需要该外部节点存储文件。发送生存时间可以防止数据包不断在互联网络上永不终止地循环。

作为本发明实施例的进一步改进,外部节点判断是否接受所述存储请求,除了根据上述存储请求判断,还需要根据跳数概率函数判断是否接受所述存储请求。

跳数概率函数指的是当外部节点可以满足存储请求的需求时,会根据与源节点之间的跳数以一定的概率同意作为存储节点,即同意存储源节点的数据。

在本实施例中,若某外部节点符合所述存储请求,且与所述源节点间的跳数小于第一阈值,则以第一接受概率接受所述存储请求;

若某外部节点符合所述存储请求,且与所述源节点间的跳数大于第一阈值,则以第二接受概率接受所述存储请求。

例如,第一接受概率为70%,第二接受概率为30%,则与源节点之间跳数小的外部节点更有可能接受存储请求,跳数大的外部节点接受存储请求的可能性较低。

这样可以确保待存储文件一部分分布在网络地域接近的节点,一部分分布在较远的节点,既保证了大概率下恢复的速度,又降低了小概率下文件丢失的可能性,比如地域性的灾难。

当第一接受概率较大,第二接受概率较小时,存储节点为就近选择,可以保证文件存储、恢复的高速度;当第一接受概率较小,第二接受概率较大时,可以保证存储文件的高可靠性。

作为优选的实施方式,跳数概率函数可以由源节点通过所述存储请求发送至外部节点,也可以预先存储在外部节点本地。

跳数概率函数由源节点通过所述存储请求发送至外部节点,可以实现由用户自主确定存储的速度参数和可靠性。

作为优选的实施方式,存储请求还包括冗余参数。所述跳数概率函数根据所述冗余参数调整,即外部节点可以根据冗余参数对源节点发送的跳数概率函数或外部节点本地存储的跳数概率函数进行调整。

例如,如果冗余参数设置为3~5,则第一接受概率较大,第二接受概率均可以调至更高,即增加近距节点和远距节点接受存储请求的概率。如可以就近放1.5~2的冗余,远距离放2~3的冗余,这样就能同时保证高速度和高可靠性,但同时花费也是最高的。

步骤s220、若外部节点接受所述存储请求,则向所述源节点发送接受所述存储请求的信息,以使源节点得知该外部节点愿意作为其存储节点。

步骤s130、源节点获取接受所述存储请求的外部节点的信息。即源节点统计愿意作为存储节点的外部节点的数目。

步骤s140、源节点从所述接受存储请求的外部节点中选取多个存储节点。源节点可以按照外部节点反馈信息的时间选择副本需求数目的外部节点作为存储节点;也可以进一步做筛选,例如一部分小跳数的,选择一部分大跳数的,以进一步保证存储文件的传输速度和可靠性。

作为本发明实施例的进一步改进,步骤s140获取接受所述存储请求的外部节点的信息之后,还包括以下步骤:若源节点所述接受所述存储请求的外部节点的数目小于所述副本需求数目,则执行需求修改指令。执行需求修改指令,表示对存储请求进行调整,例如调高费用意向,放宽路由跳数要求等。之后再将调整后的存储请求发送至网络中的外部节点,重复步骤s120-步骤s140。

步骤s150、源节点根据所选取存储节点的数量将所述待存储文件编码为多个文件。

作为优选的实施方式,步骤s150源节点根据所选取存储节点的数量将所述待存储文件编码为多个文件,具体包括以下步骤:

步骤s151、源节点根据所选取存储节点的数量计算编码参数。

步骤s152、源节点通过喷泉码方法,根据所述编码参数将待存储文件编码为多个文件。

在本实施例中,待存储文件通过喷泉码(fountaincodes),也即无码率擦除码(ratelesserasurecodes)方式编码。在本实施例中,具体使用的是raptor算法的改进raptorq算法。

喷泉码是将一些数据,例如文件,转化为一个有效的任意数量的编码包的方法,这样只要接收到稍大于信源数据包数量的编码包的子集,就可以恢复信源数据。因此,即使存储在外部节点的一些数据传递不回来,源节点只要接收到足够数量的编码包,就可以恢复数据,因此增强了文件存储方法的安全性、可靠性。

作为优选的实施方式,编码参数包括片段数量、数据块大小。在本实施例中,可以根据所选取存储节点的数量得到片段数量。数据块大小则可以由源节点的计算能力确定。

步骤s152源节点通过喷泉码方法,根据所述编码参数将待存储文件编码为多个文件,具体包括以下步骤:

步骤s1521、源节点根据所述数据块大小将待存储文件分割为至少一个数据块。

步骤s1522、源节点将各数据块编码为n个片段,n为所述片段数量;

步骤s1523、源节点从各数据块的n个片段分别提取一片段,并将提取的片段组装为一编码后的文件,重复该步骤直至所有数据块片段组装完成,最终形成n个编码后的文件。

如图3所示,首先将待存储文件分割为4个数据块,然后将各数据块编码为4个片段;之后从各数据块的4个片段分别提取一片段,并将提取的片段组装为一个编码后的文件;重复该步骤直至所有数据块片段组装完成,最后得到四个编码后的文件。

作为优选的实施方式,编码后的文件还包括文件头部的编码信息和文件尾部的哈希值,用于自校验,可以检测文件是否被修改或损坏。

作为优选的实施方式,若所述文件大小小于分割阈值,则所述数据块大小等于所述文件大小。例如,对于小于32mb的待存储文件,可以使数据块大小等于所述待存储文件的大小。

进一步地,待存储文件小于32mb,则副本需求数可取36个。如果最后选取的备份节点数目为36个,可以选取片段数量为18个,然后进行2倍冗余编码,编码出36个文件。之后由源节点将36个文件分发至36个备份节点。数据块大小等于待存储文件的大小,优选的可按8字节向上对齐。因此副本需求数目为每个编码文件就是一个片段,每个片段最小为8字节,最大1821k。编码内存消耗最大为32*3=96mb。

对于32mb~4096mb的待存储文件,可以使副本需求数和片段数量取为32个,数据块大小等于8mb。每个编码文件包含一系列片段,片段大小为1m。编码内存消耗最大为8*3=24mb。每个编码文件最小1m,最大为128m。

对于4096mb~40gb的待存储文件,可以使副本需求数和片段数量取为128个,数据块大小可以为32mb或64mb,如果内存消耗可以接受,则选择尽可能大的值。每个编码文件最小为32m,最大为320m。

对于更大的待存储文件,为了使每个编码文件尽量小,可以选择较大的片段数量。

副本需求数和片段数量的多少,是衡量以下因素的结果:

1)编码后的每个文件的大小,越小越好,传输成功率越高;

2)编码消耗的内存,每个数据块越小越好;

3)编码性能,片段越小,性能越高。

4)数据块不能太大,否则对小文件来说,填充数据量相比有效数据的比例就增加了。

作为优选的实施方式,执行需求修改指令时,仍与所述接受所述存储请求的外部节点保持心跳。以避免在寻找额外的存储节点时与已经确定的存储节点断开连接。

步骤s160、源节点将编码后的多个文件分发至选取的存储节点;以及步骤s230、存储节点从所述源节点接收编码后的文件。

作为优选的实施方式,源节点将编码后的文件分发至选取的存储节点前,需要发请求确认,确认与存储节点之间的连接稳定。

也可以在源节点从所述接受存储请求的外部节点中选取多个存储节点之后将所述待存储文件编码为多个文件。例如,如果源节点最后选取的备份节点为s,则通过喷泉码方法,将待存储文件编码为s个文件。然后将s个文件分发至选取的s个备份节点。

本发明实施例提供的文件存储方法,通过将待存储文件编码为多个文件,并将编码后的文件分布存储于不同的存储节点,不需要中心服务器,可以实现分布式的存储;即使获取到个别的编码后的文件,也不足以恢复源文件,因此数据泄露的风险极低;而且不同的存储节点一般位于不同的地址,因此可以避免多数存储节点灭失的情况,因此存储数据的可靠性很高。而且文件存储方法不依赖任何个体,可以实现自管理,用户不用担心数据被其他个体随意查看或者其他个体间的数据转移问题。

作为优选的实施方式,所述存储请求包括副本需求数。文件存储方法还包括:

步骤s240、外部节点调整接收到的存储请求,并向外部节点转发调整后的存储请求。在本实施例中,存储请求还包括副本需求数,所述调整所述存储请求,具体为将所述副本需求数减一。当传递至某一外部节点的副本需求数为零时,表示不需要继续寻找潜在的存储节点了,可以停止转发存储请求。因此可以及时终止存储请求的传递,避免数据的无用传输和处理。

进一步地,存储请求还包括路由跳数,调整存储请求时将路由跳数加1,便于后续的外部节点获取与源节点间的跳数;如果某外部节点获取到的路由跳数不满足路由跳数要求,则该外部节点不接受该存储请求且不再转发该存储请求。因此可以及时终止存储请求的传递,避免数据的无用传输和处理。

作为优选的实施方式,步骤s230存储节点从所述源节点接收编码后的文件之后,还包括以下步骤:

步骤s250、计算所接收文件的校验数据,并将所述校验数据发送至所述源节点。

步骤s160将编码后的多个文件分发至选取的存储节点之后,还包括以下步骤:

步骤s171、源节点接收各存储节点反馈的校验数据;

步骤s172、源节点根据所述校验数据判断相应的编码后的文件是否正确存储。

校验数据可以为编码后文件的哈希值,因此可以由源节点确认编码后的文件是否正确存储。

作为优选的实施方式,步骤s160将编码后的多个文件分发至选取的存储节点之后,还包括以下步骤:

步骤s180、源节点生成分发至各存储节点的文件的存储索引,并将所述存储索引发送至外部节点;

以及,步骤s260、存储节点从所述源节点接收存储索引。

因此源节点可以记录自己的什么文件由哪个节点存储,存储节点也可以记录自己保存有哪个节点的什么文件。因此可以保证存储文件存储可查,可以确保文件的恢复速度以及正确性。

作为优选的实施方式,所述存储索引包括源节点标识,步骤s180生成分发至各存储节点的文件的存储索引,并将所述存储索引发送至外部节点之后,还包括以下步骤:

步骤s190、若源节点本地的存储索引不存在,则恢复所述存储索引;例如,可以从所述存储节点恢复所述存储索引。

因此,如果源节点本地的索引数据损坏或缺失,如源节点更换存储介质,则可以自动使用私钥对应的公钥的哈希值,即节点标识到p2p网络上找相关索引,并在本地恢复重建所述存储索引。

作为本发明实施例的进一步改进,文件存储方法还包括以下步骤:

步骤s191、源节点检查所述存储节点的状态是否正常。

步骤s192、若状态正常的存储节点数量小于预设阈值,则向外部节点增加存储。

源节点可以定期向存储节点发送状态请求,然后由存储节点返回状态确认,也可以由存储节点向源节点发送状态确认。优选的采用后一种方式,这样在源节点下线后,就不会有状态确认数据包了,可以避免大量节点下线后,网络上产生大量无用包。

如果状态正常的存储节点数量小于预设阈值,则向外部节点增加存储。即可以再执行前述文件存储的步骤,可以适当减少副本需求数。

进一步地,从外部节点中选取存储节点以及跳数概率函数可以根据丢失的存储节点的属性来定,即丢失的是近距离的,就优先实用近距离外部节点作为存储节点。

作为优选的实施方式,若状态正常的存储节点数量小于预设阈值,且所述待存储文件不存在,则从所述存储节点恢复所述待存储文件,之后向外部节点增加存储。即,如果在需要向外部节点增加存储时,原来的待存储文件已经被删除或损坏,则要先从可用的存储节点恢复先前的待存储文件后再增加存储。由于将所述待存储文件编码为多个文件采用的是喷泉码这种前向纠删码来做冗余,因此只需要一定数量的编码后的文件就可以恢复文件,而不需要全部的编码后的文件,因此可以承受一部分存储节点下线,降低了由于p2p网络中节点不稳定造成的存储文件恢复不了的风险,确保分布存储后数据恢复的可靠性。

通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法,如:

一种存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现前述文件存储方法的步骤。

本发明可用于众多通用或专用的计算系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、机顶盒、可编程的消费电子设备、网络pc、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等,如以下实施例。

一种电子设备,包括第一存储器、第一处理器以及存储在第一存储器中的程序,所述程序被配置成由第一处理器执行,第一处理器执行所述程序时实现上述的源节点执行的文件存储方法的步骤。

以及一种电子设备,包括第二存储器、第二处理器以及存储在第二存储器中的程序,所述程序被配置成由第二处理器执行,第二处理器执行所述程序时实现上述的外部节点/存储节点执行的文件存储方法的步骤。

基于上述的电子设备,可以构建一种文件存储系统,其包括多个上述的电子设备,且至少有一个实现上述的源节点执行的文件存储方法的步骤,其余实现上述的外部节点/存储节点执行的文件存储方法的步骤。

本实施例中的电子设备与前述实施例中的方法是基于同一发明构思下的两个方面,在前面已经对方法实施过程作了详细的描述,所以本领域技术人员可根据前述描述清楚地了解本实施中的系统的结构及实施过程,为了说明书的简洁,在此就不再赘述。

本发明实施例提供的电子设备,可以通过将待存储文件编码为多个文件,并将编码后的文件分布存储于不同的存储节点,不需要中心服务器,可以实现分布式的存储;即使获取到个别的编码后的文件,也不足以恢复源文件,因此数据泄露的风险极低;而且不同的存储节点一般位于不同的地址,因此可以避免多数存储节点灭失的情况,因此存储数据的可靠性很高。而且文件存储方法不依赖任何个体,可以实现自管理,用户不用担心数据被其他个体随意查看或者其他个体间的数据转移问题。

上述实施方式仅为本发明的优选实施方式,不能以此来限定本发明保护的范围,本领域的技术人员在本发明的基础上所做的任何非实质性的变化及替换均属于本发明所要求保护的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1