CN113127493A - 区块链状态数据的裁剪方法及装置、电子设备、存储介质 - Google Patents
区块链状态数据的裁剪方法及装置、电子设备、存储介质 Download PDFInfo
- Publication number
- CN113127493A CN113127493A CN202110668902.2A CN202110668902A CN113127493A CN 113127493 A CN113127493 A CN 113127493A CN 202110668902 A CN202110668902 A CN 202110668902A CN 113127493 A CN113127493 A CN 113127493A
- Authority
- CN
- China
- Prior art keywords
- height
- bloom filter
- state data
- root node
- filter data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2272—Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种区块链状态数据的裁剪方法及装置、电子设备、存储介质,其中,所述方法主要通过对待***的状态数据的key值进行布隆过滤器计算,得到状态数据对应的布隆过滤器数据,然后分别将各个高度下的根节点中保存的布隆过滤器数据与状态数据对应的布隆过滤器数据进行匹配,并在匹配成功时,从匹配成功的高度下的根节点下查找出存储有状态数据的key值的目标节点,然后将从该高度下的根节点至目标节点的路径上,除根节点外的所有节点裁减掉,最后对该高度下的根节点中保存的布隆过滤器数据中进行相应的更新。从而通过布隆过滤器实现对历史状态数据的裁剪,不需要增加索引节点,不仅减少了对磁盘空间的占用,而且还具有高效的裁剪效率。
Description
技术领域
本申请涉及区块链技术领域,特别涉及一种区块链状态数据的裁剪方法及装置、电子设备、存储介质。
背景技术
区块链通过默克尔树、默克尔平衡二叉树等状态树记录区块链上的状态数据,如账户余额等。由于账户余额等数据主要以最新数据为准,所以除区块回滚的需求外,历史状态数据是无用的。而随着区块的产生,历史状态数据会不断积累,状态树的节点数目不断增加,冗余的历史状态数据会占用较大磁盘存储空间。因此在确保状态数据完整的情况下,对历史状态数据的裁剪尤为重要。
现有的区块链历史数据裁剪方式,主要是通过引入额外的节点,即引入索引节点,通过索引节点记录历史状态数据的历史版本key值,后续则可以通过索引节点进行索引并裁剪。
这种方式虽然可以有效地删除历史状态数据,但是由于索引节点的存在,随着区块越来越多,索引节点也会越来越多,这不仅导致索引时间过长,影响到裁剪速度,并且大量的索引节点也会占用大量的磁盘资源。
发明内容
基于上述现有技术的不足,本申请提供了一种区块链状态数据的裁剪方法及装置、电子设备、存储介质,以解决现有的方式裁剪效率低,且占用磁盘资源的问题。
为了实现上述目的,本申请提供了以下技术方案:
本申请第一方面提供了一种区块链状态数据的裁剪方法,包括:
获取待***当前高度下的状态树的状态数据的key值;
对所述状态数据的key值进行布隆过滤器计算,得到所述状态数据对应的布隆过滤器数据;
分别将各个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据进行匹配;其中,一个高度下的根节点保存的布隆过滤器数据,为对所述高度下***的各个状态数据的key计算得到;
每确定出一个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器匹配时,则从所述高度下的根节点下查找出存储有所述状态数据的key值的目标节点;
将从所述高度下的根节点至所述目标节点的路径上,除所述高度下的根节点外的所有节点裁减掉;
对所述高度下的根节点中保存的布隆过滤器数据中,与所述状态数据对应的布隆过滤器数据相一致的各个比特位进行更新。
可选地,在上述的方法中,所述分别将各个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据进行匹配,包括:
按照高度从高到低的顺序,依次将高度范围内的各个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据进行匹配。
可选地,在上述的方法中,所述按照高度从高到低的顺序,依次将高度范围内的各个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据进行匹配,包括:
按照高度从高到低的顺序,依次将第一高度范围内的各个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据进行匹配;其中,所述第一高度范围的上限为所述当前高度与预设回退高度的差值,下限为所述当前高度与3倍的所述预设回退高度的差值;
若所述第一高度范围内的各个高度均满足第一条件,则判断在第一高度范围内是否裁剪过存储有所述状态数据的key值的目标节点;其中,所述第一条件指代一个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据未匹配,或从所述高度下的根节点下未查找出存储有所述状态数据的key值的目标节点;
若判断出在第一高度范围内未裁剪过存储有所述状态数据的key值的目标节点,则按照高度从高到低的顺序,依次将第二高度范围内的各个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据进行匹配;其中,所述第二高度范围的上限的为所述当前高度与N倍的所述预设回退高度的差值,下限为零;N的取值范围为0至3。
可选地,在上述的方法中,所述对所述高度下的根节点中保存的布隆过滤器数据中,与所述状态数据对应的布隆过滤器数据相一致的各个比特位进行更新之后,还包括:
若是首次针对所述第二高度范围中的高度的根节点中保存的布隆过滤器数据中,与所述状态数据对应的布隆过滤器数据相一致的各个比特位进行更新,则将所述第二高度范围的上限更新为所述高度,将下限更新为所述高度与所述预设回退高度的差值;
针对更新后的所述第二高度范围,返回执行所述按照高度从高到低的顺序,依次将第二高度范围内的各个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据进行匹配。
本申请第二方面提供了一种区块链状态数据的裁剪装置,包括:
获取单元,用于获取待***当前高度下的状态树的状态数据的key值;
计算单元,用于对所述状态数据的key值进行布隆过滤器计算,得到所述状态数据对应的布隆过滤器数据;
匹配单元,用于分别将各个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据进行匹配;其中,一个高度下的根节点保存的布隆过滤器数据,为对所述高度下***的各个状态数据的key计算得到;
查找单元,用于每确定出一个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器匹配时,则从所述高度下的根节点下查找出存储有所述状态数据的key值的目标节点;
裁剪单元,用于将从所述高度下的根节点至所述目标节点的路径上,除所述高度下的根节点外的所有节点裁减掉;
更新单元,用于对所述高度下的根节点中保存的布隆过滤器数据中,与所述状态数据对应的布隆过滤器数据相一致的各个比特位进行更新。
可选地,在上述的装置中,所述匹配单元,包括:
匹配子单元,用于按照高度从高到低的顺序,依次将高度范围内的各个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据进行匹配。
可选地,在上述的装置中,所述匹配子单元,包括:
第一匹配子单元,用于按照高度从高到低的顺序,依次将第一高度范围内的各个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据进行匹配;其中,所述第一高度范围的上限为所述当前高度与预设回退高度的差值,下限为所述当前高度与3倍的所述预设回退高度的差值;
判断单元,用于在所述第一高度范围内的各个高度均满足第一条件时,判断在第一高度范围内是否裁剪过存储有所述状态数据的key值的目标节点;其中,所述第一条件指代一个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据未匹配,或从所述高度下的根节点下未查找出存储有所述状态数据的key值的目标节点;
第二匹配子单元,用于在所述判断单元判断出在第一高度范围内未裁剪过存储有所述状态数据的key值的目标节点时,按照高度从高到低的顺序,依次将第二高度范围内的各个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据进行匹配;其中,所述第二高度范围的上限的为所述当前高度与N倍的所述预设回退高度的差值,下限为零;N的取值范围为0至3。
可选地,在上述的装置中,还包括:
范围更新单元,用于在首次针对所述第二高度范围中的高度的根节点中保存的布隆过滤器数据中,与所述状态数据对应的布隆过滤器数据相一致的各个比特位进行更新后,将所述第二高度范围的上限更新为所述高度,将下限更新为所述高度与所述预设回退高度的差值;
返回单元,用于针对更新后的所述第二高度范围,返回所述第二匹配子单元执行所述按照高度从高到低的顺序,依次将第二高度范围内的各个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据进行匹配。
本申请第三方面提供了一种电子设备,包括:
存储器和处理器;
其中,所述存储器用于存储程序;
所述处理器用于执行所述程序,所述程序被执行时,具体用于实现如上述任意一项所述的区块链状态数据的裁剪方法。
本申请第四方面提供了一种计算机存储介质,用于存储计算机程序,所述计算机程序被执行时,用于实现如上述任意一项所述的区块链状态数据的裁剪方法。
本申请提供的一种区块链的状态数据的裁剪方法,在每次***状态数据时通过布隆过滤器对状态数据的key值进行计算,记录下每个高度的状态数据的布隆过滤器,实现对叶子节点的记录。所以在***状态数据时,通过获取待***当前高度下的状态树的状态数据的key值,并对状态数据的key值进行布隆过滤器计算,得到状态数据对应的布隆过滤器数据,然后分别将各个高度下的根节点中保存的布隆过滤器数据与状态数据对应的布隆过滤器数据进行匹配。在每确定出一个高度下的根节点中保存的布隆过滤器数据与状态数据对应的布隆过滤器匹配时,则从高度下的根节点下查找出存储有状态数据的key值的目标节,进而将从高度下的根节点至所述目标节点的路径上,除高度下的根节点外的所有节点裁减掉,并且最后对高度下的根节点中保存的布隆过滤器数据中,与状态数据对应的布隆过滤器数据相一致的各个比特位进行更新。从而实现了一种有效对历史状态数据的裁剪方法,不需要增加索引节点,进而不仅可以极大的减少对磁盘空间的占用,而且可以有效地保证裁剪的效率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例提供的一种区块链状态数据的裁剪方法的流程图;
图2为本申请实施例提供的***状态数据时生成布隆过滤器数据的方法的流程图;
图3为本申请另一实施例提供的另一种区块链状态数据的裁剪方法的流程图;
图4为本申请另一实施例提供的一种区块链状态数据的裁剪装置的结构示意图;
图5为本申请另一实施例提供的一种匹配子单元的结构示意图;
图6为本申请另一实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在本申请中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本申请实施例提供了一种区块链状态数据的裁剪方法,如图1所示,具体包括以下步骤:
S101、获取待***当前高度下的状态树的状态数据的key值。
需要说明的是,需要***当前高度的状态数据的状态数据可以包括一个或多个。当此需要***当前高度的状态数据的状态数据包括多个时,此时可以依次分别针对每个状态数据独立地执行本申请实施例提供的方法,即执行步骤S101~步骤S106。所以,步骤S101也可以理解为:从获取的待***当前高度下的状态树的所有的状态数据的key值中,选取其中一个未被选取过的状态数据的key值。并且在针对一个状态数据,执行完最后步骤后,返回执行步骤S101,直至针对每个状态数据均已执行本申请实施例提供的方法。
S102、对状态数据的key值进行布隆过滤器计算,得到状态数据对应的布隆过滤器数据。
需要说明的是,布隆过滤器(Bloom Filter)实际上是一个很长的二进制向量和一系列随机映射函数,一般为哈希函数。具体分别通过各个随机映射函数对key值进行计算,得到相应的散列值,然后再将二进制向量中散列值对应的比特位置为1。所以,本申请实施例中的布隆过滤器数据即为计算得到的二进制向量,即为一个二进制的数组。
由于布隆过滤器数据的特点,所以若要判断某个key值是否在集合时,可以对该key值进行计算,即利用各个哈希函数对key值进行计算,得到相应的布隆过滤器数据,并与先前存储的布隆过滤器数据进行匹配,从而确定出是否存在该key值。
S103、分别将各个高度下的根节点中保存的布隆过滤器数据与状态数据对应的布隆过滤器数据进行匹配。
其中,一个高度下的根节点保存的布隆过滤器数据,为对该高度下***的各个状态数据的key计算得到。具体的,如图2所示,提供了一种***状态数据时,生成该高度下的布隆过滤器数据的方法,包括以下步骤:
S201、获取该高度下所要***的各个状态数据的key值。
S202、分别对各个状态数据的key值做布隆过滤器计算,得到布隆过滤器数据,并记录下布隆过滤器数据的每个比特位的计数。
S203、将生成的布隆过滤器数据以及每个比特位的计数,保存到该高度下的根节点中。
其中,匹配的过程与现有的确定是否存储一个key值的方式是相一致的,所以若一个高度下的根节点保存的布隆过滤器数据,与状态数据对应的布隆过滤器数据中所对应的各个比特位均不为零,则该高度下的根节点中保存的布隆过滤器数据与状态数据对应的布隆过滤器数据进行匹配。
可选地,步骤S103可以是对所有的高度进行查询,即将从零到当前高度的各个高度下的根节点中保存的布隆过滤器数据与状态数据对应的布隆过滤器数据进行匹配。但是,对于更新时间相对较近的节点,在进行回滚时需要用到,所以需要保留,而对于更新时间相对较久的节点,在先前加入数据时,通常都已经被裁剪掉了,所以不需要对所有的高度进行查询。因此,在本申请另一实施例中,步骤S103具体可以为:按照高度从高到低的顺序,依次将高度范围内的各个高度下的根节点中保存的布隆过滤器数据与状态数据对应的布隆过滤器数据进行匹配。
从而仅针对设定的高度范围内的各个高度进行匹配,并向按照高度从高到低的顺序进行匹配,以能进行有序的匹配。
S104、每确定出一个高度下的根节点中保存的布隆过滤器数据与状态数据对应的布隆过滤器匹配时,则从该高度下的根节点下查找出存储有状态数据的key值的目标节点。
其中,若从该高度下的根节点下查找出存储有状态数据的key值的目标节点,则执行步骤S105。
S105、将从该高度下的根节点至目标节点的路径上,除该高度下的根节点外的所有节点裁减掉。
也就是将存储有状态数据的key值的目标节点,以及根节点至目标节点的路径上的哈希节点裁剪掉。
S106、对该高度下的根节点中保存的布隆过滤器数据中,与状态数据对应的布隆过滤器数据相一致的各个比特位进行更新。
由于,该高度下的根节点中保存的布隆过滤器数据,是根据在该高度下***的各个状态数据的key值计算得到的,所以在裁剪掉一个key值对应的节点后,需要对该高度下的根节点中保存的布隆过滤器数据进行更新。具体将该高度下的根节点所保存的布隆过滤器数据中,与状态数据对应的布隆过滤器数据相一致的各个比特位的数值减1。但需要说明的是,若是其中某一位比特位的计数等于0,则在更新时将该比特位进行置位。
本申请实施例提供的一种区块链的状态数据的裁剪方法,在每次***状态数据时通过布隆过滤器对状态数据的key值进行计算,记录下每个高度的状态数据的布隆过滤器,实现对叶子节点的记录。所以,在***状态数据时,通过获取待***当前高度下的状态树的状态数据的key值,并对状态数据的key值进行布隆过滤器计算,得到状态数据对应的布隆过滤器数据,然后分别将各个高度下的根节点中保存的布隆过滤器数据与状态数据对应的布隆过滤器数据进行匹配。每确定出一个高度下的根节点中保存的布隆过滤器数据与状态数据对应的布隆过滤器匹配时,则从该高度下的根节点下查找出存储有状态数据的key值的目标节点,进而将从高度下的根节点至所述目标节点的路径上,除该高度下的根节点外的所有节点裁减掉,并且对该高度下的根节点中所保存的布隆过滤器数据中的多个比特位进行更新。其中,更新的比特位为,与状态数据对应的布隆过滤器数据相一致的各个比特位。从而实现了一种有效对历史状态数据的裁剪方法,不需要增加索引节点,进而不仅可以极大的减少对磁盘空间的占用,而且可以有效地保证裁剪的效率。
本申请另一实施例提供了另一种区块链状态数据的裁剪方法,如图3所示,具体包括以下步骤:
S301、获取待***当前高度下的状态树的状态数据的key值。
需要说明的是,步骤S301的具体实施过程可相应的参考上述方法实施例中的步骤S101,此处不再赘述。
S302、对状态数据的key值进行布隆过滤器计算,得到状态数据对应的布隆过滤器数据。
需要说明的是,步骤S302的具体实施过程可相应的参考上述方法实施例中的步骤S102,此处不再赘述。
S303、按照高度从高到低的顺序,依次将第一高度范围内的各个高度下的根节点中保存的布隆过滤器数据与状态数据对应的布隆过滤器数据进行匹配。
其中,第一高度范围的上限为当前高度与预设回退高度的差值,下限为当前高度与3倍的预设回退高度的差值。需要说明的是,预设回退高度内的数据是需要保留的,所以不需要进行裁剪,所以若当前高度与预设回退高度的差值不大于0,则说明不需要进行裁剪,即不需要执行步骤S303以及后续的步骤。而比当前高度与3倍的预设回退高度的差值还小的高度,在先前通常已经被裁剪过,所以本申请实施例中,先对第一高度范围进行查询,从而可以提高裁剪的效率。
需要说明的是,在执行步骤S303的过程中,每确定出一个高度下的根节点中保存的布隆过滤器数据与状态数据对应的布隆过滤器匹配时,则针对该高度执行步骤S307。
具体的,可以是将第一高度范围的上限设置为目标高度,然后针对目标高度,将目标高度下的根节点中保存的布隆过滤器数据与状态数据对应的布隆过滤器数据进行匹配。若匹配成功,则针对目标高度执行步骤S306。若执行步骤S306未查找到存储有状态数据的key值的目标节点,或在执行步骤S308后,将目标高度减1,即下一个高度作为目标高度。然后,判断目标高度是否小于第一高度范围的下限,若判断出小于则,执行步骤S304,若判断出不小于,则针对减1后的目标高度返回执行目标高度下的根节点中保存的布隆过滤器数据与状态数据对应的布隆过滤器数据进行匹配。
S304、判断第一高度范围内的各个高度是否均满足第一条件。
其中,第一条件指代一个高度下的根节点中保存的布隆过滤器数据与状态数据对应的布隆过滤器数据未匹配,或从高度下的根节点下未查找出存储有所述状态数据的key值的目标节点。
若判断出第一高度范围内的各个高度均满足第一条件,则执行步骤S305。
需要说明的是,由于在第一高度范围内未查询到需要采集的节点,所以为了避免需要裁减状态数据的未被裁减,此时执行步骤S305。
S305、判断在第一高度范围内是否裁剪过存储有状态数据的key值的目标节点。
其中,若判断出在第一高度范围内已裁剪过存储有状态数据的key值的目标节点,说明是未查询到需要裁减的目标节点是因为先前已裁减过,所以此时可以结束针对当前的状态数据的key的裁剪。若判断出在第一高度范围内未裁剪过存储有状态数据的key值的目标节点,为了保证存储有状态数据的key值的目标节点以及相应的节点被裁剪,所以本申请实施例中将在另一高度范围进行查询,即此时执行步骤S306。
S306、按照高度从高到低的顺序,依次将第二高度范围内的各个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据进行匹配。
其中,第二高度范围的上限的为当前高度与N倍的预设回退高度的差值,下限为零。N的取值范围为0至3。通常N取3,这样第二高度范围刚好和第一高度范围衔接,刚好能保证处理到每个高度。当然若是取小于3的数,即会对线切处理过的高度,进行再次处理,而再次处理可以有效保证结果的准确性。
需要说明的是,在执行步骤S306的过程中,每确定出一个高度下的根节点中保存的布隆过滤器数据与状态数据对应的布隆过滤器匹配时,同样执行步骤S306。
S307、每确定出一个高度下的根节点中保存的布隆过滤器数据与状态数据对应的布隆过滤器匹配时,从该高度下的根节点下查找出存储有状态数据的key值的目标节点。
需要说明的是,若从该高度下的根节点下查找出存储有状态数据的key值的目标节点,则执行步骤S308。若从该高度下的根节点下未查找出存储有状态数据的key值的目标节点,则返回将下一个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据进行匹配。
S308、将从该高度下的根节点至目标节点的路径上,除该高度下的根节点外的所有节点裁减掉。
需要说明的是,在执行步骤S308后,执行步骤S309。具体的,步骤S308的具体实施方式可相应地参考上述方法实施例中的步骤S105,此处不再赘述。
S309、对该高度下的根节点中保存的布隆过滤器数据中,与该状态数据对应的布隆过滤器数据相一致的各个比特位进行更新。
可选地,在本申请另一实施例中,若是首次针对第二高度范围中的高度执行到步骤S309,则在执行步骤S309之后,还可以进一步执行步骤S310。具体的,可以在执行步骤S309后进一步,判断是否是首次针对第二高度范围中的高度执行对高度下的根节点中保存的布隆过滤器数据中,即判断是否是首次在该第二高度范围内中查询到存储有状态数据的key值的目标节点。若判断为是则执行步骤S310。
S310、若是首次针对第二高度范围中的高度的根节点中保存的布隆过滤器数据中,与状态数据对应的布隆过滤器数据相一致的各个比特位进行更新,则将第二高度范围的上限更新为该高度,将下限更新为该高度与预设回退高度的差值。
需要说明的是,由于对于第二高度范围是从高到低进行查询的,所以对于当前查询到的该高度前的高度都已经进行过查询,所以第二高度范围的上限可以更新为该高度。而在该高度时查询到目标节点,则该高度与预设回退高度的差值往下的高度,若存在存储有状态数据的key值的目标节点,那在先前裁剪过程中,必然已被裁剪掉,所以不需要再对这个范围的高度进行查询,所以将第二高度范围的下限更新为该高度与预设回退高度的差值。
还需要说明的是,在执行步骤S310之后,针对更新后的第二高度范围,返回执行步骤S306。
本申请另一实施例提供了一种区块链状态数据的裁剪装置,如图4所示,包括以下单元:
获取单元401,用于获取待***当前高度下的状态树的状态数据的key值。
计算单元402,用于对所述状态数据的key值进行布隆过滤器计算,得到所述状态数据对应的布隆过滤器数据。
匹配单元403,用于分别将各个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据进行匹配。
其中,一个高度下的根节点保存的布隆过滤器数据,为对所述高度下***的各个状态数据的key计算得到。
查找单元404,用于每确定出一个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器匹配时,则从所述高度下的根节点下查找出存储有所述状态数据的key值的目标节点。
裁剪单元405,用于将从所述高度下的根节点至所述目标节点的路径上,除所述高度下的根节点外的所有节点裁减掉。
更新单元406,用于对所述高度下的根节点中保存的布隆过滤器数据中,与所述状态数据对应的布隆过滤器数据相一致的各个比特位进行更新。
可选地,本申请另一实施例提供的区块链状态数据的裁剪装置中的匹配单元,包括:
匹配子单元,用于按照高度从高到低的顺序,依次将高度范围内的各个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据进行匹配。
可选地,本申请另一实施例提供的区块链状态数据的裁剪装置中的匹配子单元,如图5所示,包括以下单元:
第一匹配子单元501,用于按照高度从高到低的顺序,依次将第一高度范围内的各个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据进行匹配。
其中,所述第一高度范围的上限为所述当前高度与预设回退高度的差值,下限为所述当前高度与3倍的所述预设回退高度的差值。
判断单元502,用于在所述第一高度范围内的各个高度均满足第一条件时,判断在第一高度范围内是否裁剪过存储有所述状态数据的key值的目标节点。
其中,所述第一条件指代一个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据未匹配,或从所述高度下的根节点下未查找出存储有所述状态数据的key值的目标节点。
第二匹配子单元503,用于在所述判断单元判断出在第一高度范围内未裁剪过存储有所述状态数据的key值的目标节点时,按照高度从高到低的顺序,依次将第二高度范围内的各个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据进行匹配。
其中,所述第二高度范围的上限的为所述当前高度与N倍的所述预设回退高度的差值,下限为零。N的取值范围为0至3。
可选地,在本申请另一实施例提供的区块链状态数据的裁剪装置中,还可以进一步包括以下单元:
范围更新单元,用于在首次针对所述第二高度范围中的高度的根节点中保存的布隆过滤器数据中,与所述状态数据对应的布隆过滤器数据相一致的各个比特位进行更新后,将所述第二高度范围的上限更新为所述高度,将下限更新为所述高度与所述预设回退高度的差值。
返回单元,用于针对更新后的所述第二高度范围,返回所述第二匹配子单元执行所述按照高度从高到低的顺序,依次将第二高度范围内的各个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据进行匹配。
本申请另一实施例提供了一种电子设备,如图6所示,包括:
存储器601和处理器602。
其中,存储器601用于存储程序,处理器602用于执行存储器601存储的程序,并且该程序被执行时,具体用于实现如上述任意一个实施例提供的区块链状态数据的裁剪方法。
本申请另一实施例提供了一种计算机存储介质,用于存储计算机程序,该计算机程序被执行时,用于实现如上述任意一个实施例提供的区块链状态数据的裁剪方法。
计算机存储介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机存储介质的例子包括,但不限于相变内存 (PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种区块链状态数据的裁剪方法,其特征在于,包括:
获取待***当前高度下的状态树的状态数据的key值;
对所述状态数据的key值进行布隆过滤器计算,得到所述状态数据对应的布隆过滤器数据;
分别将各个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据进行匹配;其中,一个高度下的根节点保存的布隆过滤器数据,为对所述高度下***的各个状态数据的key计算得到;
每确定出一个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器匹配时,则从所述高度下的根节点下查找出存储有所述状态数据的key值的目标节点;
将从所述高度下的根节点至所述目标节点的路径上,除所述高度下的根节点外的所有节点裁减掉;
对所述高度下的根节点中保存的布隆过滤器数据中,与所述状态数据对应的布隆过滤器数据相一致的各个比特位进行更新。
2.根据权利要求1所述的方法,其特征在于,所述分别将各个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据进行匹配,包括:
按照高度从高到低的顺序,依次将高度范围内的各个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据进行匹配。
3.根据权利要求2所述的方法,其特征在于,所述按照高度从高到低的顺序,依次将高度范围内的各个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据进行匹配,包括:
按照高度从高到低的顺序,依次将第一高度范围内的各个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据进行匹配;其中,所述第一高度范围的上限为所述当前高度与预设回退高度的差值,下限为所述当前高度与3倍的所述预设回退高度的差值;
若所述第一高度范围内的各个高度均满足第一条件,则判断在第一高度范围内是否裁剪过存储有所述状态数据的key值的目标节点;其中,所述第一条件指代一个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据未匹配,或从所述高度下的根节点下未查找出存储有所述状态数据的key值的目标节点;
若判断出在第一高度范围内未裁剪过存储有所述状态数据的key值的目标节点,则按照高度从高到低的顺序,依次将第二高度范围内的各个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据进行匹配;其中,所述第二高度范围的上限的为所述当前高度与N倍的所述预设回退高度的差值,下限为零;N的取值范围为0至3。
4.根据权利要求3所述的方法,其特征在于,所述对所述高度下的根节点中保存的布隆过滤器数据中,与所述状态数据对应的布隆过滤器数据相一致的各个比特位进行更新之后,还包括:
若是首次针对所述第二高度范围中的高度的根节点中保存的布隆过滤器数据中,与所述状态数据对应的布隆过滤器数据相一致的各个比特位进行更新,则将所述第二高度范围的上限更新为所述高度,将下限更新为所述高度与所述预设回退高度的差值;
针对更新后的所述第二高度范围,返回执行所述按照高度从高到低的顺序,依次将第二高度范围内的各个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据进行匹配。
5.一种区块链状态数据的裁剪装置,其特征在于,包括:
获取单元,用于获取待***当前高度下的状态树的状态数据的key值;
计算单元,用于对所述状态数据的key值进行布隆过滤器计算,得到所述状态数据对应的布隆过滤器数据;
匹配单元,用于分别将各个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据进行匹配;其中,一个高度下的根节点保存的布隆过滤器数据,为对所述高度下***的各个状态数据的key计算得到;
查找单元,用于每确定出一个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器匹配时,则从所述高度下的根节点下查找出存储有所述状态数据的key值的目标节点;
裁剪单元,用于将从所述高度下的根节点至所述目标节点的路径上,除所述高度下的根节点外的所有节点裁减掉;
更新单元,用于对所述高度下的根节点中保存的布隆过滤器数据中,与所述状态数据对应的布隆过滤器数据相一致的各个比特位进行更新。
6.根据权利要求5所述的装置,其特征在于,所述匹配单元,包括:
匹配子单元,用于按照高度从高到低的顺序,依次将高度范围内的各个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据进行匹配。
7.根据权利要求6所述的装置,其特征在于,所述匹配子单元,包括:
第一匹配子单元,用于按照高度从高到低的顺序,依次将第一高度范围内的各个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据进行匹配;其中,所述第一高度范围的上限为所述当前高度与预设回退高度的差值,下限为所述当前高度与3倍的所述预设回退高度的差值;
判断单元,用于在所述第一高度范围内的各个高度均满足第一条件时,判断在第一高度范围内是否裁剪过存储有所述状态数据的key值的目标节点;其中,所述第一条件指代一个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据未匹配,或从所述高度下的根节点下未查找出存储有所述状态数据的key值的目标节点;
第二匹配子单元,用于在所述判断单元判断出在第一高度范围内未裁剪过存储有所述状态数据的key值的目标节点时,按照高度从高到低的顺序,依次将第二高度范围内的各个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据进行匹配;其中,所述第二高度范围的上限的为所述当前高度与N倍的所述预设回退高度的差值,下限为零;N的取值范围为0至3。
8.根据权利要求7所述的装置,其特征在于,还包括:
范围更新单元,用于在首次针对所述第二高度范围中的高度的根节点中保存的布隆过滤器数据中,与所述状态数据对应的布隆过滤器数据相一致的各个比特位进行更新后,将所述第二高度范围的上限更新为所述高度,将下限更新为所述高度与所述预设回退高度的差值;
返回单元,用于针对更新后的所述第二高度范围,返回所述第二匹配子单元执行所述按照高度从高到低的顺序,依次将第二高度范围内的各个高度下的根节点中保存的布隆过滤器数据与所述状态数据对应的布隆过滤器数据进行匹配。
9.一种电子设备,其特征在于,包括:
存储器和处理器;
其中,所述存储器用于存储程序;
所述处理器用于执行所述程序,所述程序被执行时,具体用于实现如权利要求1至4任意一项所述的区块链状态数据的裁剪方法。
10.一种计算机存储介质,其特征在于,用于存储计算机程序,所述计算机程序被执行时,用于实现如权利要求1至4任意一项所述的区块链状态数据的裁剪方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110668902.2A CN113127493B (zh) | 2021-06-16 | 2021-06-16 | 区块链状态数据的裁剪方法及装置、电子设备、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110668902.2A CN113127493B (zh) | 2021-06-16 | 2021-06-16 | 区块链状态数据的裁剪方法及装置、电子设备、存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113127493A true CN113127493A (zh) | 2021-07-16 |
CN113127493B CN113127493B (zh) | 2021-09-10 |
Family
ID=76782998
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110668902.2A Active CN113127493B (zh) | 2021-06-16 | 2021-06-16 | 区块链状态数据的裁剪方法及装置、电子设备、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113127493B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106899412A (zh) * | 2017-03-30 | 2017-06-27 | 北京链银博科技有限责任公司 | 一种区块链隐私保护方法、装置及*** |
US20180089243A1 (en) * | 2016-09-26 | 2018-03-29 | International Business Machines Corporation | Bloom filter index for device discovery |
CN109684333A (zh) * | 2018-12-24 | 2019-04-26 | 杭州复杂美科技有限公司 | 一种数据存储及裁剪方法、设备和存储介质 |
CN110442577A (zh) * | 2019-07-15 | 2019-11-12 | 杭州复杂美科技有限公司 | 一种状态数据存储、查询和管理方法、设备及存储介质 |
CN110442579A (zh) * | 2019-08-02 | 2019-11-12 | 杭州复杂美科技有限公司 | 一种状态树数据存储方法、同步方法及设备和存储介质 |
-
2021
- 2021-06-16 CN CN202110668902.2A patent/CN113127493B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180089243A1 (en) * | 2016-09-26 | 2018-03-29 | International Business Machines Corporation | Bloom filter index for device discovery |
CN106899412A (zh) * | 2017-03-30 | 2017-06-27 | 北京链银博科技有限责任公司 | 一种区块链隐私保护方法、装置及*** |
CN109684333A (zh) * | 2018-12-24 | 2019-04-26 | 杭州复杂美科技有限公司 | 一种数据存储及裁剪方法、设备和存储介质 |
CN110442577A (zh) * | 2019-07-15 | 2019-11-12 | 杭州复杂美科技有限公司 | 一种状态数据存储、查询和管理方法、设备及存储介质 |
CN110442579A (zh) * | 2019-08-02 | 2019-11-12 | 杭州复杂美科技有限公司 | 一种状态树数据存储方法、同步方法及设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113127493B (zh) | 2021-09-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106897103B (zh) | 一种移动端网络游戏版本快速热更新的方法 | |
CN110659257B (zh) | 一种元数据对象修复方法、装置、设备及可读存储介质 | |
CN111737265A (zh) | 区块数据访问方法、区块数据存储方法及装置 | |
WO2018006721A1 (zh) | 日志文件的存储方法及装置 | |
CN109033365B (zh) | 一种数据处理方法及相关设备 | |
CN112988761B (zh) | 区块链数据存储方法及装置、电子设备 | |
CN111638995A (zh) | 元数据备份方法、装置及设备、存储介质 | |
CN109189343B (zh) | 一种元数据落盘方法、装置、设备及计算机可读存储介质 | |
CN113127493B (zh) | 区块链状态数据的裁剪方法及装置、电子设备、存储介质 | |
CN110704573B (zh) | 目录存储方法、装置、计算机设备及存储介质 | |
CN109992708B (zh) | 一种元数据查询的方法、装置、设备以及存储介质 | |
CN111597407A (zh) | 一种基于tcam的关键字匹配方法、装置、设备及存储介质 | |
CN107315806B (zh) | 一种基于文件***的嵌入式存储方法和装置 | |
CN114268501B (zh) | 数据处理方法、防火墙生成方法、计算设备及存储介质 | |
CN115129590A (zh) | 一种测试用例的生成方法及装置、电子设备、存储介质 | |
CN114818458A (zh) | ***参数优化方法、装置、计算设备及介质 | |
CN110008269B (zh) | 一种数据回流方法、装置、设备及*** | |
CN110489355B (zh) | 逻辑bram的映射方法及其*** | |
CN110335131B (zh) | 基于树的相似度匹配的金融风险控制方法及装置 | |
CN111767522A (zh) | 一种递归算法实现方法、装置及电子设备 | |
CN116610662B (zh) | 缺失分类数据的填充方法、装置、计算机设备及介质 | |
CN111752909A (zh) | 一种多版本文件的操作方法、***及装置 | |
CN111651466A (zh) | 数据采样方法及装置 | |
CN116800637B (zh) | 数据流中数据项基数的估算方法及相关设备 | |
CN109992701B (zh) | 一种链表实现方法、装置、设备及可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |