本申请涉及网络通信技术,特别涉及方法和装置。
背景技术:
区块链技术,也称为分布式账本技术,是一种由若干个计算设备(也称区块链网络中的网络节点,以下简称网络节点)共同参与“记账”,共同维护一份完整的分布式数据库的新兴技术。
由于区块链技术具有去中心化、公开透明、网络节点可以参与数据库记录、并且各网络节点之间可以快速的进行数据同步的特性,使得区块链技术在存储领域也有广泛应用。
但是,目前基于区块链的存储应用中,各个网络节点都要存储相同的区块,如果数据量很大,则会导致网络节点的存储空间大幅度增加。
技术实现要素:
本申请提供了数据存储方法和装置,以实现区块链组网中其中一部分网络节点存储区块,另一部分网络节点存储区块的区块头,减少网络节点的存储空间需求。
本申请提供的技术方案包括:
一种数据存储方法,该方法应用于区块链网络中的网络节点,包括:
在发送区块前先在所述区块链网络中广播与所述区块关联的第一节点列表,所述第一节点列表包括第一生存时间ttl参数,所述区块至少包括区块头、区块体内容;
接收第一对端网络节点返回的用于响应所述第一节点列表的响应消息,所述响应消息携带第二ttl参数,所述第二ttl参数为所述第一ttl参数与第一设定值之间的差值;
检查所述第二ttl参数是否满足设定条件,如果是,则在所述区块链网络中广播所述区块头,如果否,向所述第一对端网络节点发送所述区块。
一种数据存储装置,该装置应用于区块链网络中的网络节点,包括:控制单元、发送单元;
所述控制单元,用于在所述发送单元发送区块前先在所述区块链网络中广播与所述区块关联的第一节点列表,所述第一节点列表包括第一生存时间ttl参数,所述区块至少包括区块头、区块体内容;以及,接收第一对端网络节点返回的用于响应所述第一节点列表的响应消息,所述响应消息携带第二ttl参数,所述第二ttl参数为所述第一ttl参数与第一设定值之间的差值;以及,检查所述第二ttl参数是否满足设定条件,如果是,发送区块头通知给所述发送单元,如果否,发送区块通知给所述发送单元;
所述发送单元,用于当接收到来自所述控制单元的区块头通知时,在所述区块链网络中广播所述区块头,当接收到来自所述控制单元的区块通知时,向所述第一对端网络节点发送所述区块。
由以上技术方案可以看出,本申请中,网络节点既使有区块发送,也不直接发送区块,而是在发送区块之前先发送区块关联的第一节点列表,当收到第一对端网络节点返回的响应第一节点列表的响应消息、且响应消息携带的第二ttl参数满足设定条件时,才会发送区块,否则,在区块链网络中广播区块的区块头(也即区块体内容不发送)。可以看出,通过判断第一对端网络节点返回的响应消息携带的第二ttl参数是否满足设定条件决定是发送区块,还是发送区块的区块头(也即区块体内容不发送),实现了区块链网络中并非所有网络节点都在区块链存储整个区块,而是其中一部分网络节点在区块链存储整个区块(包括区块头和区块体内容),另外一部分网络节点在区块链存储区块的区块头,这相比现有所有网络节点都要存储区块链上的区块,大大减少节点存储空间,很好地支持了大数据基于区块链的应用。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
图1为本申请提供的方法流程图;
图2a为现有区块结构示意图;
图2b为本申请提供的区块结构示意图;
图3为本申请提供的区块存储更新示意图;
图4为本申请提供的实施例示意图;
图5为本申请提供的装置结构示意图;
图6为本申请提供的图5所示装置的硬件结构示意图。
具体实施方式
本申请提供的基于区块链的存储方法中,实现了部分网络节点存储区块链上的区块,相比现有所有网络节点本地的区块链都存储区块,大大减少节点存储空间,很好地支持了大数据基于区块链的应用。
为使本申请更加清楚,下面结合附图和实施例对本申请进行描述:
参见图1,图1为本申请提供的方法流程图。该方法应用于区块链网络中的网络节点。这里的网络节点是指区块链网络中的任一网络节点,本申请并不具体限定。
步骤101,在发送区块前先在所述区块链网络中广播与所述区块关联的第一节点列表,所述第一节点列表包括第一生存时间(ttl:timetolive)参数。
在本申请中,为了实现只有部分网络节点存储区块链上的区块,可对区块的结构进行改进。
相比图2a所示的现有区块结构,区块包括:区块头、区块体内容,本申请在图2a所示的现有区块结构中增加了节点列表id,具体如图2b所示。需要说明的是,图2b示出的节点列表id的位置只是一种举例,其也可以在其他位置,本申请并不具体限定。
在本申请中,节点列表id是类似关系型数据库id的值,不可改变。通过节点列表id在关系型数据库中可查询到对应的节点列表。基于此,上述与区块关联的第一节点列表为:所述节点列表id对应的节点列表。
步骤102,接收第一对端网络节点返回的用于响应所述第一节点列表的响应消息,所述响应消息携带第二ttl参数,所述第二ttl参数为所述第一ttl参数与第一设定值之间的差值。
这里的第一对端网络节点并非只是一个网络节点,其可泛指返回上述响应消息的所有网络节点。
步骤103,检查第二ttl参数是否满足设定条件,如果是,则在所述区块链网络中广播所述区块的区块头,如果否,向所述第一对端网络节点发送所述区块。
通过步骤101至步骤103可以看出,在本申请中,网络节点既使有区块发送,也不直接发送区块,而是在发送区块之前先发送区块关联的第一节点列表,当收到第一对端网络节点返回的响应第一节点列表的响应消息、且响应消息携带的第二ttl参数满足设定条件时,才会发送区块,否则,在区块链网络中广播区块的区块头(也即区块体内容不发送)。可以看出,通过判断第一对端网络节点返回的响应消息携带的第二ttl参数是否满足设定条件决定是发送区块,还是发送区块的区块头(也即区块体内容不发送),实现了区块链网络中并非所有网络节点都在区块链存储整个区块,而是其中一部分网络节点在区块链存储整个区块,另外一部分网络节点在区块链存储区块的区块头,这相比现有所有网络节点都要存储区块链上的区块,大大减少节点存储空间,很好地支持了大数据基于区块链的应用。
在上面描述中,第一设定值、设定条件可根据实际情况设置。
在本申请中,任何网络节点存储的区块可更新。下面描述区块更新流程图。
参见图3,图3为本申请提供的区块存储更新流程图。该流程是在发送区块之后执行。如图3所示,该流程可包括以下步骤:
步骤301,收集区块的转发路径拓扑。
本步骤301中,转发路径拓扑的收集类似现有拓扑结构收集,本申请并不重点描述。
步骤302,当检测到返回所述响应消息的所有第一对端网络节点在本地区块链中删除所述区块时,依据所述转发路径拓扑确定所述第一对端网络节点的下一跳并向所述下一跳发送通知消息。
在本申请中,网络节点会和第一对端网络节点进行心跳检测,以确定第一对端网络节点是否在线、第一对端网络节点是否继续存储区块等。
基于上述心跳检测,则本步骤302很容易检测到返回响应消息的所有第一对端网络节点在区块链中是否删除所述区块。
在本申请中,通知消息用于指示收到所述通知消息的任一网络节点先在本地查找到与所述区块关联的第三节点列表,然后检查第三节点列表中第四ttl参数与所述第一设定值之差是否满足设定条件,如果否,将第四ttl参数增加所述第一设定值,并沿着所述转发路径拓扑继续发送所述通知消息,如果是,将所述第四ttl参数增加所述第一设定值,并向发送该响应消息的网络节点发送所述区块。
通过图3所示流程,最终实现了当有网络节点删除区块时,及时增加新的网络节点存储区块,以保证区块的备份数量满足要求。
下面以第一设定值为1,设定条件为等于0为例,通过一个具体实施例对图1所示流程进行描述:
参见图4,图4为本申请提供的实施例应用组网图。图4中,区块链网络以由节点401至节点n共n个节点相互连接组成为例。
在图4中,假设节点401新生成一个区块。该区块记为区块400。区块400包括区块头、区块体内容、节点列表id(记为id100)。
节点401新建一个与id100对应的节点列表(记为表1)。表1中包括节点401的ip地址、ttl参数。这里的ttl参数为初始值。作为一个实施例,在本申请中,初始值可根据实际情况设置。本实施例以初始值为16为例。
节点401在发送区块400之前,先在区块链网络中广播表1。
假若节点402、节点403、节点404收到节点401广播的表1。
节点402计算表1中的ttl参数与1的差值,检查所述差值是否为0。结果发现不为0,则依据表1在本地生成并记录表2。表2与表1不同,表2中的ttl参数为上述差值,表2中还包括:节点402的ip地址、表1中记录的节点401的ip地址。
节点402向节点401返回响应消息,响应消息可携带表2中的ttl参数。
节点403、节点404执行的操作类似节点402,最终也会向节点401返回响应消息。
节点401接收到节点402至节点404分别返回的响应消息,判断响应消息携带的ttl参数均不为0,则在表1中新增节点402至节点404的ip地址,并向节点402至节点404发送区块400。在一个例子中,节点401可以组播的形式向节点402至节点404发送区块400。
最终节点402至节点404都会接收到区块400,将接收到的区块400记录至本地区块链,并继续转发区块400。以节点402为例:
节点402在发送区块400之前,先在区块链网络中广播表2。
假若节点405、节点406收到节点402广播的表2。
节点405计算表2中的ttl参数与1的差值,检查所述差值是否为0。结果发现不为0,则依据表2在本地生成并记录表5。表5与表2不同,表5中的ttl参数为上述差值,表5中还包括:节点405的ip地址、表2中记录的ip地址。
节点405向节点402返回响应消息,响应消息可携带表5中的ttl参数。
节点406执行的操作类似节点405,最终也会向节点402返回响应消息。
节点402接收到节点405、节点406分别返回的响应消息,判断响应消息携带的ttl参数均不为0,则向节点405、节点406发送区块400。在一个例子中,节点402可以组播的形式向节点405、节点406发送区块400。
依次类推,假若当节点340接收到节点331至节点336分别返回的响应消息时,判断响应消息携带的ttl参数为0,则节点340不再发送区块400,而是发送区块400的区块头。之后,收到区块400的区块头的网络节点会继续发送区块400的区块头,依次类推,最终全网中有一部分网络节点会在区块链存储区块400,剩下一部分网络节点会在区块链存储区块400的区块头。
在本实施例中,如上描述可以看出,最终,存储了区块400的每一网络节点本地都会记录一个与区块400关联的节点列表。其中,每一网络节点本地记录的与区块400关联的节点列表包括:区块400在到达本节点之前经由的各网络节点的ip地址、本节点的ip地址、本节点转发区块400的下一跳ip地址。
如图4描述,各网络节点会依据本地记录的与区块400关联的节点列表中的ip地址在相邻邻居之间进行心跳检测,依据心跳检测,采用类似现有拓扑结构收集的方式最终存储了区块400的每一网络节点都会收集区块400的转发路径拓扑。
当存储了区块400的每一网络节点收集区块400的转发路径拓扑后,一旦发现所有下一跳网络节点都删除区块400,则会如上述步骤302的描述,发送通知消息。通知消息的作用如上描述,这里不再赘述。最终,基于通知消息,能够实现存储区块400的网络节点及时增加,以满足区块400的备份数量要求。
至此,完成实施例的描述。
以上对本申请提供的方法进行了描述,下面对本申请提供的装置进行描述:
参见图5,图5为本申请提供的装置结构图。该装置应用于区块链网络中的网络节点,包括:控制单元、发送单元;
所述控制单元,用于在所述发送单元发送区块前先在所述区块链网络中广播与所述区块关联的第一节点列表,所述第一节点列表包括第一生存时间ttl参数,所述区块至少包括区块头、区块体内容;以及,接收第一对端网络节点返回的用于响应所述第一节点列表的响应消息,所述响应消息携带第二ttl参数,所述第二ttl参数为所述第一ttl参数与第一设定值之间的差值;以及,检查所述第二ttl参数是否满足设定条件,如果是,发送区块头通知给所述发送单元,如果否,发送区块通知给所述发送单元;
所述发送单元,用于当接收到来自所述控制单元的区块头通知时,在所述区块链网络中广播所述区块的区块头,当接收到来自所述控制单元的区块通知时,向所述第一对端网络节点发送所述区块。
在一个例子中,所述区块进一步包括:节点列表id;
所述第一节点列表为:所述节点列表id对应的节点列表。
在一个例子中,所述区块由本节点生成;
所述控制单元进一步在本地新建所述第一节点列表,所述第一ttl参数为预设的初始值。
在一个例子中,所述区块是本节点接收的来自与本节点直连的第二对端网络节点发送的区块;
所述控制单元进一步接收所述第二对端网络节点发送的第二节点列表,依据所述第二节点列表生成第一节点列表,所述第一ttl参数为所述第二节点列表中第三ttl参数与所述第一设定值之间的差值。
在一个例子中,所述装置进一步包括:
拓扑收集单元,用于获取所述区块的转发路径拓扑;
更新单元,用于当检测到返回所述响应消息的所有第一对端网络节点在本地区块链中删除所述区块时,依据所述转发路径拓扑确定所述第一对端网络节点的下一跳并向所述下一跳发送通知消息;
所述通知消息用于指示收到所述通知消息的任一网络节点先在本地查找到与所述区块关联的第三节点列表,然后检查第三节点列表中第四ttl参数与所述第一设定值之差是否满足设定条件,如果否,将第四ttl参数增加所述第一设定值,并沿着所述转发路径拓扑继续发送所述通知消息,如果是,将所述第四ttl参数增加所述第一设定值,并向发送该响应消息的网络节点发送所述区块。
至此,完成本申请提供的装置结构图。
对应地,本申请还提供图5所示装置的硬件结构图。如图6所示,该硬件结构可以包括:机器可读存储介质和处理器,其中:
机器可读存储介质:存储指令代码。
处理器:与机器可读存储介质通信,读取和执行所述机器可读存储介质中的指令代码,实现本公开上述示例公开的数据存储方法。
至此,完成图6所示装置的硬件结构图。
在本申请中,机器可读存储介质可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:ram(radomaccessmemory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。
上述实施例阐明的装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本申请的实施例可提供为方法、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可以由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其它可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其它可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
而且,这些计算机程序指令也可以存储在能引导计算机或其它可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或者多个流程和/或方框图一个方框或者多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其它可编程数据处理设备上,使得在计算机或者其它可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其它可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。