数据存储方法、装置、电子设备和存储介质转让专利

申请号 : CN202211533529.0

文献号 : CN115544026B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘杨宇文睿啸彭木根

申请人 : 北京邮电大学

摘要 :

本发明提供一种数据存储方法、装置、电子设备和存储介质,应用于数据处理技术领域,该方法包括:获取哈希值空间及待存储数据;在多个预设哈希位置中,确定共识节点对应存储单元的第一预设哈希位置,并确定待存储数据对应的第二预设哈希位置,第一预设哈希位置对应的第一预设哈希值与存储单元对应的第一哈希值相同,第二预设哈希位置对应的第二预设哈希值与待存储数据对应的第二哈希值相同;在多个存储单元对应的第一预设哈希位置中,确定与第二预设哈希位置距离最近的第一预设哈希位置;将待存储数据存储至距离最近的第一预设哈希位置对应的存储单元中。该方法能够有效提高数据的存储效率,以提高该区块链系统的整体性能。

权利要求 :

1.一种数据存储方法,其特征在于,应用于区块链系统中多个共识节点中的任一共识节点,每个共识节点对应一个存储单元,所述方法包括:获取哈希值空间及待存储数据,所述哈希值空间包括多个预设哈希位置,所述多个预设哈希位置是将多个预设哈希值按照预设顺序进行排列得到的;

在所述多个预设哈希位置中,确定所述共识节点对应存储单元的第一预设哈希位置,并确定所述待存储数据对应的第二预设哈希位置,所述第一预设哈希位置对应的第一预设哈希值与所述存储单元对应的第一哈希值相同,所述第二预设哈希位置对应的第二预设哈希值与所述待存储数据对应的第二哈希值相同;

在多个所述存储单元对应的第一预设哈希位置中,确定与所述第二预设哈希位置距离最近的第一预设哈希位置;

将所述待存储数据存储至所述距离最近的第一预设哈希位置对应的存储单元中;

其中,所述在所述多个预设哈希位置中,确定所述共识节点对应存储单元的第一预设哈希位置,包括:根据所述共识节点对应存储单元的互联网协议地址,确定所述存储单元对应的第一哈希值;

在所述多个预设哈希值中,确定与所述第一哈希值相同的第一预设哈希值;

将所述第一预设哈希值对应的预设哈希位置确定为所述存储单元对应的第一预设哈希位置。

2.根据权利要求1所述的方法,其特征在于,所述预设顺序为顺时针顺序或逆时针顺序,所述获取哈希值空间,包括:获取多个预设哈希值;

将所述多个预设哈希值按照预设顺序进行递增排列或递减排列,得到对应的预设哈希位置;

根据多个所述预设哈希位置,确定哈希值空间。

3.根据权利要求1所述的方法,其特征在于,所述确定所述待存储数据对应的第二预设哈希位置,包括:根据所述待存储数据对应的预设关键字,确定所述待存储数据对应的第二哈希值;

在所述多个预设哈希值中,确定与所述第二哈希值相同的第二预设哈希值;

将所述第二预设哈希值对应的预设哈希位置确定为所述待存储数据对应的第二预设哈希位置。

4.根据权利要求1‑3中任一项所述的方法,其特征在于,所述将所述待存储数据存储至所述距离最近的第一预设哈希位置对应的存储单元中,包括:根据所述存储数据,确定默克尔树Merkle‑tree数据、默克尔B+树MB‑tree数据及认证列表,所述Merkle‑tree数据用于指示所述存储单元对应的状态信息,所述MB‑tree数据用于指示所述存储单元对应的摘要信息,所述认证列表用于对所述存储单元的历史数据进行跟踪;

将所述Merkle‑tree数据、MB‑tree数据及认证列表,分别存储至所述距离最近的第一预设哈希位置对应的存储单元所包括的共识节点中。

5.根据权利要求1‑3中任一项所述的方法,其特征在于,所述存储单元包括至少一个存储节点,获取待存储数据,包括:响应用户的签名操作,所述签名操作是所述用户对所述存储节点提供的交易请求对应的结果数据进行确认后得到的;

根据所述签名操作,确定所述结果数据对应的待存储数据。

6.根据权利要求1‑3中任一项所述的方法,其特征在于,在所述将所述待存储数据存储至所述距离最近的第一预设哈希位置对应的存储单元中之后,所述方法还包括:利用非交互式零知识证明算法,确定所述存储单元中所述待存储数据中的加密数据;

将所述加密数据广播至其它存储单元中的共识节点,以使所述其它存储单元中的共识节点对所述加密数据进行验证。

7.一种数据存储装置,其特征在于,应用于区块链系统中多个共识节点中的任一共识节点,每个共识节点对应一个存储单元,所述装置包括:获取模块,用于获取哈希值空间及待存储数据,所述哈希值空间包括多个预设哈希位置,所述多个预设哈希位置是将多个预设哈希值按照预设顺序进行排列得到的;

处理模块,用于在所述多个预设哈希位置中,确定所述共识节点对应存储单元的第一预设哈希位置,并确定所述待存储数据对应的第二预设哈希位置,所述第一预设哈希位置对应的第一预设哈希值与所述存储单元对应的第一哈希值相同,所述第二预设哈希位置对应的第二预设哈希值与所述待存储数据对应的第二哈希值相同;在多个所述存储单元对应的第一预设哈希位置中,确定与所述第二预设哈希位置距离最近的第一预设哈希位置;将所述待存储数据存储至所述距离最近的第一预设哈希位置对应的存储单元中;

其中,所述处理模块在所述多个预设哈希位置中,确定所述共识节点对应存储单元的第一预设哈希位置的过程中,具体用于根据所述共识节点对应存储单元的互联网协议地址,确定所述存储单元对应的第一哈希值;在所述多个预设哈希值中,确定与所述第一哈希值相同的第一预设哈希值;将所述第一预设哈希值对应的预设哈希位置确定为所述存储单元对应的第一预设哈希位置。

8.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至6任一项所述数据存储方法。

9.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述数据存储方法。

说明书 :

数据存储方法、装置、电子设备和存储介质

技术领域

[0001] 本发明涉及数据处理技术领域,尤其涉及一种数据存储方法、装置、电子设备和存储介质。

背景技术

[0002] 在数字经济时代,数据成为新的生产资料,数据驱动体验、数据驱动决策、数据驱动流程的各种应用正不断上演。随着互联网及物联网等技术的不断发展,越来越多的数据被生产出来。无论是关于用户的,还是关于车和机器的,乃至世间万物有研究价值的,都伴随着众多数据信息。根据最新统计,每天大约有超过万亿字节的各种各样数据产生。而这些获取到的数据需要被存储起来并且能够被方便的分析和利用。
[0003] 但是数据时代的技术变革在影响着人们生活方方面面的同时,也面临许多技术问题。其中,如何能够提高存储效率的数据存储技术始终是行业热点方向。

发明内容

[0004] 本发明提供一种数据存储方法、装置、电子设备和存储介质,用以解决现有技术中区块链系统存储数据时存储效率较低的缺陷,实现优化区块链系统的结构的同时可降低存储单元的存储压力,从而有效提高数据的存储效率,以提高该区块链系统的整体性能。
[0005] 本发明提供一种数据存储方法,应用于区块链系统中多个共识节点中的任一共识节点,每个共识节点对应一个存储单元,该方法包括:
[0006] 获取哈希值空间及待存储数据,该哈希值空间包括多个预设哈希位置,该多个预设哈希位置是将多个预设哈希值按照预设顺序进行排列得到的;
[0007] 在该多个预设哈希位置中,确定该共识节点对应存储单元的第一预设哈希位置,并确定该待存储数据对应的第二预设哈希位置,该第一预设哈希位置对应的第一预设哈希值与该存储单元对应的第一哈希值相同,该第二预设哈希位置对应的第二预设哈希值与该待存储数据对应的第二哈希值相同;
[0008] 在多个该存储单元对应的第一预设哈希位置中,确定与该第二预设哈希位置距离最近的第一预设哈希位置;
[0009] 将该待存储数据存储至该距离最近的第一预设哈希位置对应的存储单元中。
[0010] 根据本发明提供的一种数据存储方法,该预设顺序为顺时针顺序或逆时针顺序,该获取哈希值空间,包括:获取多个预设哈希值;将该多个预设哈希值按照预设顺序进行递增排列或递减排列,得到对应的预设哈希位置;根据多个该预设哈希位置,确定哈希值空间。
[0011] 根据本发明提供的一种数据存储方法,该在该多个预设哈希位置中,确定该共识节点对应存储单元的第一预设哈希位置,包括:根据该共识节点对应存储单元的互联网协议地址,确定该存储单元对应的第一哈希值;在该多个预设哈希值中,确定与该第一哈希值相同的第一预设哈希值;将该第一预设哈希值对应的预设哈希位置确定为该存储单元对应的第一预设哈希位置。
[0012] 根据本发明提供的一种数据存储方法,该确定该待存储数据对应的第二预设哈希位置,包括:根据该待存储数据对应的预设关键字,确定该待存储数据对应的第二哈希值;在该多个预设哈希值中,确定与该第二哈希值相同的第二预设哈希值;将该第二预设哈希值对应的预设哈希位置确定为该待存储数据对应的第二预设哈希位置。
[0013] 根据本发明提供的一种数据存储方法,该将该待存储数据存储至该距离最近的第一预设哈希位置对应的存储单元中,包括:根据该存储数据,确定默克尔树Merkle‑tree数据、默克尔B+树MB‑tree数据及认证列表,该Merkle‑tree数据用于指示该存储单元对应的状态信息,该MB‑tree数据用于指示该存储单元对应的摘要信息,该认证列表用于对该存储单元的历史数据进行跟踪;将该Merkle‑tree数据、MB‑tree数据及认证列表,分别存储至该距离最近的第一预设哈希位置对应的存储单元所包括的共识节点中。
[0014] 根据本发明提供的一种数据存储方法,该存储单元包括至少一个存储节点,获取待存储数据,包括:响应用户的签名操作,该签名操作是该用户对该存储节点提供的交易请求对应的结果数据进行确认后得到的;根据该签名操作,确定该结果数据对应的待存储数据。
[0015] 根据本发明提供的一种数据存储方法,在该将该待存储数据存储至该距离最近的第一预设哈希位置对应的存储单元中之后,该方法还包括:利用非交互式零知识证明算法,确定该存储单元中该待存储数据中的加密数据;将该加密数据广播至其它存储单元中的共识节点,以使该其它存储单元中的共识节点对该加密数据进行验证。
[0016] 本发明还提供一种数据存储装置,应用于区块链系统中多个共识节点中的任一共识节点,每个共识节点对应一个存储单元,该装置包括:
[0017] 获取模块,用于获取哈希值空间及待存储数据,该哈希值空间包括多个预设哈希位置,该多个预设哈希位置是将多个预设哈希值按照预设顺序进行排列得到的;
[0018] 处理模块,用于在该多个预设哈希位置中,确定该共识节点对应存储单元的第一预设哈希位置,并确定该待存储数据对应的第二预设哈希位置,该第一预设哈希位置对应的第一预设哈希值与该存储单元对应的第一哈希值相同,该第二预设哈希位置对应的第二预设哈希值与该待存储数据对应的第二哈希值相同;在多个该存储单元对应的第一预设哈希位置中,确定与该第二预设哈希位置距离最近的第一预设哈希位置;将该待存储数据存储至该距离最近的第一预设哈希位置对应的存储单元中。
[0019] 本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述数据存储方法。
[0020] 本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述数据存储方法。
[0021] 本发明还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述数据存储方法。
[0022] 本发明提供的数据存储方法、装置、电子设备和存储介质,通过获取哈希值空间及待存储数据,哈希值空间包括多个预设哈希位置,多个预设哈希位置是将多个预设哈希值按照预设顺序进行排列得到的;在多个预设哈希位置中,确定共识节点对应存储单元的第一预设哈希位置,并确定待存储数据对应的第二预设哈希位置,第一预设哈希位置对应的第一预设哈希值与存储单元对应的第一哈希值相同,第二预设哈希位置对应的第二预设哈希值与待存储数据对应的第二哈希值相同;在多个存储单元对应的第一预设哈希位置中,确定与第二预设哈希位置距离最近的第一预设哈希位置;将待存储数据存储至距离最近的第一预设哈希位置对应的存储单元中。该方法用以解决现有技术中区块链系统存储数据时存储效率较低的缺陷,实现优化区块链系统的结构的同时可降低存储单元的存储压力,从而有效提高数据的存储效率,以提高该区块链系统的整体性能。

附图说明

[0023] 为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0024] 图1是本发明提供的区块链系统的结构示意图;
[0025] 图2是本发明提供的数据存储方法的流程示意图;
[0026] 图3是本发明提供的包含四个区域的聚合默克尔B+树AMB‑tree数据的示意图;
[0027] 图4是本发明提供的数据广播及验证的场景示意图;
[0028] 图5是本发明提供的数据存储装置的结构示意图;
[0029] 图6是本发明提供的电子设备的结构示意图。

具体实施方式

[0030] 为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0031] 需要说明的是,本发明实施例涉及的区块链系统可以包括多个区块链节点,该区块链系统以分布式存储模型为底层技术。
[0032] 其中,区块链节点可以是任意一台具有自主处理能力的主机,可以包括但不限于:笔记本电脑、台式计算机等;也可以是具有可视化操作终端、足够存储空间、能够通过网络进行通信的手机和服务器等;
[0033] 区块链系统可以包括多个存储单元(Storage Unit,SU)。
[0034] 每个存储单元可以包括一个共识节点(Consensus Node,CN)及至少一个存储节点(Storage Node,SN),每个存储单元都可通过自由进出区块链节点来增加该存储单元所在区块链存储的可扩展性。
[0035] 共识节点也可称为共识区块链节点/电子设备,可作为存储单元的核心,拥有存在于该存储单元中的全部数据。该共识节点可用于参与事务共识及生成可验证块,具体的,该共识节点可在对应存储单元中与存储节点进行数据通信和交互,该共识节点还可与其它共识节点争夺区块发布权,以完成账本更新操作。
[0036] 存储节点也可称为存储区块链节点,该存储节点不仅可以存储对应存储单元中的部分区块链数据,还可以响应用户端设备中用户输入的请求操作,以提供与该请求操作对应的数据请求服务。
[0037] 需要说明的是,每个存储单元中的共识节点的计算能力大于存储节点的计算能力,且该共识节点的存储容量大于存储节点的存储容量。
[0038] 可选的,各个存储单元中存储节点的数量可以是相同的,也可以是不同的,此处不作具体限定。
[0039] 可选的,每个存储单元中的共识节点可构成一个共识网络。
[0040] 其中,共识网络用于负责事务排序、验证及区块打包等任务。
[0041] 可选的,每个存储单元中共识节点与存储节点之间、不同的共识节点之间都可通过点对点(Peer to Peer,P2P)网络协议进行通信,使用分布式存储模型对应的分布式共识机制达成协议,构成广义区块链网络。
[0042] 示例性的,如图1所示,是本发明提供的区块链系统的结构示意图。该图1中,区块链系统包括四个存储单元,分别第一存储单元、第二存储单元、第三存储单元及第四存储单元;该第一存储单元包括一个共识节点和两个存储节点,该第二存储单元、该第三存储单元及该第四存储单元都分别包括一个共识节点和三个存储节点。其中,这四个共识节点可以构成一个共识网络。
[0043] 可选的,每个存储单元都对应一个散列范围,如果这些存储单元中存在撤销的存储单元,那么,其该撤销的存储单元的相邻存储单元对应的散列范围就会扩大,该撤销的存储单元中的存储数据都将存储至该相邻存储单元中。
[0044] 本发明实施例涉及的用户端设备可以包括:计算机、移动终端及可穿戴设备等。
[0045] 可选的,每个存储单元中共识节点与存储节点之间、不同的共识节点之间以及共识节点与用户端设备之间都可通过无线通信技术进行连接,该无线通信技术可以包括但不限于以下其中一项:第四代通讯技术(the 4 Generation mobile communication technology,4G)、第五代通讯技术(the  5 Generation mobile communication technology,5G)及无线保真技术(Wireless Fidelity,WiFi)等。
[0046] 需要说明的是,本发明实施例涉及的执行主体可以是数据存储装置,也可以是共识节点,下面以区块链系统中多个共识节点中的任一共识节点为例对本发明实施例进行进一步地说明,每个共识节点对应一个存储单元。
[0047] 如图2所示,是本发明提供的数据存储方法的流程示意图,可以包括:
[0048] 201、获取哈希值空间及待存储数据。
[0049] 其中,哈希(Hash)值空间可以包括多个预设哈希位置,多个预设哈希位置是将多个预设哈希值按照预设顺序进行排列得到的,也就是说,一个预设哈希值可以对应一个预设哈希位置,这多个预设哈希位置可构成一个哈希值空间。
[0050] 可选的,预设顺序可以顺时针顺序,也可以是逆时针顺序;该预设顺序可以是共识节点出厂前设置的,也可以是用户自定义的,此处不作具体限定。
[0051] 其中,待存储数据指的是共识节点获取的需要在存储单元中进行存储的数据。
[0052] 在一些实施例中,共识节点获取哈希值空间,可以包括:共识节点获取多个预设哈希值;该共识节点将多个预设哈希值按照预设顺序进行递增排列或递减排列,得到对应的预设哈希位置;该共识节点根据多个预设哈希位置,确定哈希值空间。
[0053] 共识节点在获取多个预设哈希值之后,可以将该所有的预设哈希值按照预设顺序从小到大或者从大到小进行点位排列,得到对应的预设哈希位置,进而得到一个哈希值空间。
[0054] 示例性的,共识节点利用一致哈希算法的分片计算,将哈希值空间0至232组织为虚拟圆环,所有的预设哈希值按顺时针顺序从小到大排布点位,也就是说,该共识节点得到的哈希值空间是一个虚拟圆环空间。
[0055] 其中,上述虚拟圆环空间也可称为哈希环。
[0056] 可选的,如果一个新的存储单元被哈希到上述哈希环上,该新的存储单元会从相邻存储单元上削减一部分散列范围构成该新的存储单元对应的散列范围,这样一来,区块链系统中的存储数据不会受到影响,也无需重新分配该区块链系统中的存储数据;
[0057] 如果区块链系统中存储单元过少,导致这些存储单元在上述哈希环上的预设哈希位置分配不均匀,易造成待传输数据缓存倾斜,那么,该区块链系统可以启动虚拟节点机制,控制一个实际的物理区块链节点计算得到多个虚拟节点,进而提高数据均匀缓存的概率。
[0058] 可选的,共识节点在确定哈希值空间之后,该方法还可以包括:共识节点将哈希值空间广播至其它共识节点。
[0059] 其它共识节点在获取哈希值空间之后,就不需要单独去计算新的哈希值空间,可有效提高该哈希值空间的利用率,并减小了该其它共识节点的使用功耗。
[0060] 在一些实施例中,存储单元包括至少一个存储节点,共识节点获取待存储数据,可以包括:共识节点响应用户的签名操作;该共识节点根据签名操作,确定结果数据对应的待存储数据。
[0061] 其中,签名操作是用户对存储节点提供的交易请求对应的结果数据进行确认后得到的。
[0062] 用户可在用户端设备中提交事务对块,生成相应的交易请求操作;然后,用户端设备在确定该交易请求操作是合法的情况下,将该交易请求操作发送至存储节点;接着,该存储节点在接收该用户端设备发送的该交易请求操作之后,按照智能合约(Smart Contract)执行该交易请求操作,得到结果数据,该结果数据可以包括该交易请求操作的交易结果及数字证书认证机构(Certificate Authority,CA)证书,并将该结果数据返回至该用户端设备;然后,用户对该用户端设备接收的该结果数据进行签名确认,并在该用户端设备上输入签名操作,该用户端设备将该签名操作提交至共识节点;最后,该共识节点根据该签名操作,对该用户端设备中的事务对块进行排序、校验、打包及生成等处理,得到该结果数据对应的待存储数据。
[0063] 其中,智能合约指的是区块链系统对应的区块链程序;
[0064] CA证书指的是签发的对用户的公钥的认证,可选的,该CA证书的内容可以包括:电子签证机关的信息、公钥用户信息、公钥、权威机构的签字和有效期等等。
[0065] 202、在多个预设哈希位置中,确定共识节点对应存储单元的第一预设哈希位置,并确定待存储数据对应的第二预设哈希位置。
[0066] 其中,第一预设哈希位置对应的第一预设哈希值与存储单元对应的第一哈希值相同,第二预设哈希位置对应的第二预设哈希值与待存储数据对应的第二哈希值相同。
[0067] 共识节点在获取获取哈希值空间及待存储数据之后,可利用一致哈希算法将该共识节点对应的存储单元映射到哈希值空间上的一个预设哈希位置,并利用该一致哈希算法将每个待存储数据映射到该哈希值空间上的一个预设哈希位置,也就是说,该共识节点可以利用一致哈希算法,在多个预设哈希位置中,确定该共识节点对应存储单元的第一预设哈希位置,并确定该待存储数据对应的第二预设哈希位置。
[0068] 其中,一致哈希算法指的是确定共识节点对应存储单元在哈希值空间中的位置,及确定待存储数据在该哈希值空间中的位置的算法。
[0069] 在一些实施例中,共识节点在多个预设哈希位置中,确定共识节点对应存储单元的第一预设哈希位置,可以包括:共识节点根据共识节点对应存储单元的互联网协议地址(Internet Protocol,IP),确定存储单元对应的第一哈希值;该共识节点在多个预设哈希值中,确定与第一哈希值相同的第一预设哈希值;该共识节点将第一预设哈希值对应的预设哈希位置确定为存储单元对应的第一预设哈希位置。
[0070] 其中,IP指的是共识节点的一个编号,是一个32位的二进制数。这32位的二进制数通常被分割为4个“8位二进制数”,也就是说,会将这32位的二进制数分割为4个字节。
[0071] 共识节点可以先确定该共识节点对应存储单元的IP,并基于该IP,确定该存储单元对应的第一哈希值;然后,该共识节点将哈希值空间中的预设哈希值逐一与该第一哈希值进行比较,确定出与该第一哈希值相同的预设哈希值,并将与该第一哈希值相同的预设哈希值确定为第一预设哈希值;最后,该共识节点将该哈希值空间中该第一预设哈希值对应的第一预设哈希位置确定为该存储单元对应的第一预设哈希位置,也就是说,该共识节点将该存储单元映射至该哈希值空间中的第一预设哈希位置上。
[0072] 可选的,共识节点根据共识节点对应存储单元的互联网协议地址,确定存储单元对应的第一哈希值,可以包括:共识节点利用第一公式,确定存储单元对应的第一哈希值。
[0073] 其中,第一公式为P(SU)=hash(IP)%*B;
[0074] P(SU)表示存储单元SU对应的第一哈希值;hash(·)表示哈希函数;IP表示存储单32
元的互联网协议地址;B表示哈希值空间中预设哈希位置的总数量(例如:B=2 )。
[0075] 需要说明的是,在P(SU)不为整数的情况下,共识节点可将该P(SU)在取模后进行取整,以得到存储单元SU对应的第一哈希值。
[0076] 在一些实施例中,共识节点确定待存储数据对应的第二预设哈希位置,可以包括:共识节点根据待存储数据对应的预设关键字,确定待存储数据对应的第二哈希值;该共识节点在多个预设哈希值中,确定与第二哈希值相同的第二预设哈希值;该共识节点将第二预设哈希值对应的预设哈希位置确定为待存储数据对应的第二预设哈希位置。
[0077] 其中,预设关键字指的是待存储数据中的特定字节/字符。
[0078] 可选的,预设关键字可以是共识节点出厂前设置的,也可以是用户自定义的,此处不作具体限定。
[0079] 共识节点可以先确定待存储数据对应的预设关键字,并基于该预设关键字,确定该待存储数据对应的第二哈希值;然后,该共识节点将哈希值空间中的预设哈希值逐一与该第二哈希值进行比较,确定出与该第二哈希值相同的预设哈希值,并将与该第二哈希值相同的预设哈希值确定为第二预设哈希值;最后,该共识节点将该哈希值空间中该第二预设哈希值对应的第二预设哈希位置确定为该待存储数据对应的第二预设哈希位置,也就是说,该共识节点将该待存储数据映射至该哈希值空间中的第二预设哈希位置上。
[0080] 可选的,共识节点根据待存储数据对应的预设关键字,确定待存储数据对应的第二哈希值,可以包括:共识节点利用第二公式,确定待存储数据对应的第二哈希值。
[0081] 其中,第二公式为P(K)=hash(key)%*B;
[0082] K表示待存储数据;P(K)表示待存储数据K对应的第二哈希值;key表示待存储数据K对应的预设关键字。
[0083] 需要说明的是,在P(K)不为整数的情况下,共识节点可将该P(K)在取模后进行取整,以得到待存储数据K对应的第一哈希值。
[0084] 203、在多个存储单元对应的第一预设哈希位置中,确定与第二预设哈希位置距离最近的第一预设哈希位置。
[0085] 共识节点在确定待传输数据对应的第二预设哈希位置及每个存储单元对应的第一预设哈希位置之后,可以确定每个第一预设哈希位置与该第二预设哈希位置之间的距离值,这样一来,该共识节点就能得到多个距离值;然后,该共识节点从这多个距离值中,确定最小距离值,并获取该最小距离值对应的第一预设哈希位置,也即,该共识节点可以确定与该第二预设哈希位置距离最近的第一预设哈希位置。
[0086] 可选的,共识节点在多个存储单元对应的第一预设哈希位置中,确定与第二预设哈希位置距离最近的第一预设哈希位置,可以包括:共识节点按照预设顺序,在多个存储单元对应的第一预设哈希位置中,确定与第二预设哈希位置距离最近的第一预设哈希位置。
[0087] 如果哈希值空间中的所有预设哈希值是按照顺时针顺序排列的,那么,共识节点在获取了多个存储单元对应的第一预设哈希位置之后,会基于该顺时针顺序,确定与第二预设哈希位置距离最近的第一预设哈希位置;如果哈希值空间中的所有预设哈希值是按照逆时针顺序排列的,那么,共识节点在获取了多个存储单元对应的第一预设哈希位置之后,会基于该逆时针顺序,确定与第二预设哈希位置距离最近的第一预设哈希位置。
[0088] 204、将待存储数据存储至距离最近的第一预设哈希位置对应的存储单元中。
[0089] 为了提高待传输数据的存储效率,共识节点可以将获取的待存储数据存储至距离最近的第一预设哈希位置对应的存储单元中。
[0090] 可选的,共识节点将待存储数据存储至距离最近的第一预设哈希位置对应的存储单元中,可以包括:共识节点确定待存储数据对应的块分配策略,并基于该分配策略,将待存储数据存储至距离最近的第一预设哈希位置对应的存储单元中的存储节点。
[0091] 共识节点将对应存储单元中的存储节点,可抽象为一个二维矩阵A;然后,该共识节点根据该二维矩阵A,确定每个存储节点的可靠性,也就是说,该共识节点可以将该二维矩阵A进行标准化,得到标准化后的二维矩阵B,然后,根据该标准化后的二维矩阵B及预设权重矩阵W,得到评价矩阵E;最后,该共识节点根据该评价矩阵E,将待存储数据存储至距离最近的第一预设哈希位置对应的存储单元中的存储节点。
[0092] 其中,二维矩阵 ;该二维矩阵A中的行节点表示存储节点的属性集,该二维矩阵A中的列节点标识表示共识节点需要考虑的属性,也即,该二维矩阵A包括n个属性和m个存储节点,n≥2,m≥2; 表示第m个存储节点的第n个属性;
[0093] 预设权重矩阵W=(w1,w2,…,wn),wn表示第n个权重值;
[0094] 评价矩阵E=B*WT。
[0095] 可选的,预设权重矩阵W中的各个权重值可以是相同的,也可以是不同的,此处不作具体限定。
[0096] 在一些实施例中,共识节点将待存储数据存储至距离最近的第一预设哈希位置对应的存储单元中,可以包括:共识节点根据存储数据,确定默克尔树Merkle‑tree数据、默克尔B+树(Merkle‑Btree,MB‑tree)数据及认证列表;该共识节点将Merkle‑tree数据、MB‑tree数据及认证列表,分别存储至距离最近的第一预设哈希位置对应的存储单元所包括的共识节点中。
[0097] 其中,聚合默克尔B+树(Aggregate Merkle B+ tree,AMB‑tree)数据可以包括:Merkle‑tree数据、MB‑tree数据及认证列表等。也就是说,该AMB‑tree数据可以包括由二叉Merkle‑tree数据构造的聚合层、由MB‑tree数据组成的索引层及由认证列表组成的数据层。
[0098] Merkle‑tree数据聚合了多棵不同的MB‑tree数据,用于指示存储单元对应的状态信息;MB‑tree数据用于指示存储单元对应的摘要信息;认证列表用于对存储单元的历史数据进行跟踪。
[0099] 需要说明的是,AMB‑tree数据的三层结构,最下面一层是相应存储单元负责存储待存储数据的各版本组成的认证列表,默认该认证列表的末尾也就是最新版本的待传输数据的哈希值作为第二层的MB‑tree数据的叶子节点。当存储单元在哈希值空间只有一个实际位置时,则第二层只有一个MB‑tree数据;当为了负载均衡,把一个存储单元在哈希值空间映射为n个预设哈希位置时(一个实际物理位置,n‑1个虚拟物理位置),则第二层有n个MB‑tree数据。然后,第二层的n个MB‑tree数据再聚合成最上层的Merkle‑tree。
[0100] 在共识节点根据存储数据,确定AMB‑tree数据之后,该共识节点可以将该AMB‑tree数据,存储至距离最近的第一预设哈希位置对应的存储单元所包括的共识节点中,这样可有效减少区块链节点在大数据时代的存储负担,以提高待传输数据的存储效率。
[0101] 可以理解的是,由于聚合层是一棵二叉Merkle‑tree数据,在该Merkle‑tree数据中每个叶节点都包含一个哈希指针,该哈希指针可在索引层指向MB‑tree数据的根节点ridx。当该MB‑tree数据发生变化时,共识节点将重新计算从叶节点到根节点ra的遍历过程中的所有节点,以获得存储单元对应的新摘要。
[0102] 如图3所示,是本发明提供的包含四个区域的聚合默克尔B+树AMB‑tree数据的示意图。该AMB‑tree数据包括由二叉Merkle‑tree数据构造的聚合层、由MB‑tree数据组成的索引层及由认证列表组成的数据层。在存储单元映射的Z0区域有数据更新时,共识节点需重新计算AMB‑tree数据中的第一层数据d0、第二层数据h01及根节点ra。
[0103] 其中,聚合层的数据完全保存在内存中,以加速数据访问;
[0104] 索引层的MB‑tree数据由普通的B+tree节点组成,这些B+tree节点通过与每个指针项关联的一个哈希指针进行扩展,该MB‑tree数据通过直接集成Merkletree数据,能够提供较优的输入/输出(Input/Output,I/O)性能,避免了该MB‑tree数据的二次放大,可选的,将MB‑tree数据的每个版本列表视为该MB‑tree数据的叶子。区块链系统在更新区块链节点状态时,可以向版本列表添加一个新版本,并重新散列从根节点到该版本列表对应的所有节点,以获得一个新的摘要;
[0105] 在数据层中,当认证列表对应的存储节点发生更新时,不需要对该存储节点进行复制,只需要将最新版本的待传输数据添加到该认证列表即可。
[0106] 在一些实施例中,在共识节点将待存储数据存储至距离最近的第一预设哈希位置对应的存储单元中之后,该方法还可以包括:共识节点利用非交互式零知识证明算法,确定存储单元中待存储数据中的加密数据;该共识节点将加密数据广播至其它存储单元中的共识节点,以使其它存储单元中的共识节点对加密数据进行验证。
[0107] 共识节可通过非交互式零知识证明(zero knowledge‑Succinct Non‑interactive Argument of Knowledge,zk‑SNARKs))算法,确定存储单元中待存储数据中的加密数据,该加密数据指的是加密过的部分非隐私信息和零知识证明;该共识节点将该加密数据广播至其它存储单元中的共识节点,以使其它存储单元中的共识节点对加密数据进行验证,以接受或拒绝用户在用户端设备中输入的交易请求操作。这样一来,不仅可以化简事务广播和验证步骤的重复计算量,同时,能够实现隐私数据的完全加密保护,还可以有效降低区块链节点的计算负担,进而有效保障了用户数据的隐私安全。
[0108] 可选的,加密数据中的交易金额、时间、地点等信息可隐藏。
[0109] 示例性的,如图4所示,是本发明提供的数据广播及验证的场景示意图,可以包括:利用Set up算法通过密钥生成器G采用秘密参数λ和以二次迭代分配程序算法(Quadratic Assignment Problem,QAP)形式表述的函数F,并生成证明密钥pk和验证密钥vk,这两个密钥都是公开的,表达式如下:(pk,vk)=G(λ,F);
[0110] 然后,证明者(Prover)将证明密钥pk、公共输入x、秘密的见证人w作为输入(简称:秘密输入w)及随机数,以生成证明者Prover知道见证人w的证明π,该见证人w使F(x,w)返回真,证明π的表达式如下:π=P(pk,x,w),其中,F(x,w)表示布尔函数;
[0111] 接着,验证者(Verifier)获取验证密钥vk、证明π和公共输入x,并且仅当证明π是在见证人 w 的知识下生成时才接受,表达式如式如下:V(vk,x,π)=(Ǝw,s.t.F(x,w)),可确定用户接受或拒绝用户在用户端设备中输入的交易请求操作。
[0112] 其中,证明者(Prover)及验证者(Verifier)可以是其它存储单元中的共识节点。
[0113] 在本发明实施例中,获取哈希值空间及待存储数据;在多个预设哈希位置中,确定共识节点对应存储单元的第一预设哈希位置,并确定待存储数据对应的第二预设哈希位置;在多个存储单元对应的第一预设哈希位置中,确定与第二预设哈希位置距离最近的第一预设哈希位置;将待存储数据存储至距离最近的第一预设哈希位置对应的存储单元中。该方法用以解决现有技术中区块链系统存储数据时存储效率较低的缺陷,实现优化区块链系统的结构的同时可降低存储单元的存储压力,从而有效提高数据的存储效率,以提高该区块链系统的整体性能。
[0114] 下面对本发明提供的数据存储装置进行描述,下文描述的数据存储装置与上文描述的数据存储方法可相互对应参照。
[0115] 如图5所示,是本发明提供的数据存储装置的结构示意图,该数据存储装置应用于区块链系统中多个共识节点中的任一共识节点,每个共识节点对应一个存储单元,该数据存储装置可以包括获取模块501及处理模块502;
[0116] 获取模块501,用于获取哈希值空间及待存储数据,该哈希值空间包括多个预设哈希位置,该多个预设哈希位置是将多个预设哈希值按照预设顺序进行排列得到的;
[0117] 处理模块502,用于在该多个预设哈希位置中,确定该共识节点对应存储单元的第一预设哈希位置,并确定该待存储数据对应的第二预设哈希位置,该第一预设哈希位置对应的第一预设哈希值与该存储单元对应的第一哈希值相同,该第二预设哈希位置对应的第二预设哈希值与该待存储数据对应的第二哈希值相同;在多个该存储单元对应的第一预设哈希位置中,确定与该第二预设哈希位置距离最近的第一预设哈希位置;将该待存储数据存储至该距离最近的第一预设哈希位置对应的存储单元中。
[0118] 可选的,该预设顺序为顺时针顺序或逆时针顺序;
[0119] 获取模块501,具体用于获取多个预设哈希值;
[0120] 处理模块502,具体用于将该多个预设哈希值按照预设顺序进行递增排列或递减排列,得到对应的预设哈希位置;根据多个该预设哈希位置,确定哈希值空间。
[0121] 可选的,处理模块502,具体用于根据该共识节点对应存储单元的互联网协议地址,确定该存储单元对应的第一哈希值;在该多个预设哈希值中,确定与该第一哈希值相同的第一预设哈希值;将该第一预设哈希值对应的预设哈希位置确定为该存储单元对应的第一预设哈希位置。
[0122] 可选的,处理模块502,具体用于根据该待存储数据对应的预设关键字,确定该待存储数据对应的第二哈希值;在该多个预设哈希值中,确定与该第二哈希值相同的第二预设哈希值;将该第二预设哈希值对应的预设哈希位置确定为该待存储数据对应的第二预设哈希位置。
[0123] 可选的,处理模块502,具体用于根据该存储数据,确定默克尔树Merkle‑tree数据、默克尔B+树MB‑tree数据及认证列表,该Merkle‑tree数据用于指示该存储单元对应的状态信息,该MB‑tree数据用于指示该存储单元对应的摘要信息,该认证列表用于对该存储单元的历史数据进行跟踪;将该Merkle‑tree数据、MB‑tree数据及认证列表,分别存储至该距离最近的第一预设哈希位置对应的存储单元所包括的共识节点中。
[0124] 可选的,该存储单元包括至少一个存储节点;
[0125] 处理模块502,具体用于响应用户的签名操作,该签名操作是该用户对该存储节点提供的交易请求对应的结果数据进行确认后得到的;
[0126] 获取模块501,具体用于根据该签名操作,确定该结果数据对应的待存储数据。
[0127] 可选的,上述数据存储装置还可以包括收发模块503;
[0128] 处理模块502,还用于利用非交互式零知识证明算法,确定该存储单元中该待存储数据中的加密数据;
[0129] 收发模块503,用于将该加密数据广播至其它存储单元中的共识节点,以使该其它存储单元中的共识节点对该加密数据进行验证。
[0130] 如图6所示,是本发明提供的电子设备的结构示意图,该共识节点可以包括:处理器(processor)610、通信接口(Communications Interface)620、存储器(memory)630和通信总线640,其中,处理器610,通信接口620,存储器630通过通信总线640完成相互间的通信。处理器610可以调用存储器630中的逻辑指令,以执行数据存储方法,该方法包括:获取哈希值空间及待存储数据,该哈希值空间包括多个预设哈希位置,该多个预设哈希位置是将多个预设哈希值按照预设顺序进行排列得到的;在该多个预设哈希位置中,确定该共识节点对应存储单元的第一预设哈希位置,并确定该待存储数据对应的第二预设哈希位置,该第一预设哈希位置对应的第一预设哈希值与该存储单元对应的第一哈希值相同,该第二预设哈希位置对应的第二预设哈希值与该待存储数据对应的第二哈希值相同;在多个该存储单元对应的第一预设哈希位置中,确定与该第二预设哈希位置距离最近的第一预设哈希位置;将该待存储数据存储至该距离最近的第一预设哈希位置对应的存储单元中。
[0131] 此外,上述的存储器630中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read‑Only Memory, ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
[0132] 另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行上述各方法所提供的数据存储方法,该方法包括:获取哈希值空间及待存储数据,该哈希值空间包括多个预设哈希位置,该多个预设哈希位置是将多个预设哈希值按照预设顺序进行排列得到的;在该多个预设哈希位置中,确定该共识节点对应存储单元的第一预设哈希位置,并确定该待存储数据对应的第二预设哈希位置,该第一预设哈希位置对应的第一预设哈希值与该存储单元对应的第一哈希值相同,该第二预设哈希位置对应的第二预设哈希值与该待存储数据对应的第二哈希值相同;在多个该存储单元对应的第一预设哈希位置中,确定与该第二预设哈希位置距离最近的第一预设哈希位置;将该待存储数据存储至该距离最近的第一预设哈希位置对应的存储单元中。
[0133] 又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的数据存储方法,该方法包括:获取哈希值空间及待存储数据,该哈希值空间包括多个预设哈希位置,该多个预设哈希位置是将多个预设哈希值按照预设顺序进行排列得到的;在该多个预设哈希位置中,确定该共识节点对应存储单元的第一预设哈希位置,并确定该待存储数据对应的第二预设哈希位置,该第一预设哈希位置对应的第一预设哈希值与该存储单元对应的第一哈希值相同,该第二预设哈希位置对应的第二预设哈希值与该待存储数据对应的第二哈希值相同;在多个该存储单元对应的第一预设哈希位置中,确定与该第二预设哈希位置距离最近的第一预设哈希位置;将该待存储数据存储至该距离最近的第一预设哈希位置对应的存储单元中。
[0134] 以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
[0135] 通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
[0136] 最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。