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

技术编号:28941966 阅读:18 留言:0更新日期:2021-06-18 21:48
一种区块链数据存储方法及装置、电子设备,区块链数据的key‑value键值对以逻辑的树形结构上的根节点、中间节点和叶子节点的形式,存储在数据库中;根节点、中间节点包括多个用于存放所述区块链数据的key中的字符的位置,每个位置中包括多个槽位;槽位用于存储与该节点链接的下一层节点的hash值;方法包括:确定逻辑的树形结构上的中间节点中的各位置的非空槽位的数量是否为1;如果中间节点中的任一目标位置的非空槽位的数量为1,确定与中间节点链接的上一层节点中用于填充中间节点的hash值的目标槽位;将目标位置的hash标识作为中间节点的hash值填充至所述目标槽位,并删除中间节点。

【技术实现步骤摘要】
区块链数据存储方法及装置、电子设备
本说明书一个或多个实施例涉及区块链
,尤其涉及一种区块链数据存储方法及装置、电子设备。
技术介绍
区块链技术,也被称之为分布式账本技术,是一种由若干台节点设备共同参与“记账”,共同存储和维护一份完整的分布式数据库的新兴技术。对于区块链的节点设备来说,需要存储和维护的区块链数据,通常包括区块数据、区块链中的区块链账户对应的账户状态数据;而区块数据又可以进一步包括区块头数据、区块中的区块交易数据、以及与区块中的区块交易数据对应的交易收据,等等。区块链的节点设备在存储以上示出的各种区块链数据时,通常可以将上述各种区块链数据以key-value键值对的形式,组织成Merkle树在数据库中存储。当需要查询节点设备存储的上述各种区块链数据时,可以通过将上述各种区块链数据的key作为查询索引,遍历上述Merkle树来高效的查询数据。
技术实现思路
本说明书提出一种区块链数据存储方法,所述区块链数据的key-value键值对以逻辑的树形结构上的根节点、中间节点和叶子节点的形式,存储在数据库中;所述根节点、中间节点包括多个用于存放所述区块链数据的key中的字符的位置,每个位置中包括多个用于存放所述区块链数据的key中的字符的槽位;所述槽位用于存储与该节点链接的下一层节点的hash值;所述方法包括:确定所述逻辑的树形结构上的中间节点中的各位置的非空槽位的数量是否为1;如果所述中间节点中的任一目标位置的非空槽位的数量为1,确定与所述中间节点链接的上一层节点中用于填充所述中间节点的hash值的目标槽位;将所述目标位置的hash标识作为所述中间节点的hash值填充至所述目标槽位,并删除所述中间节点;其中,所述目标位置的hash标识包括所述非空槽位中填充的hash值和与所述非空槽位对应的压缩信息;所述压缩信息包括所述非空槽位被压缩的次数和所述非空槽位在所述中间节点中的相对位置。本说明书还提出一种区块链数据存储方法,所述区块链数据的key-value键值对以逻辑的树形结构上的根节点、中间节点和叶子节点的形式,存储在数据库中;所述根节点、中间节点,均包括主位置和用于存放所述区块链数据的key中的字符的多个子位置;所述主位置包括多个分别与各子位置对应的,用于存放各子位置中的存储内容的hash值的槽位;所述子位置包括多个用于存放所述区块链数据的key中的字符的槽位;所述子位置中的槽位用于存储与该节点链接的下一层节点的hash值;所述根节点、中间节点的hash值为所述根节点、中间节点中的主位置中的存储内容的hash;所述方法包括:确定所述逻辑的树形结构上的中间节点中的主位置以及各子位置的非空槽位的数量是否为1;如果所述中间节点中的任一目标子位置的非空槽位的数量为1,确定与所述目标子位置链接的上一级主位置中用于填充该目标子位置中的存储内容的hash值的目标槽位,并将所述目标子位置的hash标识作为所述目标子位置中的存储内容的hash值填充至所述目标槽位,并删除所述目标子位置;如果所述中间节点中的任一主位置的非空槽位的数量为1,确定与所述中间节点链接的上一层节点中用于填充所述中间节点的hash值的目标槽位,并将所述主位置的hash标识作为所述中间节点的hash值填充至所述目标槽位,并删除所述中间节点;其中,hash标识包括所述非空槽位中填充的hash值和与所述非空槽位对应的压缩信息;所述压缩信息包括所述非空槽位被压缩的次数和所述非空槽位在所述中间节点中的相对位置。本说明书提出还一种区块链数据存储装置,所述区块链数据的key-value键值对以逻辑的树形结构上的根节点、中间节点和叶子节点的形式,存储在数据库中;所述根节点、中间节点包括多个用于存放所述区块链数据的key中的字符的位置,每个位置中包括多个用于存放所述区块链数据的key中的字符的槽位;所述槽位用于存储与该节点链接的下一层节点的hash值;所述装置包括:第一确定模块,确定所述逻辑的树形结构上的中间节点中的各位置的非空槽位的数量是否为1;第二确定模块模块,如果所述中间节点中的任一目标位置的非空槽位的数量为1,确定与所述中间节点链接的上一层节点中用于填充所述中间节点的hash值的目标槽位;第一压缩模块,将所述目标位置的hash标识作为所述中间节点的hash值填充至所述目标槽位,并删除所述中间节点;其中,所述目标位置的hash标识包括所述非空槽位中填充的hash值和与所述非空槽位对应的压缩信息;所述压缩信息包括所述非空槽位被压缩的次数和所述非空槽位在所述中间节点中的相对位置。本说明书还提出一种区块链数据存储装置,所述区块链数据的key-value键值对以逻辑的树形结构上的根节点、中间节点和叶子节点的形式,存储在数据库中;所述根节点、中间节点,均包括主位置和用于存放所述区块链数据的key中的字符的多个子位置;所述主位置包括多个分别与各子位置对应的,用于存放各子位置中的存储内容的hash值的槽位;所述子位置包括多个用于存放所述区块链数据的key中的字符的槽位;所述子位置中的槽位用于存储与该节点链接的下一层节点的hash值;所述根节点、中间节点的hash值为所述根节点、中间节点中的主位置中的存储内容的hash;所述装置包括:第三确定模块,确定所述逻辑的树形结构上的中间节点中的主位置以及各子位置的非空槽位的数量是否为1;第二压缩模块,如果所述中间节点中的任一目标子位置的非空槽位的数量为1,确定与所述目标子位置链接的上一级主位置中用于填充该目标子位置中的存储内容的hash值的目标槽位,并将所述目标子位置的hash标识作为所述目标子位置中的存储内容的hash值填充至所述目标槽位,并删除所述目标子位置;如果所述中间节点中的任一主位置的非空槽位的数量为1,确定与所述中间节点链接的上一层节点中用于填充所述中间节点的hash值的目标槽位,并将所述主位置的hash标识作为所述中间节点的hash值填充至所述目标槽位,并删除所述中间节点;其中,hash标识包括所述非空槽位中填充的hash值和与所述非空槽位对应的压缩信息;所述压缩信息包括所述非空槽位被压缩的次数和所述非空槽位在所述中间节点中的相对位置。以上技术方案中,一方面,由于逻辑的树形结构中的每一个根节点和中间节点,均包括分别代表不同字符的多个位置;并且,各位置又进一步包括多个分别代表不同字符的槽位;因此,通过这种设计,使得每一个根节点和中间节点将具有更大的数据存储容量和数据承载能力,从而在将上述逻辑的树形结构中的根节点和中间节点写入数据库进行存储时;或者,在访问数据库中存储的逻辑的树形结构中的根节点和中间节点时,可以使得根节点和中间节点的数据存储容量,与承载上述数据库的存储介质的单次IO读写的容量更加适配,从而可以充分利用承载上述数据库的存储介质自身的IO读写能力,提升数据读写效率;而且,上述逻辑的树形结构上节点的数据存储容量和数据承载能力的提升,势必也会导致上述逻辑的树形结构整体的本文档来自技高网...

【技术保护点】
1.一种区块链数据存储方法,所述区块链数据的key-value键值对以逻辑的树形结构上的根节点、中间节点和叶子节点的形式,存储在数据库中;所述根节点、中间节点包括多个用于存放所述区块链数据的key中的字符的位置,每个位置中包括多个用于存放所述区块链数据的key中的字符的槽位;所述槽位用于存储与该节点链接的下一层节点的hash值;所述方法包括:/n确定所述逻辑的树形结构上的中间节点中的各位置的非空槽位的数量是否为1;/n如果所述中间节点中的任一目标位置的非空槽位的数量为1,确定与所述中间节点链接的上一层节点中用于填充所述中间节点的hash值的目标槽位;/n将所述目标位置的hash标识作为所述中间节点的hash值填充至所述目标槽位,并删除所述中间节点;/n其中,所述目标位置的hash标识包括所述非空槽位中填充的hash值和与所述非空槽位对应的压缩信息;所述压缩信息包括所述非空槽位被压缩的次数和所述非空槽位在所述中间节点中的相对位置。/n

【技术特征摘要】
1.一种区块链数据存储方法,所述区块链数据的key-value键值对以逻辑的树形结构上的根节点、中间节点和叶子节点的形式,存储在数据库中;所述根节点、中间节点包括多个用于存放所述区块链数据的key中的字符的位置,每个位置中包括多个用于存放所述区块链数据的key中的字符的槽位;所述槽位用于存储与该节点链接的下一层节点的hash值;所述方法包括:
确定所述逻辑的树形结构上的中间节点中的各位置的非空槽位的数量是否为1;
如果所述中间节点中的任一目标位置的非空槽位的数量为1,确定与所述中间节点链接的上一层节点中用于填充所述中间节点的hash值的目标槽位;
将所述目标位置的hash标识作为所述中间节点的hash值填充至所述目标槽位,并删除所述中间节点;
其中,所述目标位置的hash标识包括所述非空槽位中填充的hash值和与所述非空槽位对应的压缩信息;所述压缩信息包括所述非空槽位被压缩的次数和所述非空槽位在所述中间节点中的相对位置。


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


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


4.根据权利要求3所述的方法,所述根节点、所述中间节点包括分别代表不同的16进制字符的16个位置;所述位置包括16个分别代表不同的16进制字符的槽位。


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


6.根据权利要求1所述的方法,针对所述根节点、中间节点的编码方式为bitmap编码;所述中间节点包括bitmap编码信息;所述bitmap编码信息指示所述block中的各槽位是否填充了hash值;
所述确定所述逻辑的树形结构上的中间节点中的各位置的非空槽位的数量是否为1,包括:
基于所述中间节点的bitmap编码信息确定所述逻辑的树形结构上的中间节点中的各位置的非空槽位的数量是否为1。


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


8.根据权利要求1所述的方法,所述区块链数据包括以下示出的任一:
区块中收录的交易;
与所述区块中收录的交易对应的交易收据;
与所述区块链中的区块链账户对应的最新账户状态数据;
智能合约账户的存储内容。


9.根据权利要求8所述的方法,所述逻辑的树形结构包括以下示出的任一:
用于存储区块中收录的交易的交易树;
用于存储与区块中收录的交易对应的交易收据的收据树;
用于存储与所述区块链中的区块链账户对应的最新账户状态数据的状态树;
用于存储智能合约账户的存储内容的存储树。


10.一种区块链数据存储方法,所述区块链数据的key-value键值对以逻辑的树形结构上的根节点、中间节点和叶子节点的形式,存储在数据库中;所述根节点、中间节点,均包括主位置和用于存放所述区块链数据的key中的字符的多个子位置;所述主位置包括多个分别与各子位置对应的,用于存放各子位置中的存储内容的hash值的槽位;所述子位置包括多个用于存放所述区块链数据的key中的字符的槽位;所述子位置中的槽位用于存储与该节点链接的下一层节点的hash值;所述根节点、中间节点的hash值为所述根节点、中间节点中的主位置中的存储内容的hash;所述方法包括:
确定所述逻辑的树形结构上的中间节点中的主位置以及各子位置的非空槽位的数量是否为1;
如果所述中间节点中的任一目标子位置的非空槽位的数量为1,确定与所述目标子位置链接的上一级主位置中用于填充该目标子位置中的存储内容的hash值的目标槽位,并将所述目标子位置的hash标识作为所述目标子位置中的存储内容的hash值填充至所述目标槽位,并删除所述目标子位置;
如果所述中间节点中的任一主位置的非空槽位的数量为1,确定与所述中间节点链接的上一层节点中用于填充所述中间节点的hash值的目标槽位,并将所述主位置的hash标识作为所述中间节点的hash值填充至所述目标槽位,并删除所述中间节点;
其中,hash标识包括所述非空槽位中填充的hash值和与所述非空槽位对应的压缩信息;所述压缩信息包括所述非空槽位被压缩的次数和所述非空槽位在所述中间节点中的相对位置。


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


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


13.根据权利要求12所述的方法,所述根节点、所述中间节点包括分别代表不同的16进制字符的16个子位置;所述子位置包括16个分别代表不同的16进制字符的槽位...

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

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

1