CN116009910A - 梅克尔树的更新方法及装置 - Google Patents
梅克尔树的更新方法及装置 Download PDFInfo
- Publication number
- CN116009910A CN116009910A CN202211672989.1A CN202211672989A CN116009910A CN 116009910 A CN116009910 A CN 116009910A CN 202211672989 A CN202211672989 A CN 202211672989A CN 116009910 A CN116009910 A CN 116009910A
- Authority
- CN
- China
- Prior art keywords
- tree
- nodes
- data
- merkel
- version
- 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.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供一种梅克尔树的更新方法及装置,可用于金融领域或其他技术领域。所述方法包括:获取梅克尔树更新请求,其中,所述梅克尔树更新请求中包括请求删除的数据节点信息、请求新增的数据节点信息和/或请求更新的数据节点信息;根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点并构建所述新版本的数据节点的各级新版本祖先节点;更新所述梅克尔树的版本号,得到更新后的梅克尔树。本申请实施例提供的梅克尔树的更新方法及装置,解决了梅克尔树更新导致读操作长时间阻塞的问题,提高了读写并发度,进而提高了区块链数据读写性能。
Description
技术领域
本申请涉及计算机技术领域,具体涉及一种梅克尔树的更新方法及装置。
背景技术
为了防止数据篡改,区块链使用梅克尔树作为数据存储结构。如图1所示,梅克尔树一般是二叉树,其叶子节点存储数据的哈希值,非叶节点存储子节点的哈希值,然后不断往上,直到根节点存储所有节点的哈希值。
当梅克尔树叶子节点指向的数据有新增、更新、删除时,需同步更新叶子节点、对应祖先节点的哈希;因更新期间梅克尔树节点状态不一致,故更新期间整棵树的是不可读的。只有等整棵树新增、更新、删除完成后,才能读取梅克尔树。
发明内容
针对现有技术中的问题,本申请实施例提供一种梅克尔树的更新方法及装置,能够至少部分地解决现有技术中存在的问题。
一方面,本申请提出一种梅克尔树的更新方法,包括:
获取梅克尔树更新请求,其中,所述梅克尔树更新请求中包括请求删除的数据节点信息、请求新增的数据节点信息和/或请求更新的数据节点信息;
根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点并构建所述新版本的数据节点的各级新版本祖先节点;
更新所述梅克尔树的版本号,得到更新后的梅克尔树。
在一些实施例中,在所述梅克尔树更新请求中包括请求删除的数据节点信息时,所述根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点并构建所述新版本的数据节点的各级新版本祖先节点包括:
根据请求删除的数据节点信息,在所述梅克尔树中构建新版本的所述数据节点并为该新版本的数据节点添加删除标识;
在所述梅克尔树中构建所述新版本的数据节点的各级新版本祖先节点并为各级新版本祖先节点添加删除标识。
在一些实施例中,在所述梅克尔树更新请求中包括至少两个数据节点的信息时,所述根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点并构建所述新版本的数据节点的各级新版本祖先节点包括:
根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点;
根据各所述新版本的数据节点,按照层级顺序在所述梅克尔树中依次构建所述数据节点的各级新版本祖先节点。
在一些实施例中,所述方法还包括:
根据梅克尔树读取请求,获取所述梅克尔树当前的版本号;
根据所述梅克尔树当前的版本号,读取所述梅克尔树的节点信息。
在一些实施例中,在根据梅克尔树读取请求,获取所述梅克尔树当前的版本号之后,在根据所述梅克尔树当前的版本号,读取所述梅克尔树的节点信息之前,所述方法还包括:
将所述梅克尔树当前的版本号的引用计数值加1;
在根据所述梅克尔树当前的版本号,读取所述梅克尔树的节点信息之后,所述方法还包括:
将所述梅克尔树当前的版本号的引用计数值减1。
在一些实施例中,所述方法还包括:
获取所述梅克尔树的历史版本号中引用计数值为0的历史版本号;
对于所述梅克尔树中具有两种及两种以上版本的节点,删除节点版本号小于以及等于所述历史版本号的节点。
在一些实施例中,所述根据所述梅克尔树当前的版本号,读取所述梅克尔树的节点信息包括:
对于所述梅克尔树中只有一个版本的节点,读取该节点的节点信息;
对于所述梅克尔树中具有两个及两个以上版本的节点,根据所述梅克尔树当前的版本号,读取节点版本号小于或等于所述梅克尔树当前的版本号且节点版本号最大的节点的信息。
另一方面,本申请提出一种梅克尔树的更新装置,包括:
获取模块,用于获取梅克尔树更新请求,其中,所述梅克尔树更新请求中包括请求删除的数据节点信息、请求新增的数据节点信息和/或请求更新的数据节点信息;
构建模块,根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点并构建所述新版本的数据节点的各级新版本祖先节点;
更新模块,用于更新所述梅克尔树的版本号,得到更新后的梅克尔树。
在一些实施例中,在所述梅克尔树更新请求中包括请求删除的数据节点信息时,所述构建模块具体用于:
根据请求删除的数据节点信息,在所述梅克尔树中构建新版本的所述数据节点并为该新版本的数据节点添加删除标识;
在所述梅克尔树中构建所述新版本的数据节点的各级新版本祖先节点并为各级新版本祖先节点添加删除标识。
在一些实施例中,在所述梅克尔树更新请求中包括至少两个数据节点的信息时,所述构建模块具体用于:
根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点;
根据各所述新版本的数据节点,按照层级顺序在所述梅克尔树中依次构建所述数据节点的各级新版本祖先节点。
在一些实施例中,所述获取模块还用于:根据梅克尔树读取请求,获取所述梅克尔树当前的版本号;
所述装置还包括:读取模块,用于根据所述梅克尔树当前的版本号,读取所述梅克尔树的节点信息。
在一些实施例中,所述装置还包括计数模块,所述计数模块用于:
在根据梅克尔树读取请求,获取所述梅克尔树当前的版本号之后,在根据所述梅克尔树当前的版本号,读取所述梅克尔树的节点信息之前,将所述梅克尔树当前的版本号的引用计数值加1;
在根据所述梅克尔树当前的版本号,读取所述梅克尔树的节点信息之后,将所述梅克尔树当前的版本号的引用计数值减1。
在一些实施例中,所述获取模块还用于:获取所述梅克尔树的历史版本号中引用计数值为0的历史版本号;
所述装置还包括:删除模块,用于对于所述梅克尔树中具有两种及两种以上版本的节点,删除节点版本号小于以及等于所述历史版本号的节点。
在一些实施例中,所述读取模块具体用于:
对于所述梅克尔树中只有一个版本的节点,读取该节点的节点信息;
对于所述梅克尔树中具有两个及两个以上版本的节点,根据所述梅克尔树当前的版本号,读取节点版本号小于或等于所述梅克尔树当前的版本号且节点版本号最大的节点的信息。
本申请实施例还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述任一实施例所述的梅克尔树的更新方法的步骤。
本申请实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述任一实施例所述的梅克尔树的更新方法的步骤。
本申请实施例提供的梅克尔树的更新方法及装置,通过获取梅克尔树更新请求,其中,所述梅克尔树更新请求中包括请求删除的数据节点信息、请求新增的数据节点信息和/或请求更新的数据节点信息;根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点并构建所述新版本的数据节点的各级新版本祖先节点;更新所述梅克尔树的版本号,得到更新后的梅克尔树。这样,新增、删除和/或更新梅克尔树各数据节点时,并不直接操作现有节点,而是创建新版本的节点;在梅克尔树更新过程中,梅克尔树的版本号维持不变,此时若有读请求进入,则可根据当前梅克尔树版本号读取梅克尔树相应节点的信息。至此,实现了在梅克尔树更新期间,同时允许读取节点信息,解决了梅克尔树更新导致读操作长时间阻塞的问题,提高了读写并发度,进而提高了区块链数据读写性能。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1是本申请一实施例提供一种梅克尔树的结构示意图。
图2是本申请一实施例提供的梅克尔树的更新方法的流程示意图。
图3是本申请一实施例提供的一种的梅克尔树的结构示意图。
图4是本申请一实施例提供的在梅克尔树中新增节点的示意图。
图5是本申请一实施例提供的新增节点后的梅克尔树的结构示意图。
图6是本申请一实施例提供的更新梅克尔树中的节点的示意图。
图7是本申请一实施例提供的更新节点后的梅克尔树的结构示意图。
图8是本申请一实施例提供的梅克尔树的更新方法的部分流程示意图。
图9是本申请一实施例提供的删除梅克尔树中的节点的示意图。
图10是本申请一实施例提供的删除节点后的梅克尔树的结构示意图。
图11是本申请一实施例提供的梅克尔树的更新方法的部分流程示意图。
图12是本申请一实施例提供的梅克尔树的更新方法的部分流程示意图。
图13是本申请一实施例提供的梅克尔树的状态示意图。
图14是本申请一实施例提供的梅克尔树的更新方法的部分流程示意图。
图15是本申请一实施例提供的梅克尔树的状态示意图。
图16是本申请一实施例提供的梅克尔树的更新方法的部分流程示意图。
图17是本申请一实施例提供的梅克尔树的更新装置的结构示意图。
图18是本申请一实施例提供的电子设备的实体结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本申请实施例做进一步详细说明。在此,本申请的示意性实施例及其说明用于解释本申请,但并不作为对本申请的限定。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意排序。
关于本文中所使用的“第一”、“第二”、……等,并非特别指称次序或顺位的意思,亦非用以限定本申请,其仅为了区别以相同技术用语描述的元件或操作。
关于本文中所使用的“包含”、“包括”、“具有”、“含有”等等,均为开放性的用语,即意指包含但不限于。
关于本文中所使用的“及/或”,包括所述事物的任一或全部排序。
本申请实施例提供的梅克尔树的更新方法的执行主体包括但不限于计算机。
图2是本申请一实施例提供的梅克尔树的更新方法的流程示意图,如图2所示,本申请实施例提供的梅克尔树的更新方法,包括:
S101、获取梅克尔树更新请求,其中,所述梅克尔树更新请求中包括请求删除的数据节点信息、请求新增的数据节点信息和/或请求更新的数据节点信息;
步骤S101中,梅克尔树的更新操作包括节点的删除、新增和/或更新;所述梅克尔树更新请求中包括请求删除、新增和/或更新的某一或某一些数据节点的信息,例如数据节点的名称。对于请求新增的数据节点,所述梅克尔树更新请求还可以包括该数据节点要存储的哈希值;对于请求更新的数据节点,所述梅克尔树更新请求还可以包括该数据节点要存储的新的哈希值。
S102、根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点并构建所述新版本的数据节点的各级新版本祖先节点;
步骤S102中,新增、删除和/或更新梅克尔树各数据节点时,并不直接操作现有数据节点,而是创建新版本的数据节点,并在此基础上,构建所述新版本的数据节点的各级新版本祖先节点。
S103、更新所述梅克尔树的版本号,得到更新后的梅克尔树。
步骤S103中,在新版本的数据节点以及该新版本的数据节点的各级新版本祖先节点构建完成之后,升级梅克尔树的版本号。
本申请实施例提供的梅克尔树的更新方法,通过获取梅克尔树更新请求,其中,所述梅克尔树更新请求中包括请求删除的数据节点信息、请求新增的数据节点信息和/或请求更新的数据节点信息;根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点并构建所述新版本的数据节点的各级新版本祖先节点;更新所述梅克尔树的版本号,得到更新后的梅克尔树。这样,新增、删除和/或更新梅克尔树各数据节点时,并不直接操作现有节点,而是创建新版本的节点;在梅克尔树更新过程中,梅克尔树的版本号维持不变,此时若有读请求进入,则可根据当前梅克尔树版本号读取梅克尔树相应节点的信息。至此,实现了在梅克尔树更新期间,同时允许读取节点信息,解决了梅克尔树更新导致读操作长时间阻塞的问题,提高了读写并发度,进而提高了区块链数据读写性能。
图3是本申请实施例提供的一种的梅克尔树,以图3所示的梅克尔树为例,对本申请提供的新增梅克尔树节点的详细过程进行说明。如图3所示,新增梅克尔树节点前,梅克尔树每个节点的初始版本号为V1,梅克尔树当前的版本号也是V1。
如图4所示,在图3中的梅克尔树中新增数据节点5和数据节点6,其版本号为V2。接着往上新增哈希节点5-6-1、哈希节点5-6-2以及哈希节点1-6,版本号均为V2。其中哈希节点1-6的子节点分别是V1版本的哈希节点1-4和V2版本的哈希节点5-6-2。新增节点期间,梅克尔树的版本号仍然是V1。
如图5所示,数据节点5、数据节点6、哈希节点5-6-1、哈希节点5-6-2以及哈希节点1-6新增完毕后,更新梅克尔树版本为V2,V1添加到梅克尔树版本队列的末尾。
继续以图3所示的梅克尔树为例,对本申请提供的更新梅克尔树节点的详细过程进行说明。如图3所示,更新梅克尔树节点前,梅克尔树每个节点的初始版本为V1,梅克尔树版本也是V1。
如图6所示,数据节点4更新时,不直接更改现有数据节点4,而是创建一个V2版本的数据节点4。往上更新梅克尔树哈希节点4、哈希节点3-4、哈希节点1-4时,不直接更新其哈希值,而是创新V2版本的梅克尔树节点。V2版本的梅克尔树节点指向子节点的最新版本,如V2版本的哈希节点3-4的子节点,分别是V1版本的哈希节点3和V2版本的哈希节点4。更新期间,梅克尔树版本仍然是V1。
如图7所示,数据节点4(V2)、哈希节点4(V2)、哈希节点3-4(V2)、哈希节点1-4(V2)更新完毕后,更新梅克尔树版本为V2,V1添加到梅克尔树版本队列的末尾。
如图8所示,在一些实施例中,在所述梅克尔树更新请求中包括请求删除的数据节点信息时,所述根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点并构建所述新版本的数据节点的各级新版本祖先节点包括:
S1021、根据请求删除的数据节点信息,在所述梅克尔树中构建新版本的所述数据节点并为该新版本的数据节点添加删除标识;
S1022、在所述梅克尔树中构建所述新版本的数据节点的各级新版本祖先节点并为各级新版本祖先节点添加删除标识。
具体来讲,删除梅克尔树的数据节点时,不是直接删除指定的数据节点,而是创建一个新版本的数据节点,并为该数据节点添加删除标识。以下以图3所示的梅克尔树为例,对本申请提供的删除梅克尔树节点的详细过程进行说明。
如图3所示,删除梅克尔树节点前,梅克尔树每个节点的初始版本为V1,梅克尔树版本也是V1。
如图9所示,删除数据节点4时,不是直接删除数据节点4,而是创建一个V2版本的数据节点4,并标识该节点为“删除”。往上删除梅克尔树哈希节点4,同样是创建一个V2版本的哈希节点4,并标识该节点为“删除”。往上更新哈希节点3-4、哈希节点1-4时,不直接更新其哈希值,而是创新一个V2版本的梅克尔树节点。V2版本的梅克尔树节点指向子节点的最新版本,如V2版本的哈希节点3-4的子节点,分别是V1版本的哈希节点3和V2版本的哈希节点4(标记为删除)。更新期间,梅克尔树版本仍然是V1。
如图10所示,数据节点4、哈希节点4、哈希节点3-4以及哈希节点1-4逻辑删除完成,更新梅克尔树版本为V2,V1添加到梅克尔树版本队列的末尾。
如图11所示,在一些实施例中,在所述梅克尔树更新请求中包括至少两个数据节点的信息时,所述根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点并构建所述新版本的数据节点的各级新版本祖先节点包括:
S1023、根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点;
S1024、根据各所述新版本的数据节点,按照层级顺序在所述梅克尔树中依次构建所述数据节点的各级新版本祖先节点。
具体来讲,对于批量更新,即一次新增、删除和/或更新多个梅克尔树节点的场景,可先为所有待更新的数据节点建立新版本节点,然后再按照层级顺序依次往上新建哈希节点,避免待更新的数据节点位于同一子树时,重复计算哈希。
如图12所示,在一些实施例中,所述方法还包括:
S201、根据梅克尔树读取请求,获取所述梅克尔树当前的版本号;
S202、根据所述梅克尔树当前的版本号,读取所述梅克尔树的节点信息。
具体来讲,在梅克尔树更新过程中,梅克尔树的当前版本号维持不变,此时若有读请求进入,则获取当前梅克尔树版本号,遍历梅克尔树时,只读取节点版本号与当前梅克尔树版本号相匹配的节点的信息;在梅克尔树完成更新后,升级当前的版本号,则此后的读请求会获取新的版本号,读到新的数据。
在一些实施例中,在根据梅克尔树读取请求,获取所述梅克尔树当前的版本号之后,在根据所述梅克尔树当前的版本号,读取所述梅克尔树的节点信息之前,所述方法还包括:将所述梅克尔树当前的版本号的引用计数值加1;
在根据所述梅克尔树当前的版本号,读取所述梅克尔树的节点信息之后,所述方法还包括:将所述梅克尔树当前的版本号的引用计数值减1。
具体来讲,发起读请求时,版本号的引用计数加1,读请求完成后,版本号的引用计数需减1。举例而言,如图13所示,发起读取请求时,获取梅克尔树版本当前的版本号V1,然后版本V1的引用计数加1。读取请求完成后,版本号V1的引用计数需减1。
如图14所示,在一些实施例中,所述方法还包括:
S203、获取所述梅克尔树的历史版本号中引用计数值为0的历史版本号;
S204、对于所述梅克尔树中具有两种及两种以上版本的节点,删除节点版本号小于以及等于所述历史版本号的节点。
具体来讲,多个版本的存在会占用过多存储空间。故可在后台异步扫描版本号的引用计数,若引用计数为0,则说明该版本已没有读请求使用,此时可遍历梅克尔树,把所有有两个或两个以上版本的节点,且节点版本号小于以及等于引用计数值为0的版本号的节点删除。
举例而言,从梅克尔树的历史版本号队列开头取到版本号,若版本号引用计数为0,则遍历梅克尔树(深度优先或者广度优先均可),对存在两个或两个以上版本的节点,把版本号小于以及等于引用计数为0的版本号的节点删除。
以图15所示的梅克尔树为例,该梅克尔树存在两个版本的节点为数据节点4、哈希节点4、哈希节点3-4,、哈希节点1-4,版本为V1和V2。历史梅克尔树版本V1已无读请求引用,因此可以把上述V1版本的节点物理删除。
如图16所示,在一些实施例中,所述根据所述梅克尔树当前的版本号,读取所述梅克尔树的节点信息包括:
S2021、对于所述梅克尔树中只有一个版本的节点,读取该节点的节点信息;
S2022、对于所述梅克尔树中具有两个及两个以上版本的节点,根据所述梅克尔树当前的版本号,读取节点版本号小于或等于所述梅克尔树当前的版本号且节点版本号最大的节点的信息。
具体来讲,在梅克尔树存在多个版本的节点时,对于所述梅克尔树中只有一个版本的节点,直接读取该节点的节点信息即可,而对于所述梅克尔树中具有两个及两个以上版本的节点,则只允许读取请求发起者读取在该读取请求发起之前已经存在的最新的数据。
图17是本申请一实施例提供的梅克尔树的更新装置的结构示意图,如图17所示,本申请实施例提供的梅克尔树的更新装置,包括:
获取模块31,用于获取梅克尔树更新请求,其中,所述梅克尔树更新请求中包括请求删除的数据节点信息、请求新增的数据节点信息和/或请求更新的数据节点信息;
构建模块32,根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点并构建所述新版本的数据节点的各级新版本祖先节点;
更新模块33,用于更新所述梅克尔树的版本号,得到更新后的梅克尔树。
本申请实施例提供的梅克尔树的更新装置,通过获取梅克尔树更新请求,其中,所述梅克尔树更新请求中包括请求删除的数据节点信息、请求新增的数据节点信息和/或请求更新的数据节点信息;根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点并构建所述新版本的数据节点的各级新版本祖先节点;更新所述梅克尔树的版本号,得到更新后的梅克尔树。这样,新增、删除和/或更新梅克尔树各数据节点时,并不直接操作现有节点,而是创建新版本的节点;在梅克尔树更新过程中,梅克尔树的版本号维持不变,此时若有读请求进入,则可根据当前梅克尔树版本号读取梅克尔树相应节点的信息。至此,实现了在梅克尔树更新期间,同时允许读取节点信息,解决了梅克尔树更新导致读操作长时间阻塞的问题,提高了读写并发度,进而提高了区块链数据读写性能。
在一些实施例中,在所述梅克尔树更新请求中包括请求删除的数据节点信息时,所述构建模块具体用于:
根据请求删除的数据节点信息,在所述梅克尔树中构建新版本的所述数据节点并为该新版本的数据节点添加删除标识;
在所述梅克尔树中构建所述新版本的数据节点的各级新版本祖先节点并为各级新版本祖先节点添加删除标识。
在一些实施例中,在所述梅克尔树更新请求中包括至少两个数据节点的信息时,所述构建模块具体用于:
根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点;
根据各所述新版本的数据节点,按照层级顺序在所述梅克尔树中依次构建所述数据节点的各级新版本祖先节点。
在一些实施例中,所述获取模块还用于:根据梅克尔树读取请求,获取所述梅克尔树当前的版本号;
所述装置还包括:读取模块,用于根据所述梅克尔树当前的版本号,读取所述梅克尔树的节点信息。
在一些实施例中,所述装置还包括计数模块,所述计数模块用于:
在根据梅克尔树读取请求,获取所述梅克尔树当前的版本号之后,在根据所述梅克尔树当前的版本号,读取所述梅克尔树的节点信息之前,将所述梅克尔树当前的版本号的引用计数值加1;
在根据所述梅克尔树当前的版本号,读取所述梅克尔树的节点信息之后,将所述梅克尔树当前的版本号的引用计数值减1。
在一些实施例中,所述获取模块还用于:获取所述梅克尔树的历史版本号中引用计数值为0的历史版本号;
所述装置还包括:删除模块,用于对于所述梅克尔树中具有两种及两种以上版本的节点,删除节点版本号小于以及等于所述历史版本号的节点。
在一些实施例中,所述读取模块具体用于:
对于所述梅克尔树中只有一个版本的节点,读取该节点的节点信息;
对于所述梅克尔树中具有两个及两个以上版本的节点,根据所述梅克尔树当前的版本号,读取节点版本号小于或等于所述梅克尔树当前的版本号且节点版本号最大的节点的信息。
本申请实施例提供的装置的实施例具体可以用于执行上述各方法实施例的处理流程,其功能在此不再赘述,可以参照上述方法实施例的详细描述。
需要说明的是,本申请实施例提供的梅克尔树的更新方法及装置可用于金融领域,也可用于除金融领域之外的任意技术领域,本申请实施例对梅克尔树的更新方法及装置的应用领域不做限定。
图18为本申请一实施例提供的电子设备的实体结构示意图,如图18所示,该电子设备可以包括:处理器(processor)401、通信接口(Communications Interface)402、存储器(memory)403和通信总线404,其中,处理器401,通信接口402,存储器403通过通信总线404完成相互间的通信。处理器401可以调用存储器403中的逻辑指令,以执行上述任一实施例所述的方法,例如包括:获取梅克尔树更新请求,其中,所述梅克尔树更新请求中包括请求删除的数据节点信息、请求新增的数据节点信息和/或请求更新的数据节点信息;根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点并构建所述新版本的数据节点的各级新版本祖先节点;更新所述梅克尔树的版本号,得到更新后的梅克尔树。
此外,上述的存储器403中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如包括:获取梅克尔树更新请求,其中,所述梅克尔树更新请求中包括请求删除的数据节点信息、请求新增的数据节点信息和/或请求更新的数据节点信息;根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点并构建所述新版本的数据节点的各级新版本祖先节点;更新所述梅克尔树的版本号,得到更新后的梅克尔树。
本实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储计算机程序,所述计算机程序使所述计算机执行上述各方法实施例所提供的方法,例如包括:获取梅克尔树更新请求,其中,所述梅克尔树更新请求中包括请求删除的数据节点信息、请求新增的数据节点信息和/或请求更新的数据节点信息;根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点并构建所述新版本的数据节点的各级新版本祖先节点;更新所述梅克尔树的版本号,得到更新后的梅克尔树。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在本说明书的描述中,参考术语“一个实施例”、“一个具体实施例”、“一些实施例”、“例如”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
以上所述的具体实施例,对本申请的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本申请的具体实施例而已,并不用于限定本申请的保护范围,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (10)
1.一种梅克尔树的更新方法,其特征在于,包括:
获取梅克尔树更新请求,其中,所述梅克尔树更新请求中包括请求删除的数据节点信息、请求新增的数据节点信息和/或请求更新的数据节点信息;
根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点并构建所述新版本的数据节点的各级新版本祖先节点;
更新所述梅克尔树的版本号,得到更新后的梅克尔树。
2.根据权利要求1所述的方法,其特征在于,在所述梅克尔树更新请求中包括请求删除的数据节点信息时,所述根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点并构建所述新版本的数据节点的各级新版本祖先节点包括:
根据请求删除的数据节点信息,在所述梅克尔树中构建新版本的所述数据节点并为该新版本的数据节点添加删除标识;
在所述梅克尔树中构建所述新版本的数据节点的各级新版本祖先节点并为各级新版本祖先节点添加删除标识。
3.根据权利要求1所述的方法,其特征在于,在所述梅克尔树更新请求中包括至少两个数据节点的信息时,所述根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点并构建所述新版本的数据节点的各级新版本祖先节点包括:
根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点;
根据各所述新版本的数据节点,按照层级顺序在所述梅克尔树中依次构建所述数据节点的各级新版本祖先节点。
4.根据权利要求1至3任一项所述的方法,其特征在于,所述方法还包括:
根据梅克尔树读取请求,获取所述梅克尔树当前的版本号;
根据所述梅克尔树当前的版本号,读取所述梅克尔树的节点信息。
5.根据权利要求4所述的方法,其特征在于,在根据梅克尔树读取请求,获取所述梅克尔树当前的版本号之后,在根据所述梅克尔树当前的版本号,读取所述梅克尔树的节点信息之前,所述方法还包括:
将所述梅克尔树当前的版本号的引用计数值加1;
在根据所述梅克尔树当前的版本号,读取所述梅克尔树的节点信息之后,所述方法还包括:
将所述梅克尔树当前的版本号的引用计数值减1。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
获取所述梅克尔树的历史版本号中引用计数值为0的历史版本号;
对于所述梅克尔树中具有两种及两种以上版本的节点,删除节点版本号小于以及等于所述历史版本号的节点。
7.根据权利要求6所述的方法,其特征在于,所述根据所述梅克尔树当前的版本号,读取所述梅克尔树的节点信息包括:
对于所述梅克尔树中只有一个版本的节点,读取该节点的节点信息;
对于所述梅克尔树中具有两个及两个以上版本的节点,根据所述梅克尔树当前的版本号,读取节点版本号小于或等于所述梅克尔树当前的版本号且节点版本号最大的节点的信息。
8.一种梅克尔树的更新装置,其特征在于,包括:
获取模块,用于获取梅克尔树更新请求,其中,所述梅克尔树更新请求中包括请求删除的数据节点信息、请求新增的数据节点信息和/或请求更新的数据节点信息;
构建模块,根据所述梅克尔树更新请求,在所述梅克尔树中构建新版本的所述数据节点并构建所述新版本的数据节点的各级新版本祖先节点;
更新模块,用于更新所述梅克尔树的版本号,得到更新后的梅克尔树。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211672989.1A CN116009910A (zh) | 2022-12-26 | 2022-12-26 | 梅克尔树的更新方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211672989.1A CN116009910A (zh) | 2022-12-26 | 2022-12-26 | 梅克尔树的更新方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116009910A true CN116009910A (zh) | 2023-04-25 |
Family
ID=86031727
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211672989.1A Pending CN116009910A (zh) | 2022-12-26 | 2022-12-26 | 梅克尔树的更新方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116009910A (zh) |
-
2022
- 2022-12-26 CN CN202211672989.1A patent/CN116009910A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110275884B (zh) | 数据存储方法及节点 | |
CN111046034B (zh) | 管理内存数据及在内存中维护数据的方法和系统 | |
CN107832062B (zh) | 一种程序更新方法及终端设备 | |
CN111249736B (zh) | 代码处理方法及装置 | |
CN110445828B (zh) | 一种基于Redis的数据分布式处理方法及其相关设备 | |
CN112286939A (zh) | 块链式账本中全局状态的哈希的生成方法、装置及设备 | |
CN110275889B (zh) | 一种适用于机器学习的特征处理方法及装置 | |
CN111737002B (zh) | 一种链式存储请求的处理方法、装置、设备及可读介质 | |
CN107239467B (zh) | 基于数据库的数据处理方法及装置 | |
CN112579462A (zh) | 测试用例获取方法、系统、设备及计算机可读存储介质 | |
CN114490060A (zh) | 内存分配方法、装置、计算机设备和计算机可读存储介质 | |
CN112000670B (zh) | 一种多线程程序数据统一管理方法、系统及电子设备 | |
CN113407343A (zh) | 一种基于资源分配的业务处理方法、装置及设备 | |
CN115292023B (zh) | 定时任务处理方法及装置 | |
US20080306948A1 (en) | String and binary data sorting | |
CN116009910A (zh) | 梅克尔树的更新方法及装置 | |
CN113986942B (zh) | 一种基于人机对话的消息队列管理方法及装置 | |
CN110990640B (zh) | 一种数据判定方法、装置、设备及计算机可读存储介质 | |
CN116361153A (zh) | 固件代码的测试方法、装置、电子设备、存储介质 | |
EP4113313A1 (en) | Control method, information processing device, and control program | |
CN111475264B (zh) | 一种用户态无锁转发的实现方法及装置 | |
CN112068948B (zh) | 数据散列方法、可读存储介质和电子设备 | |
CN112965939A (zh) | 一种文件合并方法、装置和设备 | |
CN114443629A (zh) | 一种集群布隆过滤器数据去重方法、终端设备及存储介质 | |
CN113312412A (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 |