区块链数据存储方法及装置、电子设备制造方法及图纸

技术编号:28941965 阅读:21 留言:0更新日期:2021-06-18 21:48
一种区块链数据存储方法及装置、电子设备,方法包括:获取待存储的区块链数据的key‑value键值对;将待存储的区块链数据的key‑value键值对转换成逻辑的树形结构上的根节点、中间节点和叶子节点;根节点、中间节点包括多个用于存放区块链数据的key中的字符的位置,每个位置中包括多个用于存放区块链数据的key中的字符的槽位;槽位用于存储与该节点链接的下一层节点的hash值;对根节点、中间节点和叶子节点进行编码处理,并将编码处理后的根节点、中间节点和叶子节点的key‑value键值对存储在数据库中;编码处理包括针对所述根节点、中间节点进行bitmap编码处理。

【技术实现步骤摘要】
区块链数据存储方法及装置、电子设备
本说明书一个或多个实施例涉及区块链
,尤其涉及一种区块链数据存储方法及装置、电子设备。
技术介绍
区块链技术,也被称之为分布式账本技术,是一种由若干台节点设备共同参与“记账”,共同存储和维护一份完整的分布式数据库的新兴技术。对于区块链的节点设备来说,需要存储和维护的区块链数据,通常包括区块数据、区块链中的区块链账户对应的账户状态数据;而区块数据又可以进一步包括区块头数据、区块中的区块交易数据、以及与区块中的区块交易数据对应的交易收据,等等。区块链的节点设备在存储以上示出的各种区块链数据时,通常可以将上述各种区块链数据以key-value键值对的形式,组织成Merkle树在数据库中存储。当需要查询节点设备存储的上述各种区块链数据时,可以通过将上述各种区块链数据的key作为查询索引,遍历上述Merkle树来高效的查询数据。
技术实现思路
提出一种区块链数据存储方法,所述方法包括:获取待存储的区块链数据的key-value键值对;将所述待存储的区块链数据的key-value键值对转换成逻辑的树形结构上的根节点、中间节点和叶子节点;所述根节点、中间节点包括多个用于存放所述区块链数据的key中的字符的位置,每个位置中包括多个用于存放所述区块链数据的key中的字符的槽位;所述槽位用于存储与该节点链接的下一层节点的hash值;对所述根节点、中间节点和叶子节点进行编码处理,并将编码处理后的所述根节点、中间节点和叶子节点的key-value键值对存储在数据库中;所述叶子节点、所述中间节点和所述根节点的key-value键值对中,value为节点的存储内容,key为节点的存储内容的hash值;所述编码处理包括针对所述根节点、中间节点进行bitmap编码处理;bitmap编码处理后的根节点、中间节点包括bitmap编码信息;所述bitmap编码信息指示所述根节点、中间节点中的各位置中的各槽位是否填充了hash值。还提出一种区块链数据存储装置,所述装置包括:获取模块,获取待存储的区块链数据的key-value键值对;转换模块,将所述待存储的区块链数据的key-value键值对转换成逻辑的树形结构上的根节点、中间节点和叶子节点;所述根节点、中间节点包括多个用于存放所述区块链数据的key中的字符的位置,每个位置中包括多个用于存放所述区块链数据的key中的字符的槽位;所述槽位用于存储与该节点链接的下一层节点的hash值;存储模块,对所述根节点、中间节点和叶子节点进行编码处理,并将编码处理后的所述根节点、中间节点和叶子节点的key-value键值对存储在数据库中;所述叶子节点、所述中间节点和所述根节点的key-value键值对中,value为节点的存储内容,key为节点的存储内容的hash值;所述编码处理包括针对所述根节点、中间节点进行bitmap编码处理;bitmap编码处理后的根节点、中间节点包括bitmap编码信息;所述bitmap编码信息指示所述根节点、中间节点中的各位置中的各槽位是否填充了hash值。以上技术方案中,一方面,由于逻辑的树形结构中的每一个根节点和中间节点,均包括分别代表不同字符的多个位置;并且,各位置又进一步包括多个分别代表不同字符的槽位;因此,通过这种设计,使得每一个根节点和中间节点将具有更大的数据存储容量和数据承载能力,从而在将上述逻辑的树形结构中的根节点和中间节点写入数据库进行存储时;或者,在访问数据库中存储的逻辑的树形结构中的根节点和中间节点时,可以使得根节点和中间节点的数据存储容量,与承载上述数据库的存储介质的单次IO读写的容量更加适配,从而可以充分利用承载上述数据库的存储介质自身的IO读写能力,提升数据读写效率;而且,上述逻辑的树形结构上节点的数据存储容量和数据承载能力的提升,势必也会导致上述逻辑的树形结构整体的数据存储容量和数据承载能力的提升,使得上述逻辑的树形结构上可以存储更多的区块链数据;第二方面,由于逻辑的树形结构中的每一个根节点和中间节点均采用统一的数据结构;对于逻辑的树形结构中的根节点和中间节点来说,其实际存储的区块链数据的key的字符前缀的字符长度也将保持固定;因此,通过这种设计,可以避免由于根节点和中间节点其实际存储的字符长度不固定,而导致的节点的频繁分裂,从而可以确保逻辑的树形结构中所包含的根节点和中间节点的层数,始终处于一个相对稳定的状态;第三方面,由于针对树形结构中的根节点、中间节点执行了bitmap编码,并在编码后的根节点、中间节点中添加能够指示根节点、中间节点中的各位置中的各槽位是否填充了hash值是否填充了hash值的bitmap编码信息;因此,通过这种方式,在需要查询数据库中存储的各字符节点中的位置里填充的数据时,通过该bitmap编码信息,就可以确定该位置里的非空槽位,而不再需要遍历各个槽位,从而可以提升查找效率;而且,通过这种方式,还可以在将各根节点、中间节点存储至数据库中时,删除各根节点、中间节点中的位置中的空槽位,可以进一步节约将各各根节点、中间节点存储至数据库时所占用的存储空间,提升存储效率。附图说明图1是一示例性实施例提供的一种将区块链的账户状态数据组织成MPT状态树的示意图;图2是一示例性实施例提供的一种将合约账户对应的存储空间中存储的合约数据组织成MPTstorage树的示意图;图3是一示例性实施例提供的一种区块链数据存储方法的流程图;图4是一示例性实施例提供的一种FDMT树的树形结构图;图5是一示例性实施例提供的另一种FDMT树的树形结构图;图6是一示例性实施例提供的一种Treenode的结构图;图7是一示例性实施例提供的一种bucket数据桶的结构图;图8是一示例性实施例提供的一种为Merkle树上的节点设置节点ID的示意图;图9是一示例性实施例提供的一种对FDMT树上的Treenode进行递归压缩的示意图;图10是一示例性实施例提供的一种将账户状态数据写入Merkle状态存储树的示意图;图11是一示例性实施例提供的一种对bucketnode进行节点分裂的示意图;图12是一示例性实施例提供的一种电子设备的结构示意图;图13是一示例性实施例提供的一种区块链数据存储装置的框图。具体实施方式这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其本文档来自技高网...

【技术保护点】
1.一种区块链数据存储方法,所述方法包括:/n获取待存储的区块链数据的key-value键值对;/n将所述待存储的区块链数据的key-value键值对转换成逻辑的树形结构上的根节点、中间节点和叶子节点;所述根节点、中间节点包括多个用于存放所述区块链数据的key中的字符的位置,每个位置中包括多个用于存放所述区块链数据的key中的字符的槽位;所述槽位用于存储与该节点链接的下一层节点的hash值;/n对所述根节点、中间节点和叶子节点进行编码处理,并将编码处理后的所述根节点、中间节点和叶子节点的key-value键值对存储在数据库中;所述叶子节点、所述中间节点和所述根节点的key-value键值对中,value为节点的存储内容,key为节点的存储内容的hash值;所述编码处理包括针对所述根节点、中间节点进行bitmap编码处理;bitmap编码处理后的根节点、中间节点包括bitmap编码信息;所述bitmap编码信息指示所述根节点、中间节点中的各位置中的各槽位是否填充了hash值。/n

【技术特征摘要】
1.一种区块链数据存储方法,所述方法包括:
获取待存储的区块链数据的key-value键值对;
将所述待存储的区块链数据的key-value键值对转换成逻辑的树形结构上的根节点、中间节点和叶子节点;所述根节点、中间节点包括多个用于存放所述区块链数据的key中的字符的位置,每个位置中包括多个用于存放所述区块链数据的key中的字符的槽位;所述槽位用于存储与该节点链接的下一层节点的hash值;
对所述根节点、中间节点和叶子节点进行编码处理,并将编码处理后的所述根节点、中间节点和叶子节点的key-value键值对存储在数据库中;所述叶子节点、所述中间节点和所述根节点的key-value键值对中,value为节点的存储内容,key为节点的存储内容的hash值;所述编码处理包括针对所述根节点、中间节点进行bitmap编码处理;bitmap编码处理后的根节点、中间节点包括bitmap编码信息;所述bitmap编码信息指示所述根节点、中间节点中的各位置中的各槽位是否填充了hash值。


2.根据权利要求1所述的方法,所述区块链数据的key对应的字符串包括字符前缀和字符后缀;所述所述根节点、中间节点用于存储所述字符前缀中的字符;所述叶子节点用于存储所述字符后缀和所述区块链数据的Value。


3.根据权利要求2所述的方法,所述方法还包括:
确定所述树形结构上的叶子节点的存储容量是否满足节点分裂条件;
如果所述叶子节点的存储容量满足节点分裂条件,从所述叶子节点中分裂出至少一个中间节点;其中,分裂出的所述中间节点用于存储从所述叶子节点存放的字符后缀中分裂出的字符。


4.根据权利要求3所述的方法,所述根节点、中间节点,均包括主位置和用于存放所述区块链数据的key中的字符的多个子位置;所述主位置包括多个分别与各子位置对应的,用于存放各子位置中的存储内容的hash值的槽位;所述子位置包括多个用于存放所述区块链数据的key中的字符的槽位;所述子位置中的槽位用于存储与该节点链接的下一层节点的hash值;所述根节点、中间节点的hash值为所述根节点、中间节点中的主位置中的存储内容的hash。


5.根据权利要求4所述的方法,所述根节点、所述中间节点存储的字符,为所述根节点、所述中间节点中的各子位置所代表的字符,与所述各子位置中填充了hash值的槽位所代表的字符,进行拼接生成的字符串。


6.根据权利要求5所述的方法,所述根节点、所述中间节点包括的子位置的数量,与所述子位置包括的槽位的数量相同。


7.根据权利要求6所述的方法,所述根节点、所述中间节点包括分别代表不同的16进制字符的16个子位置;所述子位置包括16个分别代表不同的16进制字符的槽位;所述主位置包括与各子位置对应的16个槽位。


8.根据权利要求2所述的方法,所述叶子节点为bucket数据桶;所述bucket数据桶包含若干条数据记录;所述数据记录中存储的数据内容包括所述字符后缀和所述区块链数据的Value。


9.根据权利要求3所述的方法,所述确定所述树形结构上的叶子节点的存储容量是否满足节点分裂条件,包括:
确定所述树形结构上的叶子节点是否发生数据更新;
如果所述树形结构上的任一叶子节点发生数据更新,在重新计算所述叶子节点的hash值,并基于该hash值与所述叶子节点上一层的节点进行重新链接之前,进一步确定所述叶子节点的存储容量是否满足节点分裂条件。


10.根据权利要求9所述的方法,所述方法还包括:
确定所述树形结构上的扩展节点是否发生数据更新;
如果所述树形结构上的任一扩展节点发生数据更新,在重新计算所述扩展节点的hash值,并基于该hash值与该扩展节点上一层的节点进行重新链接之前,确定所述扩展节点的存储容量是否满足节点合并条件;
如果所述扩展节点的存储容量满足节点合并条件,进一步将所述扩展节点,合并至与该扩展节点链接的下一层的叶子节点。


11.根据权利要求10所述的方法,所述数据分裂条件包括:
所述叶子节点中存储的数据记录的总数量大于阈值;和/或,所述叶子节点中存储的数据记录的总存储容量大于阈值;
相应的,所述数据合并条件包括:
所述扩展节点中存储的字符的总数量小于或等于阈值;和/或,所述扩展节点中存储的字符的总存储容量小于或等于阈值。


12.根据权利要求9所述的方法,从所述叶子节点分裂出至少一个扩展节点,包括:
确定在当前的成块周期内写入所述叶子节点的最新数据记录;
将所述最新数据记录从所述叶子节点删除;以及,
从所述最新数据记录所包含的字符后缀中分裂出字符前缀,并创建用于存储分裂出的所述字符前缀的至少一扩展节点,以及用于存储分裂出所述字符前缀之后的所述最新数据记录的至少一叶子节点。


13.根据权利要求9所述的方法,从所述叶子节点分裂出至少一个扩展节点,包括:
确定所述叶子节点存储的若干条数据记录所包含的字符后缀之间的共享字符前缀;
将所述共享字符前缀从所述若干条数据记录中删除,并创建用于存储所述共享字符前缀的至少一扩展节点。


14.根据权利要求13所述的方法,将所述扩展节点,合并至与该扩展节点链接的下一层的叶子节点,包括:
确定与所述扩展节点链接的下一层的叶子节点;
将该扩展节点存储的字符作为所述字符后缀写入所述叶子节点。


15.根据权利要求1所述的方法,将编码处理后的所述根节点、中间节点和叶子节点在数据库中进行存储之前,还包括:
根据编码处理后的所述根节点、中间节点和叶子节点中的位置被添加的bitmap编码信息,确定所述位置中未填充hash值的空槽位,并从所述位置中删除确定出所述空槽位。


16.根据权利要求1所述的方法,所述编码处理还包括:
针对所述叶子节点执行RLP编码。


17.根据权利要求1所述的方法,所述区块链数据包括以下示出的任一:
区块中收录的交易;
与所述区块中收录的交易对应的交易收据;
与所述区块链中的区块链账户对...

【专利技术属性】
技术研发人员:俞本权卓海振陆钟豪
申请(专利权)人:支付宝杭州信息技术有限公司蚂蚁区块链科技上海有限公司
类型:发明
国别省市:浙江;33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1