区块链节点数据存储方法、区块链系统及区块链节点与流程

文档序号:20345705发布日期:2020-04-10 22:36阅读:462来源:国知局
区块链节点数据存储方法、区块链系统及区块链节点与流程

本公开涉及区块链技术领域,具体地,涉及一种区块链节点数据存储方法、区块链系统及区块链节点。



背景技术:

区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改、不可伪造、完全可追溯、去中心化的分布式账本。

随着基于智能合约的分布式应用的快速发展,区块链上议程承载大量的应用。而区块链中的每个节点不仅需要进行大量的计算以获得区块的记账权,也需要保存该区块链系统中的所有区块的数据。随着区块链中各应用的业务数据的增多,每个区块链节点都全量存储所有区块数据的副本,从而出现大量的数据冗余。



技术实现要素:

本公开的目的是提供一种安全且降低数据冗余的区块链节点数据存储方法、区块链系统及区块链节点。

为了实现上述目的,根据本公开的第一方面,提供一种区块链节点数据存储方法,所述方法应用于区块链节点组,所述区块链节点组包括m个区块链节点,以及n个用于存储区块链的存储模块,n为小于m的正整数,m为大于2的正整数,所述方法包括:

根据每一所述区块链节点接收到的区块写入请求,确定待写入的区块;

将所述待写入的区块分别存储到每一个所述存储模块中。

可选地,所述根据每一所述区块链节点接收到的区块写入请求,确定待写入的区块包括:

若所述区块链节点组中各区块链节点收到唯一的用于请求写入第一区块的区块写入请求,则将所述第一区块作为所述待写入的区块;

若所述区块链节点组中各区块链节点收到多个用于请求写入第二区块的区块写入请求且各所述第二区块中的数据一致,则将所述第二区块作为所述待写入的区块。

可选地,,所述m个区块链节点与所述n个存储模块通过io控制器连接;

所述将所述待写入的区块分别存储到每一个所述存储模块中包括:

通过所述io控制器生成待写入的区块的副本区块,其中,所述副本区块数和当前与所述io控制器连接的存储模块数量一致;

将所述副本区块一一存储到每一与所述io控制器连接的存储模块中。

可选地,,所述方法还包括:

所述区块链节点组中任一区块链节点收到数据读取指令时,根据各所述存储模块的负载确定目标存储模块;

建立该区块链节点和所述目标存储模块之间的数据读取通道,以使该区块链节点根据所述数据读取指令从所述目标存储模块读取数据。

根据本公开的第二方面,提供一种区块链系统,包括:

区块链节点组,所述区块链节点组包括m个区块链节点,以及n个用于存储区块链的存储模块,n为小于m的正整数,m为大于2的正整数;

区块链节点组用于,根据每一所述区块链节点接收到的区块写入请求,确定待写入的区块,并将所述待写入的区块分别存储到每一个所述存储模块中。

可选地,所述m个区块链节点与所述n个存储模块通过io控制器连接;

所述io控制器用于,若所述区块链节点组中各区块链节点收到唯一的用于请求写入第一区块的区块写入请求,则将所述第一区块作为所述待写入的区块;若所述区块链节点组中各区块链节点收到多个用于请求写入第二区块的区块写入请求且各所述第二区块中的数据一致,则将所述第二区块作为所述待写入的区块。

可选地,所述m个区块链节点与所述n个存储模块通过io控制器连接;

所述io控制器用于,生成待写入的区块的副本区块,其中,所述副本区块数和当前与所述io控制器连接的存储模块数量一致;将所述副本区块一一存储到每一与所述io控制器连接的存储模块中。

可选地,所述m个区块链节点与所述n个存储模块通过io控制器连接;

所述io控制器用于,在所述区块链节点组中任一区块链节点收到数据读取指令时,根据各所述存储模块的负载确定目标存储模块;建立该区块链节点和所述目标存储模块之间的数据读取通道,以使该区块链节点根据所述数据读取指令从所述目标存储模块读取数据。

可选地,所述区块链节点组为属于同一机构的区块链节点组成的。

根据本公开的第三方面,提供一种区块链节点,所述区块链节点为第二方面任一所述区块链系统中的所述区块链节点组中的任一区块链节点。

在上述技术方案中,通过将区块链节点的计算能力和存储能力进行解耦,并且在该区块链节点组中的存储模块的个数少于区块链节点的个数,从而可以使得多个区块链节点共享存储模块。因此,每个区块链接收到区块写入请求时,将待写入的区块存储至存储模块中,以使得存储模块中可以保存全量数据。通过上述技术方案,可以在保证区块链存储的完整性和可靠性的同时,有效降低数据冗余,节省存储资源。并且,可以在该区块链接也可以降低对区块链节点的性能要求,可以基于该区块链节点组的对应的存储模块扩展新的区块链节点而无需增加新的存储资源,便于区块链节点的扩展以及提高区块链节点组的计算能力。

本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。

附图说明

附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:

图1是根据本公开的一种实施方式提供的区块链节点数据存储方法的流程图;

图2是本公开的一种实施例提供的区块链节点组的示意图;

图3是本公开的一种实施例提供的区块链节点组的示意图;

图4是根据一示例性实施例示出的一种区块链节点的框图;

图5是根据一示例性实施例示出的一种区块链节点的框图。

具体实施方式

以下结合附图对本公开的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本公开,并不用于限制本公开。

区块链节点,通常是指下载了相关加密货币(比特币、ethereum、monero等)软件,以参与对等网络的计算机。另外,区块链网络中,不是所有节点均参与挖矿,一些节点可能只具备查询和发布交易的功能。其中,参与挖矿的节点称为矿工节点,本文以下所描述的区块链节点均为矿工节点。

本公开提供一种区块链节点数据存储方法,该方法应用于区块链节点组,所述区块链节点组包括m个区块链节点,以及n个用于存储区块链的存储模块,n为小于m的正整数,m为大于2的正整数。

如背景技术中所述,现有的区块链节点需要进行大量的计算并且需要全量存储区块链,这样会出现大量的数据冗余。基于此,本公开中对区块链节点的计算能力和存储能力进行解耦,即本公开中所述的区块链节点可以只包含计算能力,从而可以进行挖矿且不需要存储区块链。当然,本公开中的部分区块链节点可以既包含计算能力,也包含存储模块以存储区块链。存储模块可以是独立的存储模块,也可以是某区块链节点的本地存储模块。

图1所示,为根据本公开的一种实施方式提供的区块链节点数据存储方法的流程图,如图1所示,所述方法包括:

在s11中,根据每一区块链节点接收到的区块写入请求,确定待写入的区块。

其中,一定数量的区块链节点通过p2p网络相互建立连接,形成区块链的基础网络。系统为了找出谁有更强大的计算能力,每次会出一道数学题,只有最快解出这道题目的计算机才能进行记账。在区块链网络中的任一区块链节点获得记账权并创建区块时,该区块链节点会在网络中进行广播,以通知其他区块链节点,并使其他区块链节点对其记账的合法性进行验证,在进行验证确定合法后,则可以将该区块进行存储同步。

示例地,创建区块的区块链节点发出的广播消息,区块链节点组中的每一区块链节点接收到该广播消息进行解析并验证,以获得区块写入请求,从而确定该区块写入请求对应的待写入的区块。示例地,区块链是数据区块以顺序相连的方式组合成的一种链式数据结构,区块头里面存储着区块的头信息,包含上一个区块的引用,本区块体的哈希值,以及时间戳等等,则可以基于区块头确定该待写入的区块。

在s12中,将待写入的区块分别存储到每一个存储模块中。

在上述技术方案中,通过将区块链节点的计算能力和存储能力进行解耦,并且在该区块链节点组中的存储模块的个数少于区块链节点的个数,从而可以使得多个区块链节点共享存储模块。因此,每个区块链接收到区块写入请求时,将待写入的区块存储至存储模块中,以使得存储模块中可以保存全量数据。通过上述技术方案,可以在保证区块链存储的完整性和可靠性的同时,有效降低数据冗余,节省存储资源。并且,可以在该区块链接也可以降低对区块链节点的性能要求,可以基于该区块链节点组的对应的存储模块扩展新的区块链节点而无需增加新的存储资源,便于区块链节点的扩展以及提高区块链节点组的计算能力。

可选地,所述根据每一所述区块链节点接收到的区块写入请求,确定待写入的区块的一种示例性实现方式如下,该步骤可以包括:

若所述区块链节点组中各区块链节点收到唯一的用于请求写入第一区块的区块写入请求,则将所述第一区块作为所述待写入的区块。

如图2所示,为本公开的一种实施例提供的区块链节点组的示意图,其中,a1、a2、a3分别用于表示3个区块链节点,b1和b2分别用于表示2个存储模块。

在一种实施例中,在网络中的区块链节点进行广播时,可能由于网路问题,区块链节点组中的各个区块链节点并不一定都能接收到该广播消息。示例地,如上文所述,可以根据区块头确定待写入的区块,例如,a1接收到的区块写入请求中请求写入区块(即第一区块)的上一个区块的引用为03,若在该区块链节点组中只有a1收到针对第一区块(即,引用为03的区块的下一区块)的区块写入请求,此时可以直接将该第一区块作为待写入的区块。

若所述区块链节点组中各区块链节点收到多个用于请求写入第二区块的区块写入请求且各所述第二区块中的数据一致,则将所述第二区块作为所述待写入的区块。

示例地,a1接收到的区块写入请求中请求写入区块的上一个区块的引用为13,a2接收到的区块写入请求中请求写入区块的上一个区块的引用为33。由于区块链是数据区块以顺序相连的方式组合成的一种链式数据结构,则a1和a2接收到的区块写入请求中的请求写入区块均是区块的引用为13的区块的下一区块,表示a1和a2的区块写入请求中请求写入区块为同一区块(即第二区块),即区块链节点组中各区块链节点收到多个用于请求写入第二区块的区块写入请求。

在收到对个用户请求写入第二区块的区块请求时,需要保证写入数据的一致性,因此,在该情况下需要对第二区块中的数据进行校验。其中,在区块头中包含merkle树,区块中的所有交易信息都被merkle树归纳总结,大大提高区块链的效率。因此,可以通过校验a1的和a2分别对应的第二区块中的merkle树是否相同,若相同,则确定各第二区块中的数据一致,则将第二区块作为待写入的区块,若不同,此时由于写入同一区块的数据不同,可以将该区块丢弃,以避免存储错误数据。另外,也可以通过与其他已存储的区块链节点进行数据同步以将该区块对应的准确数据存储至存储模块中,以保证数据的完整性。

通过上述技术方案,可以在多个区块链节点收到请求写入同一区块的区块写入请求的情况下,保证多个区块链节点写入数据的一致性,同时可以对针对同一区块的区块写入请求进行去重,无需针对每个区块链节点收到的区块写入请求同步区块数据,从而提高资源利用率。

可选地,所述m个区块链节点与所述n个存储模块通过io(input/output)控制器(如图2中c所示)连接;

将待写入的区块分别存储到每一个存储模块中的一种示例性实施方式如下,该步骤可以包括:

通过所述io控制器生成待写入的区块的副本区块,其中,所述副本区块数和当前与所述io控制器连接的存储模块数量一致;

将所述副本区块一一存储到每一与所述io控制器连接的存储模块中。

在该实施例中,由于存储模块的个数少于区块链节点的个数,因此,在对带入写的区块进行存储时,可以通过io控制器基于存储模块的个数确定生成的副本区块的个数,使得副本区块的数量可以根据存储模块的数量进行动态配置,一方面可以保证每个存储模块存储数据的完整性,另一方面可以有效降低数据冗余,节省存储空间。

可选地,所述区块链节点组为属于同一机构的区块链节点组成的,从而可以便于该机构的区块链节点的管理以及计算能力的扩展。

可选地,所述方法还包括:

所述区块链节点组中任一区块链节点收到数据读取指令时,根据各所述存储模块的负载确定目标存储模块。

其中,在需要从区块链节点读取数据时,可以向该区块链节点发送一数据读取指令,则针对区块链节点组中任一区块链节点,在该区块链节点收到数据读取指令时,从该区块链节点组的n的存储区块中确定目标存储区块。

示例地,可以根据各个存储模块的负载确定目标存储模块,例如,获取各个存储模块当前的访问量,将访问量最小的存储模块确定为目标存储模块。又例如,可以获取各个存储模块当前的可用带宽,将可用带宽最大的存储模块确定为目标存储模块。

在确定出目标存储模块之后,建立该区块链节点和所述目标存储模块之间的数据读取通道,以使该区块链节点根据所述数据读取指令从所述目标存储模块读取数据。

示例地,建立该区块链节点和所述目标存储模块之间的数据读取通道,可以是控制该区块链节点访问该目标存储模块,例如,可以基于目标存储模块的id进行访问,从而可以使得区块链节点从该目标存储模块中读取数据。如图3中所示区块链节点a1与存储模块b1之间的数据读取通道l1,区块链节点a3与存储模块b2之间的数据读取通道l2。

可选地,可以设置数据读取通道的有效时间。在超出有效时间后,在该区块链节点收到数据读取指令时,可以通过各个存储模块的负载重新确定目标存储模块,从而保证数据读取效率。

在上述技术方案中,在区块链节点组中的任一区块链节点收到数据读取指令时,可以根据存储模块的负载以确定该区块链节点访问的存储模块,保证存储模块的负载均衡,从而可以充分利用各个存储模块的读数据带宽,提高并发数据读取性能和数据读取效率。

本公开还提供一种区块链系统,包括:

区块链节点组,所述区块链节点组包括m个区块链节点,以及n个用于存储区块链的存储模块,n为小于m的正整数,m为大于2的正整数;

区块链节点组用于,根据每一所述区块链节点接收到的区块写入请求,确定待写入的区块,并将所述待写入的区块分别存储到每一个所述存储模块中。

可选地,所述m个区块链节点与所述n个存储模块通过io控制器连接;

所述io控制器用于,若所述区块链节点组中各区块链节点收到唯一的用于请求写入第一区块的区块写入请求,则将所述第一区块作为所述待写入的区块;若所述区块链节点组中各区块链节点收到多个用于请求写入第二区块的区块写入请求且各所述第二区块中的数据一致,则将所述第二区块作为所述待写入的区块。

可选地,所述m个区块链节点与所述n个存储模块通过io控制器连接;

所述io控制器用于,生成待写入的区块的副本区块,其中,所述副本区块数和当前与所述io控制器连接的存储模块数量一致;将所述副本区块一一存储到每一与所述io控制器连接的存储模块中。

可选地,所述m个区块链节点与所述n个存储模块通过io控制器连接;

所述io控制器用于,在所述区块链节点组中任一区块链节点收到数据读取指令时,根据各所述存储模块的负载确定目标存储模块;建立该区块链节点和所述目标存储模块之间的数据读取通道,以使该区块链节点根据所述数据读取指令从所述目标存储模块读取数据。

可选地,所述区块链节点组为属于同一机构的区块链节点组成的。

关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

本公开还提供一种区块链节点,所述区块链节点为上述区块链系统中的所述区块链节点组中的任一区块链节点。

可选地,该区块链节点可以在接收到区块写入请求时,将区块写入请求发送至io控制器,以通过所述io控制器生成待写入的区块的副本区块,并将所述副本区块一一存储到每一与所述io控制器连接的存储模块中。

图4是根据一示例性实施例示出的一种区块链节点700的框图。如图4所示,该区块链节点700可以包括:处理器701,存储器702。该区块链节点700还可以包括多媒体组件703,输入/输出(i/o)接口704,以及通信组件705中的一者或多者。

其中,处理器701用于控制该区块链节点700的整体操作,以完成上述的区块链节点数据存储方法中的全部或部分步骤。存储器702用于存储各种类型的数据以支持在该区块链节点700的操作,这些数据例如可以包括用于在该区块链节点700上操作的任何应用程序或方法的指令,以及应用程序相关的数据,例如联系人数据、收发的消息、图片、音频、视频等等。该存储器702可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(staticrandomaccessmemory,简称sram),电可擦除可编程只读存储器(electricallyerasableprogrammableread-onlymemory,简称eeprom),可擦除可编程只读存储器(erasableprogrammableread-onlymemory,简称eprom),可编程只读存储器(programmableread-onlymemory,简称prom),只读存储器(read-onlymemory,简称rom),磁存储器,快闪存储器,磁盘或光盘。多媒体组件703可以包括屏幕和音频组件。其中屏幕例如可以是触摸屏,音频组件用于输出和/或输入音频信号。例如,音频组件可以包括一个麦克风,麦克风用于接收外部音频信号。所接收的音频信号可以被进一步存储在存储器702或通过通信组件705发送。音频组件还包括至少一个扬声器,用于输出音频信号。i/o接口704为处理器701和其他接口模块之间提供接口,上述其他接口模块可以是键盘,鼠标,按钮等。这些按钮可以是虚拟按钮或者实体按钮。通信组件705用于该区块链节点700与其他设备之间进行有线或无线通信。无线通信,例如wi-fi,蓝牙,近场通信(nearfieldcommunication,简称nfc),2g、3g、4g、nb-iot、emtc、或其他5g等等,或它们中的一种或几种的组合,在此不做限定。因此相应的该通信组件705可以包括:wi-fi模块,蓝牙模块,nfc模块等等。

在一示例性实施例中,区块链节点700可以被一个或多个应用专用集成电路(applicationspecificintegratedcircuit,简称asic)、数字信号处理器(digitalsignalprocessor,简称dsp)、数字信号处理设备(digitalsignalprocessingdevice,简称dspd)、可编程逻辑器件(programmablelogicdevice,简称pld)、现场可编程门阵列(fieldprogrammablegatearray,简称fpga)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述的区块链节点数据存储方法。

在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,该程序指令被处理器执行时实现上述的区块链节点数据存储方法的步骤。例如,该计算机可读存储介质可以为上述包括程序指令的存储器702,上述程序指令可由区块链节点700的处理器701执行以完成上述的区块链节点数据存储方法。

图5是根据一示例性实施例示出的一种区块链节点1900的框图。例如,区块链节点1900可以被提供为一服务器。参照图5,区块链节点1900包括处理器1922,其数量可以为一个或多个,以及存储器1932,用于存储可由处理器1922执行的计算机程序。存储器1932中存储的计算机程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理器1922可以被配置为执行该计算机程序,以执行上述的区块链节点数据存储方法。

另外,区块链节点1900还可以包括电源组件1926和通信组件1950,该电源组件1926可以被配置为执行区块链节点1900的电源管理,该通信组件1950可以被配置为实现区块链节点1900的通信,例如,有线或无线通信。此外,该区块链节点1900还可以包括输入/输出(i/o)接口1958。区块链节点1900可以操作基于存储在存储器1932的操作系统,例如windowsservertm,macosxtm,unixtm,linuxtm等等。

在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,该程序指令被处理器执行时实现上述的区块链节点数据存储方法的步骤。例如,该计算机可读存储介质可以为上述包括程序指令的存储器1932,上述程序指令可由区块链节点1900的处理器1922执行以完成上述的区块链节点数据存储方法。

在另一示例性实施例中,还提供一种计算机程序产品,该计算机程序产品包含能够由可编程的装置执行的计算机程序,该计算机程序具有当由该可编程的装置执行时用于执行上述的区块链节点数据存储方法的代码部分。

以上结合附图详细描述了本公开的优选实施方式,但是,本公开并不限于上述实施方式中的具体细节,在本公开的技术构思范围内,可以对本公开的技术方案进行多种简单变型,这些简单变型均属于本公开的保护范围。

另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合。为了避免不必要的重复,本公开对各种可能的组合方式不再另行说明。

此外,本公开的各种不同的实施方式之间也可以进行任意组合,只要其不违背本公开的思想,其同样应当视为本公开所公开的内容。

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