梅克尔树的更新方法及装置制造方法及图纸

技术编号:37394997 阅读:10 留言:0更新日期:2023-04-27 07:32
本申请提供一种梅克尔树的更新方法及装置,可用于金融领域或其他技术领域。所述方法包括:获取梅克尔树更新请求,其中,所述梅克尔树更新请求中包括请求删除的数据节点信息、请求新增的数据节点信息和/或请求更新的数据节点信息;根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点并构建所述新版本的数据节点的各级新版本祖先节点;更新所述梅克尔树的版本号,得到更新后的梅克尔树。本申请实施例提供的梅克尔树的更新方法及装置,解决了梅克尔树更新导致读操作长时间阻塞的问题,提高了读写并发度,进而提高了区块链数据读写性能。链数据读写性能。链数据读写性能。

【技术实现步骤摘要】
梅克尔树的更新方法及装置


[0001]本申请涉及计算机
,具体涉及一种梅克尔树的更新方法及装置。

技术介绍

[0002]为了防止数据篡改,区块链使用梅克尔树作为数据存储结构。如图1所示,梅克尔树一般是二叉树,其叶子节点存储数据的哈希值,非叶节点存储子节点的哈希值,然后不断往上,直到根节点存储所有节点的哈希值。
[0003]当梅克尔树叶子节点指向的数据有新增、更新、删除时,需同步更新叶子节点、对应祖先节点的哈希;因更新期间梅克尔树节点状态不一致,故更新期间整棵树的是不可读的。只有等整棵树新增、更新、删除完成后,才能读取梅克尔树。

技术实现思路

[0004]针对现有技术中的问题,本申请实施例提供一种梅克尔树的更新方法及装置,能够至少部分地解决现有技术中存在的问题。
[0005]一方面,本申请提出一种梅克尔树的更新方法,包括:
[0006]获取梅克尔树更新请求,其中,所述梅克尔树更新请求中包括请求删除的数据节点信息、请求新增的数据节点信息和/或请求更新的数据节点信息;
[0007]根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点并构建所述新版本的数据节点的各级新版本祖先节点;
[0008]更新所述梅克尔树的版本号,得到更新后的梅克尔树。
[0009]在一些实施例中,在所述梅克尔树更新请求中包括请求删除的数据节点信息时,所述根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点并构建所述新版本的数据节点的各级新版本祖先节点包括
[0010]根据请求删除的数据节点信息,在所述梅克尔树中构建新版本的所述数据节点并为该新版本的数据节点添加删除标识;
[0011]在所述梅克尔树中构建所述新版本的数据节点的各级新版本祖先节点并为各级新版本祖先节点添加删除标识。
[0012]在一些实施例中,在所述梅克尔树更新请求中包括至少两个数据节点的信息时,所述根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点并构建所述新版本的数据节点的各级新版本祖先节点包括:
[0013]根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点;
[0014]根据各所述新版本的数据节点,按照层级顺序在所述梅克尔树中依次构建所述数据节点的各级新版本祖先节点。
[0015]在一些实施例中,所述方法还包括:
[0016]根据梅克尔树读取请求,获取所述梅克尔树当前的版本号;
[0017]根据所述梅克尔树当前的版本号,读取所述梅克尔树的节点信息。
[0018]在一些实施例中,在根据梅克尔树读取请求,获取所述梅克尔树当前的版本号之后,在根据所述梅克尔树当前的版本号,读取所述梅克尔树的节点信息之前,所述方法还包括:
[0019]将所述梅克尔树当前的版本号的引用计数值加1;
[0020]在根据所述梅克尔树当前的版本号,读取所述梅克尔树的节点信息之后,所述方法还包括:
[0021]将所述梅克尔树当前的版本号的引用计数值减1。
[0022]在一些实施例中,所述方法还包括:
[0023]获取所述梅克尔树的历史版本号中引用计数值为0的历史版本号;
[0024]对于所述梅克尔树中具有两种及两种以上版本的节点,删除节点版本号小于以及等于所述历史版本号的节点。
[0025]在一些实施例中,所述根据所述梅克尔树当前的版本号,读取所述梅克尔树的节点信息包括:
[0026]对于所述梅克尔树中只有一个版本的节点,读取该节点的节点信息;
[0027]对于所述梅克尔树中具有两个及两个以上版本的节点,根据所述梅克尔树当前的版本号,读取节点版本号小于或等于所述梅克尔树当前的版本号且节点版本号最大的节点的信息。
[0028]另一方面,本申请提出一种梅克尔树的更新装置,包括:
[0029]获取模块,用于获取梅克尔树更新请求,其中,所述梅克尔树更新请求中包括请求删除的数据节点信息、请求新增的数据节点信息和/或请求更新的数据节点信息;
[0030]构建模块,根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点并构建所述新版本的数据节点的各级新版本祖先节点;
[0031]更新模块,用于更新所述梅克尔树的版本号,得到更新后的梅克尔树。
[0032]在一些实施例中,在所述梅克尔树更新请求中包括请求删除的数据节点信息时,所述构建模块具体用于:
[0033]根据请求删除的数据节点信息,在所述梅克尔树中构建新版本的所述数据节点并为该新版本的数据节点添加删除标识;
[0034]在所述梅克尔树中构建所述新版本的数据节点的各级新版本祖先节点并为各级新版本祖先节点添加删除标识。
[0035]在一些实施例中,在所述梅克尔树更新请求中包括至少两个数据节点的信息时,所述构建模块具体用于:
[0036]根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点;
[0037]根据各所述新版本的数据节点,按照层级顺序在所述梅克尔树中依次构建所述数据节点的各级新版本祖先节点。
[0038]在一些实施例中,所述获取模块还用于:根据梅克尔树读取请求,获取所述梅克尔树当前的版本号;
[0039]所述装置还包括:读取模块,用于根据所述梅克尔树当前的版本号,读取所述梅克尔树的节点信息。
[0040]在一些实施例中,所述装置还包括计数模块,所述计数模块用于:
[0041]在根据梅克尔树读取请求,获取所述梅克尔树当前的版本号之后,在根据所述梅克尔树当前的版本号,读取所述梅克尔树的节点信息之前,将所述梅克尔树当前的版本号的引用计数值加1;
[0042]在根据所述梅克尔树当前的版本号,读取所述梅克尔树的节点信息之后,将所述梅克尔树当前的版本号的引用计数值减1。
[0043]在一些实施例中,所述获取模块还用于:获取所述梅克尔树的历史版本号中引用计数值为0的历史版本号;
[0044]所述装置还包括:删除模块,用于对于所述梅克尔树中具有两种及两种以上版本的节点,删除节点版本号小于以及等于所述历史版本号的节点。
[0045]在一些实施例中,所述读取模块具体用于:
[0046]对于所述梅克尔树中只有一个版本的节点,读取该节点的节点信息;
[0047]对于所述梅克尔树中具有两个及两个以上版本的节点,根据所述梅克尔树当前的版本号,读取节点版本号小于或等于所述梅克尔树当前的版本号且节点版本号最大的节点的信息。
[0048]本申请实施例还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述任一实施例所述的梅克尔树的更新方法的步骤。
[0049]本申请实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述任一实施例所述的梅克尔树的更新方法的步骤。
本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种梅克尔树的更新方法,其特征在于,包括:获取梅克尔树更新请求,其中,所述梅克尔树更新请求中包括请求删除的数据节点信息、请求新增的数据节点信息和/或请求更新的数据节点信息;根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点并构建所述新版本的数据节点的各级新版本祖先节点;更新所述梅克尔树的版本号,得到更新后的梅克尔树。2.根据权利要求1所述的方法,其特征在于,在所述梅克尔树更新请求中包括请求删除的数据节点信息时,所述根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点并构建所述新版本的数据节点的各级新版本祖先节点包括:根据请求删除的数据节点信息,在所述梅克尔树中构建新版本的所述数据节点并为该新版本的数据节点添加删除标识;在所述梅克尔树中构建所述新版本的数据节点的各级新版本祖先节点并为各级新版本祖先节点添加删除标识。3.根据权利要求1所述的方法,其特征在于,在所述梅克尔树更新请求中包括至少两个数据节点的信息时,所述根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点并构建所述新版本的数据节点的各级新版本祖先节点包括:根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点;根据各所述新版本的数据节点,按照层级顺序在所述梅克尔树中依次构建所述数据节点的各级新版本祖先节点。4.根据权利要求1至3任一项所述的方法,其特征在于,所述方法还包括:根据梅克尔树读取请求,获取所述梅克尔树当前的版本号;根据所述梅克尔树当前的版本号,读取所述梅克尔树的节点信息。5.根据权利要求4所述的方法,其特征在于,在根据梅克尔树读取请求,获取所述梅克尔树当前的版本号之后,在根据所述梅克尔树当前的版本号,读...

【专利技术属性】
技术研发人员:林嘉文陈金娣金纯亮夏琼
申请(专利权)人:中国工商银行股份有限公司
类型:发明
国别省市:

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

1