CN117056342B - 一种基于区块链的数据处理方法及相关设备 - Google Patents
一种基于区块链的数据处理方法及相关设备 Download PDFInfo
- Publication number
- CN117056342B CN117056342B CN202311306070.5A CN202311306070A CN117056342B CN 117056342 B CN117056342 B CN 117056342B CN 202311306070 A CN202311306070 A CN 202311306070A CN 117056342 B CN117056342 B CN 117056342B
- Authority
- CN
- China
- Prior art keywords
- tree
- index
- node
- target
- 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.)
- Active
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 25
- 238000000034 method Methods 0.000 claims abstract description 32
- 238000010276 construction Methods 0.000 claims description 110
- 238000013500 data storage Methods 0.000 claims description 52
- 238000007906 compression Methods 0.000 claims description 35
- 230000006835 compression Effects 0.000 claims description 35
- 238000004590 computer program Methods 0.000 claims description 22
- 238000004422 calculation algorithm Methods 0.000 claims description 12
- 238000010586 diagram Methods 0.000 description 18
- 238000004364 calculation method Methods 0.000 description 8
- 230000008859 change Effects 0.000 description 6
- 230000008569 process Effects 0.000 description 6
- 238000007726 management method Methods 0.000 description 5
- 230000005540 biological transmission Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000013144 data compression Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
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/2246—Trees, e.g. B+trees
-
- 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/2255—Hash tables
-
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
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)
- Software Systems (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例提供了一种基于区块链的数据处理方法及相关设备,其中,区块链包括第一区块和第二区块,第一区块中维护有第一默克尔前缀树,第二区块中维护有第二默克尔前缀树;第一默克尔前缀树和第二默克尔前缀树均包含目标树节点;该方法包括:获取目标树节点的第一索引;第一索引是根据目标树节点在第一默克尔前缀树中的关联信息构建得到的;获取目标树节点的第二索引,第二索引根据目标树节点在第二默克尔前缀树中的关联信息构建得到;若第一索引和第二索引之间的相似度满足相似条件,则将第一索引所指示的第一数据与第二索引所指示的第二数据存储至数据库的同一数据块中。通过本申请实施例可以对区块中的数据进行有效存储管理。
Description
技术领域
本申请涉及区块链技术领域,具体涉及一种基于区块链的数据处理方法及相关设备,尤其涉及一种基于区块链的数据处理方法、一种基于区块链的数据处理装置、一种节点设备、一种计算机可读存储介质及一种计算机程序产品。
背景技术
区块链(Blockchain)是一种分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式,区块链可以按照时间顺序将区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。
目前,在存储区块中的数据时,以键值对(Key-Value,KV)的形式,组织成默克尔树在数据库中存储,其中,键值对的键为树节点的哈希值,键值对中的值为树节点所存储的数据。随着时间推移,区块会不断增加,所存储的区块数据也会不断上升,采用上述的存储模式,无法对区块中的数据进行有效存储管理。
发明内容
本申请实施例提供一种基于区块链的数据处理方法及相关设备,可以对区块中的数据进行有效存储管理。
一方面,本申请实施例提供了一种基于区块链的数据处理方法,该区块链包括第一区块和第二区块,第一区块中维护有第一默克尔前缀树,第二区块中维护有第二默克尔前缀树;第一默克尔前缀树和第二默克尔前缀树均包含目标树节点,但目标树节点在第一默克尔前缀树中的版本和在第二默克尔前缀树中的版本不同;该方法包括:
获取目标树节点的第一索引;第一索引是根据目标树节点在第一默克尔前缀树中的关联信息构建得到的;第一索引用于指示第一默克尔前缀树中的目标树节点中所存储的第一数据;
获取目标树节点的第二索引,第二索引根据目标树节点在第二默克尔前缀树中的关联信息构建得到;第二索引用于指示第二默克尔前缀树中的目标树节点中所存储的第二数据;
获取第一索引和第二索引之间的相似度;
若相似度满足相似条件,则将第一索引所指示的第一数据与第二索引所指示的第二数据存储至数据库的同一数据块中。
一方面,本申请实施例提供了一种基于区块链的数据处理装置,该区块链包括第一区块和第二区块,第一区块中维护有第一默克尔前缀树,第二区块中维护有第二默克尔前缀树;第一默克尔前缀树和第二默克尔前缀树均包含目标树节点,但目标树节点在第一默克尔前缀树中的版本和在第二默克尔前缀树中的版本不同,该装置包括:
处理单元,用于获取目标树节点的第一索引;第一索引是根据目标树节点在第一默克尔前缀树中的关联信息构建得到的;第一索引用于指示第一默克尔前缀树中的目标树节点中所存储的第一数据;
处理单元,还用于获取目标树节点的第二索引,第二索引根据目标树节点在第二默克尔前缀树中的关联信息构建得到;第二索引用于指示第二默克尔前缀树中的目标树节点中所存储的第二数据;
处理单元,还用于获取第一索引和第二索引之间的相似度;
存储单元,用于若相似度满足相似条件,则将第一索引所指示的第一数据与第二索引所指示的第二数据存储至数据库的同一数据块中。
一方面,本申请实施例提供了一种节点设备,该节点设备包括:
处理器,适用于执行计算机程序;
计算机可读存储介质,计算机可读存储介质中存储有计算机程序,计算机程序被处理器执行时,实现如上述基于区块链的数据处理方法。
一方面,本申请实施例提供一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序被处理器加载并执行如上述基于区块链的数据处理方法。
一方面,本申请实施例提供了一种计算机程序产品,该计算机程序产品包括计算机程序或计算机指令,该计算机程序或计算机指令被处理器执行时实现上述基于区块链的数据处理方法。
在本申请实施例中,区块链包括第一区块和第二区块,第一区块中维护有第一默克尔前缀(MerklePatriciaTrie,MPT)树,第二区块中维护有第二MPT树;第一MPT树和第二MPT树均包含目标树节点,但目标树节点在第一MPT树中的版本和在第二MPT树中的版本不同;获取目标树节点的第一索引,第一索引是根据目标树节点在第一MPT树中的关联信息构建得到的;第一索引用于指示第一MPT树中的目标树节点中所存储的第一数据,获取目标树节点的第二索引,第二索引根据目标树节点在第二MPT树中的关联信息构建得到;第二索引用于指示第二MPT树中的目标树节点中所存储的第二数据;可见,本申请实施例基于目标树节点在不同MPT树的关联信息,为不同版本的目标树节点构建不同索引,这为后续将目标树节点在不同MPT树中所存储的数据存储至同一数据块中提供了依据。获取第一索引和第二索引之间的相似度,若相似度满足相似条件,则将第一索引所指示的第一数据与第二索引所指示的第二数据存储至数据库的同一数据块中。在本申请实施例中充分利用第一索引和第二索引之间的相似度,能够将第一数据和第二数据存储至数据库的同一数据块中,对不同版本的树节点所存储的数据进行有效管理,从而实现对区块中的数据的有效存储管理。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请一个示例性实施例提供的一种区块链网络的架构图;
图2为本申请一个示例性实施例提供的一种区块链的结构示意图;
图3为本申请一个示例性实施例提供的一种状态树的示意图;
图4为本申请一个示例性实施例提供一种存储树的示意图;
图5a为本申请一个示例性实施例提供的一种Sstable文件的示意图;
图5b为本申请一个示例性实施例提供的一种数据块结构的示意图;
图6为本申请一个示例性实施例提供的一种基于区块链的数据处理方法的流程示意图;
图7为本申请一个示例性实施例提供的一种目标树节点和下一树节点在状态树中的位置的示意图;
图8为本申请另一个示例性实施例提供的一种基于区块链的数据处理方法的流程示意图;
图9为本申请又一个示例性实施例提供的一种基于区块链的数据处理方法的流程示意图;
图10为本申请一个示例性实施例提供的一种基于区块链的数据处理装置的结构示意图;
图11为本申请一个示例性实施例提供的一种节点设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
一、区块链网络和区块链:
本申请实施例涉及区块链网络,请参见图1,为本申请一个示例性实施例提供的一种区块链网络的架构图。在图1中,区块链网络包括多个节点设备101,每个节点设备 101在进行正常工作可以接收到输入信息(如交易数据),并基于接收到的输入信息维护该区块链网络内的共享数据。为了保证数据共享,区块链网络内的信息互通,每个节点设备之间可以存在信息连接,节点设备之间可以通过上述信息连接进行信息传输。例如,当区块链网络中的任意节点设备接收到输入信息时,区块链网络中的其他节点设备便根据共识算法获取该输入信息,将该输入信息作为共享数据中的数据进行存储,使得区块链网络中全部节点设备上存储的数据均一致。
节点设备 101 可以是服务器或者终端设备。上述终端设备可以是智能手机、平板电脑、笔记本电脑、台式电脑、车载终端等等,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式***,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(Content Delivery Network,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器,等等。
每个节点设备101均维护相同的一条或多条区块链,示意性的,如图1中,每个节点设备101均维护相同的一条区块链11。所谓的区块链是一种分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链11可以包括多个区块,区块链可以按照时间顺序将多个区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。参见图2,为本申请一个示例性实施例提供的一种区块链的结构示意图。区块链由多个区块组成,且每个区块均维护有多棵树,该多棵树可包括但不限于状态树、存储树等等。示意性的,如图2中,区块链至少包括第一区块和第二区块,且第一区块和第二区块均维护有状态树和存储树。任意区块可以包括区块头和区块主体。区块主体包括输入的信息,区块头中可以包括但不限于:父区块的哈希字段(previous_Hash)、状态根字段(State_Root)等等。父区块的哈希字段用于存储上一个区块的哈希值,通过父区块的哈希字段,可以使得当前区块的区块头中的previous_Hash指向上一区块(即父区块),通过这种方式,区块链上通过区块头实现了下一区块对上一区块的锁定。其中,状态根字段用于存储状态树的根节点的哈希。
状态树可由账户构成,此处的账户可以包括合约账户和外部账户,合约账户是指部署智能合约时自动生成的账户。外部账户是指是由对象(如用户)实际控制且能够部署智能合约的账户。一个区块维护有一棵状态树,区块所维护的状态树记录了该区块内所有账户的地址和各账户对应的账户信息。如图3所示,为本申请一个示例性实施例提供的一种状态树的示意图。状态树包括多个树节点,状态树的任一树节点可以包括以下一种:根节点、中间节点和叶子节点。
在图3中,各账户的地址分布于从状态树的根节点到叶子节点,该状态树中的一个叶子节点存储一个账户的账户信息;也就是说,从根节点开始遍历到叶子节点即可确定某个账户的账户信息。示意性的,账户1的地址分布于从根节点开始到叶子节点31,叶子节点31用于存储账户1的账户信息;账户2的地址分布于从根节点开始到叶子节点32,叶子节点32用于存储账户2的账户信息;其中,当状态树中的叶子节点用于存储合约账户的账户信息时,如图3中,叶子节点32用于存储合约账户的账户信息,该合约账户的账户信息包括随机树(Nonce)、余额(Balance)、对应合约的哈希(CodeHash)和存储根Storage_Root。其中,存储根Storage_Root用于存储该合约账户对应的存储树的根节点的哈希。
存储树用于存储某个合约账户中的所有账户状态信息,也就是说,一个合约账户对应一棵存储树,账户状态信息包括但不限于:账户状态变量,以及账户状态变量的变量值。如图4所示,为本申请一个示例性实施例提供一种存储树的示意图。存储树同样包括多个树节点,存储树中的任一树节点可以包括以下至少一种:根节点、中间节点和叶子节点。该存储树中的一个叶子节点存储一个账户状态信息,该账户状态信息在合约账户中的存储槽(存储单元)的位置分布于从根节点到叶子节点,通过从根节点开始遍历到叶子节点即可确定合约账户中的相应账户状态信息。
需要说明的是,状态树中某个树节点到根节点之间所经过的路线可确定为该树节点在状态树中的路径,存储树中的某个树节点到根节点之间所经过的路线可确定为该树节点在存储树中的路径。
应当理解的是,当合约账户中的账户状态信息发生变化时,区块链中就会产生一个最新区块,每当区块链中产生一个最新区块,并且该最新区块中的交易执行完毕后,导致区块链中的账户状态信息发生了变化,都需要基于区块链中所有账户最新的账户状态信息,重新构建一棵状态树和存储树,但每次发布新区块,状态树和存储树中可能部分树节点所存储的数据会发生改变,但改变并非在原来的状态树中的相应树节点进行修改,而是新建一些分支,保留原本树节点所存储的数据。当仅仅有新发生改变的树节点才需要修改,其他未修改树节点直接指向前一个区块中的对应树节点。如图2中,设在第一区块包含合约账户1,该合约账户1中的账户状态变量的变量值33,如果第二区块中某个交易的合约被调用,将合约账户1中的账户状态变量的变量值由33改为35,那么账户状态变量的变量值35所在的树节点的哈希就会发生变化,从该树节点到存储树的根节点整个路径所涉及到的树节点内容和哈希也会随着变化,即合约账户1中的Storage_Root也会发生变化,进而影响到状态根的变化,但其他树节点(即该树节点到存储树的根节点整个路径之外的树节点)所存储的数据未发生改变,直接指向前一个区块中对应的树节点即可,最终第二区块维护一个新的状态树,新的状态树维护了所有账号下的最新账户状态信息。
二、MPT(MerklePatriciaTrie,默克尔前缀)树:
MPT树是结合了Merkle Tree(默克尔树)和Patricia Tree(压缩前缀树,一种更节省空间的Trie树,字典树)的一种数据结构,MPT可以用于存储任意长度的key-value键值对数据。其中,Merkle Tree是指对每个数据(如交易)都计算一个Hash值,然后两两连接再次计算Hash,一直到最顶层的Merkle根;Trie树又称前缀树或字典树,是一种有序多叉树,用于存储和检索键值对(key-value),key可以映射到有限字符集组成字符串,Trie树中的树节点可以记录字符串中的一个字符,并指向下一个字符,从而构成一个完整的key,这使得树节点之间能够共享相同的前缀。Patricia Tree是指为Trie树的一种改进,在PatriciaTree中,当某个树节点只有一个子节点时,则将子节点和父节点进行合并,这使得压缩前缀树可以更高效的用于存储具备较长相同前缀的数据。
MPT树的树节点可以包括以下一种:拓展节点、分支节点、叶子节点。在本申请实施例中,上述状态树和存储树均可以为MPT树,示意性的,上述提及的状态树(或存储树)的根节点可以包括拓展节点;状态树(或存储树)的中间节点可以包括拓展节点,或者,状态树(或存储树)的中间节点可以包括分支节点,本申请对此不作限定。
拓展节点可以存储最多16个子节点,每个子节点可以对应一个账户。拓展节点所存储的数据(value)可以包括:在MPT树中的拓展节点的下一树节点的哈希值,下一树节点的哈希值可用next node Hash表示,此外,在本申请实施例中,拓展节点所存储的数据还可包括下一树节点的高度值,下一树节点的高度值可用commitHeight表示。
在区块链协议中,无论是账户的地址或者树节点的哈希均为16进制串,因此,分支节点是一个长度为17的列表,前16个元素对应着key中16个可能的十六进制;在本申请实施例中,分支节点所存储的数据(value)可以包括:在MPT树中的分支节点的下一树节点的哈希值,此外,在本申请实施例中,分支节点所存储的数据还可包括下一树节点的高度值。
叶子节点用于存储实际的数据,在本申请实施例中,状态树的叶子节点用于存储合约账户的账户信息和元数据,元数据包括存储树的树名和存储树的根节点的高度值,其中,元数据不参与树节点的哈希计算,存储树的树名可用storge ID表示,存储树的根节点的高度值可用commitHeight表示。存储树的叶子节点用于存储合约账户的账户状态信息。
在本申请实施例中,可基于树节点在状态树或存储树中的关联信息为树节点创建索引(key),并按照key-value形式将树节点在状态树或存储树中所存储的数据(即value)存储至数据库,其中,树节点的key为索引,value为树节点在状态树或存储树中所存储的数据。
三、数据库:
本申请实施例提供的数据库可以为kv开源数据库;示意性的,数据库可以包括但不限于levelDB;数据库可以包括一个或多个Sstable(有序字符串表,Sorted StringTable)文件,Sstable文件是用来存储一系列有序的键值对的,一个Sstable文件通常会按照固定大小进行块划分,得到多个数据块,且每个数据块的大小固定。如图5a所示,为本申请一个示例性实施例提供的一种Sstable文件的示意图。在图5a中,一个Sstable文件按照4kiB进行块划分,得到n个数据块(即Data Block1、Data Block2… Data Block n),每个数据块的大小均为4kiB。
如图5b所示,为本申请一个示例性实施例提供的一种数据块的结构示意图。数据块可用于存储数据,在本申请实施例中,数据块可按照key-value形式,存储树节点在不同状态树或存储树中所存储的数据,在一种实现中,采用压缩算法(Snappy算法)对每个数据块进行压缩。当数据块中的数据重叠度越多时,压缩率越高。此外,每个数据块还可存储格外的两个辅助字段,分别为压缩类型(compression Type)和校验码(CRC)。压缩类型可以用于指示该数据块中是否进行了数据压缩,CRC用于校验数据块中的数据和压缩类型。
从上述描述可知,区块链包括多个区块,每个区块均维护有MPT树,此处的MPT树为状态树或存储树。在更新该MPT树中的某个树节点时,大概率只会更新与该树节点相关联的其他树节点所存储的数据,因此,针对不同区块所维护的MPT树中的同一树节点而言,不同版本的树节点中所存储的数据具有较大的数据重叠,例如,对于 MPT 树的拓展节点,存储了 16 个子节点的哈希,每次更新拓展节点时,大概率只会更新少数子节点的哈希(如一个子节点的哈希),也就是说不同版本的拓展节点中所存储的数据(如不同版本的拓展节点所存储的16个子节点的哈希)具有较大的数据重叠。
基于此,为了能够将不同版本的树节点中所存储的数据存储至同一数据块中,在本申请实施例中,提供了一种基于区块链的数据处理方案,该数据处理方案以区块链包括的第一区块和第二区块为例,第一区块中维护有MPT树,第二区块中维护有第二MPT树;第一MPT树和第二MPT树均包含目标树节点,但目标树节点在第一MPT树中的版本和在第二MPT树中的版本不同,获取目标树节点的第一索引,第一索引是根据目标树节点在第一MPT树中的关联信息构建得到的;第一索引用于指示第一MPT树中的目标树节点中所存储的第一数据,获取目标树节点的第二索引,第二索引根据目标树节点在第二MPT树中的关联信息构建得到;第二索引用于指示所述第二MPT树中的目标树节点中所存储的第二数据;可见,本申请实施例基于目标树节点在不同MPT树的关联信息为不同版本的目标树节点构建不同索引,这为后续将目标树节点在不同MPT树中所存储的数据存储至同一数据块中提供了依据。获取第一索引和第二索引之间的相似度,若相似度满足相似条件,则将第一索引所指示的第一数据与第二索引所指示的第二数据存储至数据库的同一数据块中。在本申请实施例中充分利用第一索引和第二索引之间的相似度,能够将第一数据和第二数据存储至数据库的同一数据块中,能够对不同版本的树节点所存储的数据进行有效管理,从而实现对区块中的数据的有效存储管理。
接下来对本申请实施例提供的基于区块链的数据处理方法进行相关阐述。区块链上包括多个区块,在此实施例中,以区块链包括第一区块和第二区块为例进行阐述。在一种实现中,第一区块和第二区块可以为区块链上连续的两个区块。在另一种实现中,区块链上的区块按照预设的索引构建因子被划分为多个区间,示意性的,区块链包含100个区块(如区块0-区块99),预设的索引构建因子的取值为10,区块链上的区块按照索引构建因子10被划分为10个区间,即区块0~区块9被划分为区间1,区块10~区块19被划分为区间2,以此类推,区块90~区块99被划分为区间10。第一区块和第二区块可以是指位于相同区间内的任意两个区块。
应当理解的是,预设的索引构建因子的取值由区块链的数据存储需求决定,该数据存储需求包括以下至少一种:数据存储时的压缩率和数据存储时的处理效率,数据存储时的处理效率可以是指:数据存储时的数据写入数据库的效率。当数据存储需求包括数据存储时的压缩率时,数据存储时的压缩率越高,则预设的索引构建因子的取值就会越大,但数据存储时的处理效率较低。当数据存储需求包括数据存储时的处理效率时,数据存储时的处理效率越高,则预设的索引构建因子取值就会越小,但数据存储时的压缩率越低。
在实际应用过程中,可以根据数据存储需求,设置合适的索引构建因子,如若数据存储需求包括数据处理效率,且需要数据存储时的处理效率较高,则可以将预设的索引构建因子的取值设置为较小(例如设置为1);再如若数据存储需求包括数据存储时的压缩率,且需要数据存储时的压缩率较高,则可以将预设的索引构建因子的取值设置为较大(例如设置为100、1000等)。而当数据存储需求包括数据存储时的压缩率和数据存储时的处理效率时,可以在平衡数据存储时的处理效率和数据存储时的压缩率的前提下,对预设的索引构建因子进行合适的取值。
请参见图6,为本申请一个示例性实施例提供的一种基于区块链的数据处理方法的流程示意图。该基于区块链的数据处理方法可由上述区块链网络中的节点设备执行。第一区块中维护有第一MPT树,第二区块中维护有第二MPT树;第一MPT树和第二MPT树均包含目标树节点,但目标树节点在第一MPT树中的版本和在第二MPT树中的版本不同。本申请实施例基于区块链的数据处理方法包括以下步骤S601-S604:
S601、获取目标树节点的第一索引;第一索引是根据目标树节点在第一MPT树中的关联信息构建得到的;第一索引用于指示第一MPT树中的目标树节点中所存储的第一数据。
S602、获取目标树节点的第二索引,第二索引根据目标树节点在第二MPT树中的关联信息构建得到;第二索引用于指示第二MPT树中的目标树节点中所存储的第二数据。
其中,目标树节点的索引(即第一索引和第二索引)可以按照索引构建规则对目标树节点在相应MPT树中的关联信息进行构建得到的。关联信息可以包括区块高度、目标树节点在相应MPT树中的路径以及MPT树的树名;可基于区块高度、目标树节点在相应MPT树中的路径及MPT树的树名,按照索引构建规则构建得到的目标树节点的索引。如何按照索引构建规则对目标树节点在相应MPT树中的关联信息进行构建得到的目标树节点的索引在后续实施例中进行阐述,在此不再赘述。
应当理解的是,本申请实施例所涉及到的第一MPT树和第二MPT树为同一类型的MPT树,示意性的,第一MPT树和第二MPT树可以均为存储树,或者,第一MPT树和第二MPT树均为状态树。
(1)当第一MPT树和第二MPT树均为状态树,目标树节点可以包括以下之一:状态树中的拓展节点、分支节点和叶子节点。其中:
当目标树节点包括拓展节点时,目标树节点中所存储的第一数据或第二数据包括目标树节点的下一树节点的哈希值及下一树节点的高度值。具体地,目标树节点中所存储的第一数据包括在第一MPT树中的目标树节点的下一树节点的哈希值及下一树节点的高度值;目标树节点中所存储的第二数据包括在第二MPT树中的目标树节点的下一树节点的哈希值及下一树节点的高度值。
当目标树节点包括分支节点时,目标树节点中存储的第一数据或第二数据包括目标树节点的下一树节点的哈希值以及下一树节点的高度值。具体地,目标树节点中所存储的第一数据包括在第一MPT树中的目标树节点的下一树节点的哈希值,目标树节点中所存储的第二数据包括在第二MPT树中的目标树节点的下一树节点的哈希值及下一树节点的高度值。
在一种实现中,下一树节点的高度值可以等于下一树节点所在的区块的区块高度。如图7所示,为本申请一个示例性实施例提供的一种目标树节点和下一树节点在状态树中的位置的示意图。当区块1所维护的状态树中的目标树节点11新增一个子节点,目标树节点11所存储的commitHeight=1;当区块2所维护的状态树中的目标树节点12新增一个子节点,目标树节点12所存储的commitHeight=2。
当目标树节点包括叶子节点时,目标树节点中存储的第一数据或第二数据包括:账户信息和元数据,元数据包括账户信息所在合约账户对应的存储树的树名和存储树的根节点的高度值。具体的,目标树节点中存储的第一数据包括在第一MPT树中的目标树节点对应的账户信息和元数据,目标树节点中存储的第一数据包括在第二MPT树中的目标树节点对应的账户信息和元数据。
(2)第一MPT树和第二MPT树均为存储树,第一MPT树和第二MPT均用于存储目标合约账户在相应区块中的所有账户状态信息。
具体的,第一MPT树用于存储目标合约账户在第一区块中的所有账户状态信息,第二MPT树用于存储目标合约账户在第二区块中的所有账户状态信息。目标树节点可以包括以下之一:存储树中的拓展节点、分支节点和叶子节点。其中:
当目标树节点包括拓展节点时,目标树节点中所存储的第一数据或第二数据包括目标树节点的下一树节点的哈希值及下一树节点的高度值。具体地,目标树节点中所存储的第一数据包括在第一MPT树中的目标树节点的下一树节点的哈希值及下一树节点的高度值;目标树节点中所存储的第二数据包括在第二MPT树中的目标树节点的下一树节点的哈希值及下一树节点的高度值。
当目标树节点包括分支节点时,目标树节点中存储的第一数据或第二数据包括目标树节点的下一树节点的哈希值以及下一树节点的高度值。具体地,目标树节点中所存储的第一数据包括在第一MPT树中的目标树节点的下一树节点的哈希值,目标树节点中所存储的第二数据包括在第二MPT树中的目标树节点的下一树节点的哈希值及下一树节点的高度值。
当目标树节点包括叶子节点时,目标树节点中存储的第一数据或第二数据包括:账户状态信息。具体的,目标树节点中存储的第一数据包括目标合约账户在第一MPT树中的账户状态信息;目标树节点中存储的第二数据包括目标合约账户在第二MPT树中的账户状态信息。
应当理解的是,当目标树节点为分支节点或拓展节点时,目标树节点的下一树节点的数量为多个,此时,目标树节点所存储的第一数据或者目标树节点所存储的第二数据包括目标树节点的各下一树节点的哈希值及高度值。
S603、获取第一索引和第二索引之间的相似度。
其中,获取第一索引和第二索引之间的相似度可以包括但不限于以下几种方式:
(1)第一索引和第二索引之间的相似度用于表示第一索引和第二索引之间具备的相同前缀的长度。示意性的,第一索引为00110,第二索引为00111,可见,第一索引和第二索引具有较长的相同前缀,即第一索引和第二索引具备相同前缀为0011,第一索引和第二索引之间的相似度即为第一索引与第二索引之间具备的相同前缀的长度为4。
(2)采用相似度计算方法,对第一索引与第二索引之间的相似度,相似度计算方法可以包括但不限于:余弦相似度计算方法、欧式距离相似度计算方法等等。示意性的,相似度计算方法包括欧式距离相似度计算方法,可将第一索引和第二索引进行向量转换,得到第一索引的向量和第二索引的向量,对第一索引的向量和第二索引的向量进行欧式距离计算,并将计算得到的距离作为第一索引和第二索引之间的相似度。
(3)第一索引包含顺序排列的N个数位,第二索引包含顺序排列的N个数位;获取第一索引和所述第二索引之间的相似度,包括:S1、按照N个数位的排列顺序,遍历比对第一索引与第二索引之间各个相同数位上的取值是否相同。S2、当首次遍历比对到第一索引与第二索引之间任一相同数位上的取值不相同时,结束遍历比对。S3、根据遍历比对得到的第一索引和第二索引之间具备相同取值的数位的长度M,确定第一索引和第二索引之间的相似度;M为正整数且M小于或等于N。
示意性的,第一索引为0SH1,第一索引包括顺序排列的4个数位,分别为第一数位、第二数位、第三数位和第四数位,第一数位的取值为0,第二数位的取值为S,第三数位的取值为H,第四数位的取值为1。第二索引为0SH2,第二索引同样包括顺序排列的4个数位,分别为第一数位、第二数位、第三数位和第四数位,第一数位的取值为0,第二数位的取值为S,第三数位的取值为H,第四数位的取值为2。首先,按照4个数位的排列顺序,遍历比对第一索引的第一数位的取值与第二索引的第一数位取值是否相同,并在确定第一索引的第一数位的取值与第二索引的第一数位的取值相同时,继续比对第一索引的第二数位的取值与第二索引的第二数位的取值相同,以此类推,当遍历比对到第一索引的第四数位的取值与第二索引的第四数位的取值不相同时,确定遍历比对得到的第一索引和第二索引之间具备相同取值的数位的长度为3,然后根据长度,确定第一索引和第二索引之间的相似度。
其中,根据遍历比对得到的第一索引和第二索引之间具备相同取值的数位的长度M,确定第一索引和第二索引之间的相似度包括以下方式:在一种实现中,将M的取值确定为第一索引和第二索引之间的相似度。在另一种实现中,将M在N中的占比确定为第一索引和第二索引之间的相似度。示意性的,长度M为3,N为4,长度M在N中的占比为3/4,可将3/4确定为第一索引和第二索引之间的相似度。
S604、若相似度满足相似条件,则将第一索引所指示的第一数据与第二索引所指示的第二数据存储至数据库的同一数据块中。
在本申请实施例中,第一索引和第二索引之间的相似度满足相似条件,意味着第一索引和第二索引相对接近,从而可以能够保证第一索引所指示的第一数据和第二索引所指示的第二数据大概率被存储至同一数据块中。因此,可预设相似条件,示意性的,相似条件包括相似度阈值,该相似度阈值可根据数据存储需求设置。若第一索引和第二索引之间的相似度大于或等于相似度阈值,则确定第一索引与第二索引之间的相似度满足相似条件,并进入步骤S604;若第一索引和第二索引之间的相似度小于相似度阈值,则确定相似度不满足相似条件,此时,第一索引所指示的第一数据和第二索引所指示的第二数据可以分别存储于数据库中的不同数据块中。
在本申请实施例中,获取目标树节点的第一索引,第一索引是根据目标树节点在第一MPT树中的关联信息构建得到的;第一索引用于指示第一MPT树中的目标树节点中所存储的第一数据,获取目标树节点的第二索引,第二索引根据目标树节点在第二MPT树中的关联信息构建得到;第二索引用于指示所述第二MPT树中的目标树节点中所存储的第二数据;可见,本申请实施例基于目标树节点在不同MPT树的关联信息为不同版本的目标树节点构建不同索引,这为后续将目标树节点在不同MPT树中所存储的数据存储至同一数据块中提供了依据。获取第一索引和第二索引之间的相似度,若相似度满足相似条件,则将第一索引所指示的第一数据与第二索引所指示的第二数据存储至数据库的同一数据块中。在本申请实施例中充分利用第一索引和第二索引之间的相似度,将第一数据和第二数据存储至数据库的同一数据块中,能够对不同版本的树节点所存储的数据进行有效管理,从而实现对区块中的数据的有效存储管理。
请参见图8,为本申请另一个示例性实施例提供的一种基于区块链的数据处理方法的流程示意图。该基于区块链的数据处理方法可由上述区块链网络中的节点设备执行。此实施例中,同样以区块链包括的第一区块和第二区块为例进行阐述。本申请实施例基于区块链的数据处理方法包括以下步骤S801-S806:
S801、获取目标树节点的第一索引;第一索引是根据目标树节点在第一MPT树树中的关联信息构建得到的;第一索引用于指示第一MPT树树中的目标树节点中所存储的第一数据。
S802、获取目标树节点的第二索引,第二索引根据目标树节点在第二MPT树树中的关联信息构建得到;第二索引用于指示第二MPT树树中的目标树节点中所存储的第二数据。
S803、获取第一索引和第二索引之间的相似度。
其中,步骤S801-步骤S803的具体实现方式可参见上述步骤S601-S603的具体实现方式,在此不再赘述。
S804、若相似度满足相似条件,则基于第一索引和第二索引,将第一索引所指示的第一数据与第二索引所指示的第二数据,按序写入至有序字符串表文件中的同一数据块中。
在具体实现中,确定第一索引和第二索引之间的大小,若第一索引小于第二索引,则基于第一索引,将第一索引所指示的第一数据写入有序字符串表文件的目标数据块中,并基于第二索引,将第二索引所指示第二数据写入有序字符串表文件的目标数据块中,且在写入第二数据时,目标数据块中仅存储第二索引与第一索引之间相似部分之外的部分,从而避免了索引之间重复内容的存储。
需要说明的是,上述仅以MPT树中的目标树节点为例,MPT树中的其他树节点均可参见目标树节点进行数据存储。另外,上述仅以第一区块和第二区块进行举例,在具体实现中,区块链包括多个区块,各区块中均维护相应的MPT树,各区块所维护的MPT树中可均包括目标树节点,目标树节点在各区块所维护的MPT树中的版本不同,此时,目标树节点的索引可以是对目标树节点在相应区块所维护的MPT树中的关联信息进行构建得到,然后获取目标树节点的索引之间的相似度,并判断目标树节点的索引之间的相似度是否满足相似条件,并将满足相似条件的相似度所对应的索引所指示的数据存储至同一数据块中。应当理解的是,由于一个数据块具备固定大小,因此在未超过数据块大小的情况下,可将满足相似条件的相似度所对应的索引所指示的数据存储至同一数据块中。
例如,以区块链上包括第一区块、第二区块和第三区块为例,第一区块、第二区块、第三区块是同一区间中连续的三个区块,第一区块维护有第一MPT树、第二区块维护有第二MPT树以及第三区块维护有第三MPT树;第一MPT树、第二MPT树和第三MPT树均包括目标树节点,目标树节点的第一索引是对目标树节点在第一MPT树中的关联信息进行构建得到,目标树节点的第二索引是对目标树节点在第二MPT树中的关联信息进行构建得到,目标树节点的第三索引是对目标树节点在第三MPT树中的关联信息进行构建得到。若第一索引和第二索引之间的相似度满足相似条件,第二索引与第三索引之间的相似度满足相似条件,且第一索引所指示的第一数据,第二索引所指示的第二数据,第三索引所指示的第三数据所占数据块的大小小于数据块的固定大小,那么可以将第一索引所指示的第一数据,第二索引所指示的第二数据、第三索引所指示的第三数据均存储至同一数据块中。
其中,满足相似条件的树节点的索引越多,则被写入至同一数据块中的数据之间的重叠度越高。由上述图2可知,每次发布新区块,MPT树中可能部分树节点所存储的数据会发生改变,但改变并非在原来的状态树相应的树节点进行修改,而是新建一些分支,保留原本树节点所存储的数据,因此,不同版本的树节点存储的数据会存在较大的数据重叠度,在本申请实施例中,基于不同版本的树节点(如目标树节点)在相应MPT树的关联信息构建不同版本的树节点的索引,从而使得满足相似条件的树节点的索引较多,也就是存在较多的不同版本的树节点的索引相对接近。针对不同版本的树节点的索引相对接近,可利用sstable文件按照索引将相应数据按序写入的这一特性,使得不同版本的树节点所存储的数据能够被写入至同一数据块,那么被写入至同一数据块中的数据重叠度就会越高。例如,上述例子中,满足相似条件的目标树节点的索引越多,如第一索引、第二索引、第三索引之间的相似度均满足相似条件,意味着第一索引、第二索引以及第三索引相对接近,基于第一索引、第二索引和第三索引,将第一索引所指示的第一数据、第二索引所指示的第二数据以及第三索引所指示的第三数据按序写入至同一数据块,写入至同一数据块的第一数据、第二数据以及第三数据之间具有较大的数据重叠度,通过这种方式,能够有利于后续对数据块中的数据进行压缩。
S805、采用压缩算法,对写入第一数据和第二数据的数据块进行压缩处理,得到压缩后的数据块。其中,压缩算法包括但不限于:snappy算法。
其中,被写入至同一数据块中的数据之间的重叠度越高,则数据存储时的压缩率越高,但数据存储时的处理效率越低。
S806、将压缩后的数据块存储至数据库的有序字符串表文件中。
其中,有序字符串表文件的数量可以为多个,多个有序字符串表文件可以在数据库中分层级存储。当任意有序字符串表文件与其下一层的有序字符串表文件合并时,预设的索引构建因子越小,任意有序字符串表文件中所存储的索引与其下一层的有序字符串表文件中所存储的索引之间的重叠度越小,数据存储时的处理效率越高,但数据存储时的压缩率越低;任意有序字符串表文件中所存储的索引与其下一层的有序字符串表文件中所存储的索引之间的重叠度越大,数据存储时的处理效率越低,但数据存储时的压缩率越高;示意性的,当前有序字符串表文件所存储的索引包括0-100,下一层的有序字符串表文件所存储的索引包括50-200,任意有序字符串表文件中所存储的索引与其下一层的有序字符串表文件中所存储的索引之间的重叠度较大,需要对当前有序字符串表文件中的索引与下一层的有序字符串表文件中的索引进行合并处理,将下一层的有序字符串表文件中的索引为50-100放入到当前有序字符串表文件中,那么数据存储时的处理效率就会变低,数据存储时的压缩率就会变高。如果当前有序字符串表文件中的索引与下一层的有序字符串表文件中的索引重叠越小,可能无需合并处理,这样就会提升数据存储时的处理效率,但压缩率就会越低。
在本申请实施例中,获取目标树节点的第一索引,第一索引是根据目标树节点在第一MPT树中的关联信息构建得到的;第一索引用于指示第一MPT树中的目标树节点中所存储的第一数据,获取目标树节点的第二索引,第二索引根据目标树节点在第二MPT树中的关联信息构建得到;第二索引用于指示所述第二MPT树中的目标树节点中所存储的第二数据;可见,本申请实施例基于目标树节点在不同MPT树的关联信息为不同版本的目标树节点构建不同索引,这为后续将目标树节点在不同MPT树中所存储的数据存储至同一数据块中提供了依据。获取第一索引和第二索引之间的相似度,若相似度满足相似条件,则基于第一索引和第二索引,将第一索引所指示的第一数据与第二索引所指示的第二数据,按序写入至有序字符串表文件中的同一数据块中,采用压缩算法,对写入第一数据和所述第二数据的数据块进行压缩处理,得到压缩后的数据块,并将压缩后的数据块存储至数据库的有序字符串表文件中。由于每次发布新区块,MPT树中可能部分树节点所存储的数据会发生改变,但改变并非在原来的状态树相应的树节点进行修改,而是新建一些分支,保留原本树节点所存储的数据,那么对于不同版本的目标树节点(如不同版本的拓展节点)所存储的数据会存在较大的数据重叠度,在本申请实施例中,基于不同版本的目标树节点在相应MPT树的关联信息构建不同版本的目标树节点的索引,从而使得满足相似条件的目标树节点的索引相对接近,在将第一数据和第二数据按序写入数据块时,基于相对接近的索引,能够将具有较大数据重叠度的第一数据和第二数据写入至同一数据块,从而可以提升数据压缩率,减少数据量的存储,在一定程度上可以提升节点设备的可拓展性。
接下来对本申请实施例提供的目标树节点的索引构建方式进行相关阐述。应当理解的是,此处仅以目标树节点为例阐述目标树节点的索引构建方式,第一MPT树和第二MPT树中的其他树节点均可参见目标树节点的索引构建方式构建相应的索引。
在一些可选地实施例中,目标树节点的索引可以是按照索引构建规则对目标树节点在相应MPT树中的关联信息进行构建得到的。其中,关联信息包括区块高度、目标树节点在相应MPT树中的路径、以及MPT树的树名。
具体的,目标树节点的第一索引可以是按照索引构建规则对目标树节点在第一MPT树中的关联信息进行构建得到的,目标树节点的第二索引可以是按照索引构建规则对目标树节点在第二MPT树中的关联信息进行构建得到的。
(1)目标树节点的第一索引按照索引构建规则对目标树节点在第一MPT树中的关联信息进行构建得到的。
目标树节点的第一索引的构建方法,包括:基于第一区块的区块高度、目标树节点在第一MPT树中的路径及MPT树的树名,按照索引构建规则,构建目标树节点的第一索引。具体地,可按照索引构建规则,对第一区块的区块高度和预设的索引构建因子之间的商进行取整运算,得到第一取整结果,并对第一区块的区块高度与索引构建因子之间的商进行取余运算,得到第一取余结果;按照索引构建规则,对第一取整结果、第一MPT树的树名、目标树节点在第一MPT树中的路径及第一取余结果进行拼接处理,得到目标树节点的第一索引。
示意性的,预设的索引构建因子表示为factor,索引构建规则表示为“区块高度/factor+树名+路径+区块高度%factor”,其中,区块高度/factor用于表示对区块高度和预设的索引构建因子之间的商进行取整运算,区块高度%factor表示对区块高度和预设的索引构建因子之间的商进行取余运算,“+”表示拼接处理,设第一区块的区块高度为1,factor为10,第一MPT树的树名为S,第一MPT树的路径为H,按照索引构建规则,对区块高度1与10之间的商进行取整运算,得到第一取整结果为0,对区块高度1与10之间的商进行取余运算,得到第一取余结果为1;然后按照索引构建规则,对第一取整结果0、第一MPT树的树名S、路径H以及第一取余结果1进行拼接处理,得到第一索引为0SH1。
(2)目标树节点的第二索引可以是按照索引构建规则对目标树节点在第二MPT树中的关联信息进行构建得到的。
目标树节点的第二索引的构建方法包括:按照索引构建规则,对第二区块的区块高度和预设的索引构建因子之间的商进行取整运算,得到第二取整结果,并对第二区块的区块高度与索引构建因子之间的商进行取余运算,得到第二取余结果;按照索引构建规则,对第二取整结果、第二MPT树的树名、目标树节点在第二MPT树中的路径及第二取余结果进行拼接处理,得到目标树节点的第二索引。示意性的,索引构建规则表示为“区块高度/factor+树名+路径+区块高度%factor”,设第二区块的区块高度为2,factor为10,第二MPT树的树名为S,第二MPT树的路径为H,按照索引构建规则,对区块高度1与10之间的商进行取整运算,得到第二取整结果为0,对区块高度1与10之间的商进行取余运算,得到第二取余结果为2;然后按照索引构建规则,对第二取整结果0、第二MPT树的树名S、路径H以及第二取余结果2进行拼接处理,得到第二索引为0SH2。
其中,第一MPT树和第二MPT树具有相同的树名。作为一种实现方式,当第一MPT树和第二MPT树均为状态树时,第一MPT树和第二MPT树的树名均为预设固定字符串,如“S”、“SS”等等。作为另一种实现方式,当第一MPT树和第二MPT树均为存储树时,第一MPT树和第二MPT树具有相同的树名,第一MPT树和第二MPT树的树名定义包括以下两种:①第一MPT树和第二MPT均用于存储目标合约账户在相应区块中的所有账户状态信息,第一MPT树和第二MPT树的树名为目标合约账户的地址。②第一MPT树和第二MPT树的树名由首次创建目标合约账户的区块的区块高度和目标合约账户在该区块中被创建的顺序共同确定。应当理解的是,首次创建目标合约账户的区块可以是第一区块、第二区块或者其他区块。示意性的,在区块1(区块1的区块高度为1)中首次创建了目标合约账户,且该目标合约账户在区块1中被创建的顺序为2(即目标合约账户在区块1被第二个创建),那么第一MPT树和第二MPT树的树名可以为12。
应当理解的是,上述索引构建规则是基于索引构建因子定义得到的;在一种实现中,由前述可知,区块链上的区块按照预设的索引构建因子被划分为多个区间,该索引构建规则的定义原则包括:位于相同区间内的不同区块所维护的MPT树中,相同树节点的不同索引之间的相似度应当满足相似条件。
其中,索引构建因子的取值越大,同一区间内的区块数量越多,满足相似条件的索引数量越多;索引构建因子的取值越小,同一区间内的区块数量越少,满足相似条件的索引数量越少。示意性的,索引构建因子的取值为1000,同一区间内的区块数量为999;索引构建因子的取值为100,同一区间的区块数量为99。
综上,通过上述索引构建规则,基于目标树节点在不同MPT树中的关联信息来创建目标树节点的不同索引,可以使得目标树节点的不同索引之间具备一定的相似度,从而有利于将相似度满足相似阈值的不同索引所指示的数据(例如第一索引所指示的第一数据和第二索引所指示的第二数据)存储至数据库的同一数据库。
接下来对本申请实施例提供的读取数据库中的任一树节点所存储的数据进行相关阐述。请参见图9,为本申请一个示例性实施例提供的一种基于区块链的数据处理方法的流程示意图。基于区块链的数据处理方法可由区块链网络中的节点设备执行,在此实施例中,以从数据库中读取目标树节点在第一MPT树所存储的数据为例,读取其他树节点在不同MPT树所存储的数据可参见读取目标树节点在第一MPT树所存储的数据。在本申请实施例中,基于区块链的数据处理方法可以包括以下步骤S901-S903:
S901、获取目标树节点在第一MPT树中的关联信息,关联信息包括:第一区块的区块高度、目标树节点在第一MPT树中的路径及第一MPT树的树名。
在一种实现中,当第一MPT树为状态树或存储树时,关联信息包括第一区块的区块高度,获取目标树节点在第一MPT树中的关联信息具体可以包括:确定在第一MPT树中的目标树节点的上一树节点,并从上一树节点中读取目标树节点在第一MPT树中的高度值。
在另一种实现中,当第一MPT树为存储树时,目标树节点为第一MPT树中的根节点,获取目标树节点在第一MPT树中的关联信息具体可以包括:获取第一MPT树对应的状态树,并从状态树的叶子节点中读取第一MPT树的树名及目标树节点在第一MPT树的高度值,以及将空值确定为目标树节点在第一MPT树中的路径。具体地,第一MPT树对应的状态树的叶子节点所存储的数据包括元数据,该元数据中的包括第一MPT的树名和第一MPT树的根节点的高度值,从叶子节点所存储的元数据中读取第一MPT树的树名及目标树节点在第一MPT树的高度值。
其中,目标树节点在第一MPT树的高度值可以等于第一区块的区块高度。
S902、根据第一区块的区块高度,目标树节点在第一默克尔前缀中的路径及第一默克尔前缀树的树名,按照索引构建规则构建得到目标树节点的第一索引。
其中,步骤S902的具体实现方式可参见上述按照索引规则构建得到目标树节点的第一索引的过程,在此不再赘述。
S903、根据第一索引,从数据库中查找第一索引所指示的第一数据所在的数据块,以及从查找到的数据块中读取第一数据。
在具体实现中,确定第一索引所在的有序字符串表文件,并根据第一索引,从确定的有序字符串表文件中查找第一索引所指示的第一数据所在的数据块,并从查找到的数据块中读取第一数据。
在此实施例中,通过获取到的目标树节点在第一MPT树中的关联信息构建目标树节点的第一索引,可以从数据库中准确读取目标树节点所指示的第一数据。
接下来对本申请实施例提供的基于区块链的数据处理装置进行相关阐述。
请参见图10,图10是本申请实施例提供的一种基于区块链的数据处理装置的结构示意图,该基于区块链的数据处理装置可以是节点设备中的一个计算机程序(包括程序代码),例如基于区块链的数据处理装置可以是节点设备中的一个应用软件;该基于区块链的数据处理装置可以用于执行图6、图8和图9所示的方法实施例中的部分或全部步骤。请参见图10,区块链包括第一区块和第二区块,第一区块中维护有第一MPT树,第二区块中维护有第二MPT树;第一MPT树和第二MPT树均包含目标树节点,但目标树节点在第一MPT树中的版本和在第二MPT树中的版本不同,该基于区块链的数据处理装置包括如下单元:
处理单元1001,用于获取目标树节点的第一索引;第一索引是根据目标树节点在第一MPT树中的关联信息构建得到的;第一索引用于指示第一MPT树中的目标树节点中所存储的第一数据;
处理单元1001,还用于获取目标树节点的第二索引,第二索引根据目标树节点在第二MPT树中的关联信息构建得到;第二索引用于指示第二MPT树中的目标树节点中所存储的第二数据;
处理单元1001,还用于获取第一索引和第二索引之间的相似度;
存储单元1002,用于若相似度满足相似条件,则将第一索引所指示的第一数据与第二索引所指示的第二数据存储至数据库的同一数据块中。
其中,区块链包含多个区块,区块链上的区块按照预设的索引构建因子被划分为多个区间;第一区块与第二区块是指位于相同区间内的任意两个区块;
其中,索引构建因子的取值由区块链的数据存储需求决定;数据存储需求包括以下至少一种:数据存储时的压缩率和数据存储时的处理效率;压缩率越高,则索引构建因子的取值越大;处理效率越高,则索引构建因子的取值越小。
其中,目标树节点的索引是按照索引构建规则对目标树节点在相应MPT树中的关联信息进行构建得到的;
索引构建规则是基于索引构建因子定义得到的;索引构建规则的定义原则包括:位于相同区间内的不同区块所维护的MPT树中,相同树节点的不同索引之间的相似度应当满足相似条件;
其中,索引构建因子的取值越大,同一区间内的区块数量越多,满足相似条件的索引数量越多;索引构建因子的取值越小,同一区间内的区块数量越少,满足相似条件的索引数量越少。
其中,关联信息包括:区块高度、目标树节点在相应MPT树中的路径,以及MPT树的树名;
第一索引的构建方法,包括:
按照索引构建规则,对第一区块的区块高度和预设的索引构建因子之间的商进行取整运算,得到第一取整结果;并对第一区块的区块高度与索引构建因子之间的商进行取余运算,得到第一取余结果;
按照索引构建规则,对第一取整结果、第一MPT树的树名、目标树节点在第一MPT树中的路径及第一取余结果进行拼接处理,得到目标树节点的第一索引;
第二索引的构建方法,包括:
按照索引构建规则,对第二区块的区块高度和索引构建因子之间的商进行取整运算,得到第二取整结果;并对第二区块的区块高度与索引构建因子之间的商进行取余运算,得到第二取余结果;
按照索引构建规则,对第二取整结果、第二MPT树的树名、目标树节点在第二MPT树中的路径及第二取余结果进行拼接处理,得到目标树节点的第二索引。
其中,第一索引包含顺序排列的N个数位,第二索引包含顺序排列的N个数位;处理单元1001,具体用于:
按照N个数位的排列顺序,遍历比对第一索引与第二索引之间各个相同数位上的取值是否相同;
当首次遍历比对到第一索引与第二索引之间任一相同数位上的取值不相同时,结束遍历比对;以及,
根据遍历比对得到的第一索引和第二索引之间具备相同取值的数位的长度M,确定第一索引和第二索引之间的相似度;M为正整数且M小于或等于N。
其中,处理单元1001,具体用于:
将M的取值确定为第一索引和第二索引之间的相似度;或者,
将M在N中的占比确定为第一索引和第二索引之间的相似度;
其中,相似条件包括相似阈值,若第一索引和第二索引之间的相似度大于或等于相似阈值,则相似度满足相似条件;若第一索引和第二索引之间的相似度小于相似阈值,则相似度不满足相似条件。
其中,第一MPT树和第二MPT树均为状态树,且第一MPT树与第二MPT树具有相同的树名,树名为预设固定字符串;状态树用于存储相应区块内所有合约账户的地址及各合约账户的账户信息;目标树节点包括以下之一:状态树中的拓展节点、分支节点和叶子节点;
当目标树节点包括拓展节点时,目标树节点中所存储的第一数据或第二数据包括目标树节点的下一树节点的哈希值及下一树节点的高度值;
当目标树节点包括分支节点时,分支节点中存储的第一数据或第二数据包括分支节点的下一树节点的哈希值以及下一树节点的高度值;
当目标树节点包括叶子节点时,叶子节点中存储的第一数据或第二数据包括:账户信息和元数据,元数据包括账户信息所在合约账户对应的存储树的树名和存储树的根节点的高度值。
其中,第一MPT树和第二MPT树均为存储树,第一MPT树和第二MPT树均用于存储目标合约账户在相应区块中的所有账户状态信息;目标树节点包括以下之一:存储树中的拓展节点、分支节点和叶子节点;
当目标树节点包括拓展节点时,目标树节点中所存储的第一数据或第二数据包括目标树节点的下一树节点的哈希值以及下一树节点的高度值;
当目标树节点包括分支节点时,分支节点中存储的第一数据或第二数据包括目标树节点的下一树节点的哈希值以及下一树节点的高度值;
当目标树节点包括叶子节点时,叶子节点中存储的第一数据或第二数据包括:账户状态信息;
其中,第一MPT树和第二MPT树具有相同的树名,树名为目标合约账户的地址,或者,树名由首次创建目标合约账户的区块的区块高度和目标合约账户在区块中被创建的顺序共同确定。
其中,数据库中包括有序字符串表文件;有序字符串表文件包括数据块;存储单元1002,具体用于:
基于第一索引和第二索引,将第一索引所指示的第一数据与第二索引所指示的第二数据,按序写入至有序字符串表文件中的同一数据块中;
采用压缩算法,对写入第一数据和第二数据的数据块进行压缩处理,得到压缩后的数据块;
将压缩后的数据块存储至数据库的有序字符串表文件中;
其中,满足相似条件的树节点的索引越多,则被写入至同一数据块中的数据之间的重叠度越高,则数据存储时的压缩率越高,但数据存储时的处理效率越低。
其中,处理单元1001,还用于:
获取目标树节点在第一MPT树中的关联信息,关联信息包括:第一区块的区块高度、目标树节点在第一MPT树中的路径及第一MPT树的树名;
根据第一区块的区块高度,目标树节点在第一MPT中的路径及第一MPT树的树名,按照索引构建规则构建得到目标树节点的第一索引;
根据第一索引,从数据库中查找第一索引所指示的第一数据所在的数据块,以及从查找到的数据块中读取第一数据。
其中,第一MPT树为存储树,目标树节点为第一MPT树中的根节点;处理单元,具体用于:
获取第一MPT树对应的状态树;
从状态树的叶子节点中读取第一MPT树的树名及目标树节点在第一MPT树的高度值,目标树节点在第一MPT树的高度值等于第一区块的区块高度;
将空值确定为目标树节点在第一MPT树中的路径。
在本申请实施例中,区块链包括第一区块和第二区块,第一区块中维护有第一MPT(MerklePatriciaTrie,MPT)树,第二区块中维护有第二MPT树;第一MPT树和第二MPT树均包含目标树节点,但目标树节点在第一MPT树中的版本和在第二MPT树中的版本不同;获取目标树节点的第一索引,第一索引是根据目标树节点在第一MPT树中的关联信息构建得到的;第一索引用于指示第一MPT树中的目标树节点中所存储的第一数据,获取目标树节点的第二索引,第二索引根据目标树节点在第二MPT树中的关联信息构建得到;第二索引用于指示第二MPT树中的目标树节点中所存储的第二数据;可见,本申请实施例基于目标树节点在不同MPT树的关联信息,为不同版本的目标树节点构建不同索引,这为后续将目标树节点在不同MPT树中所存储的数据存储至同一数据块中提供了依据。获取第一索引和第二索引之间的相似度,若相似度满足相似条件,则将第一索引所指示的第一数据与第二索引所指示的第二数据存储至数据库的同一数据块中。在本申请实施例中充分利用第一索引和第二索引之间的相似度,能够将第一数据和第二数据存储至数据库的同一数据块中,对不同版本的树节点所存储的数据进行有效管理,从而实现对区块中的数据的有效存储管理。
接下来对本申请实施例提供的节点设备进行相关阐述。
进一步地,本申请实施例还提供了一种节点设备的结构示意图,该节点设备的结构示意图可参见图11;该节点设备可以为上述服务器,该节点设备可以包括:处理器1101、输入设备1102,输出设备1103和存储器1104。上述处理器1101、输入设备1102、输出设备1103和存储器1104通过总线连接。存储器1104用于存储计算机程序,计算机程序包括程序指令,处理器1101用于执行存储器1104存储的程序指令。
其中,处理器1101通过运行存储器1104中的程序指令,执行如下操作:
获取目标树节点的第一索引;第一索引是根据目标树节点在第一MPT树中的关联信息构建得到的;第一索引用于指示第一MPT树中的目标树节点中所存储的第一数据;
获取目标树节点的第二索引,第二索引根据目标树节点在第二MPT树中的关联信息构建得到;第二索引用于指示第二MPT树中的目标树节点中所存储的第二数据;
获取第一索引和第二索引之间的相似度;
若相似度满足相似条件,则将第一索引所指示的第一数据与第二索引所指示的第二数据存储至数据库的同一数据块中。
其中,区块链包含多个区块,区块链上的区块按照预设的索引构建因子被划分为多个区间;第一区块与第二区块是指位于相同区间内的任意两个区块;
其中,索引构建因子的取值由区块链的数据存储需求决定;数据存储需求包括以下至少一种:数据存储时的压缩率和数据存储时的处理效率;压缩率越高,则索引构建因子的取值越大;处理效率越高,则索引构建因子的取值越小。
其中,目标树节点的索引是按照索引构建规则对目标树节点在相应MPT树中的关联信息进行构建得到的;
索引构建规则是基于索引构建因子定义得到的;索引构建规则的定义原则包括:位于相同区间内的不同区块所维护的MPT树中,相同树节点的不同索引之间的相似度应当满足相似条件;
其中,索引构建因子的取值越大,同一区间内的区块数量越多,满足相似条件的索引数量越多;索引构建因子的取值越小,同一区间内的区块数量越少,满足相似条件的索引数量越少。
其中,关联信息包括:区块高度、目标树节点在相应MPT树中的路径,以及MPT树的树名;
第一索引的构建方法,包括:
按照索引构建规则,对第一区块的区块高度和预设的索引构建因子之间的商进行取整运算,得到第一取整结果;并对第一区块的区块高度与索引构建因子之间的商进行取余运算,得到第一取余结果;
按照索引构建规则,对第一取整结果、第一MPT树的树名、目标树节点在第一MPT树中的路径及第一取余结果进行拼接处理,得到目标树节点的第一索引;
第二索引的构建方法,包括:
按照索引构建规则,对第二区块的区块高度和索引构建因子之间的商进行取整运算,得到第二取整结果;并对第二区块的区块高度与索引构建因子之间的商进行取余运算,得到第二取余结果;
按照索引构建规则,对第二取整结果、第二MPT树的树名、目标树节点在第二MPT树中的路径及第二取余结果进行拼接处理,得到目标树节点的第二索引。
其中,第一索引包含顺序排列的N个数位,第二索引包含顺序排列的N个数位;处理器1101在获取第一索引和第二索引之间的相似度时,可具体执行如下操作:
按照N个数位的排列顺序,遍历比对第一索引与第二索引之间各个相同数位上的取值是否相同;
当首次遍历比对到第一索引与第二索引之间任一相同数位上的取值不相同时,结束遍历比对;以及,
根据遍历比对得到的第一索引和第二索引之间具备相同取值的数位的长度M,确定第一索引和第二索引之间的相似度;M为正整数且M小于或等于N。
其中,处理器1101在根据遍历比对得到的第一索引和第二索引之间具备相同取值的数位的长度M,确定第一索引和第二索引之间的相似度时,可具体执行如下操作:
将M的取值确定为第一索引和第二索引之间的相似度;或者,
将M在N中的占比确定为第一索引和第二索引之间的相似度;
其中,相似条件包括相似阈值,若第一索引和第二索引之间的相似度大于或等于相似阈值,则相似度满足相似条件;若第一索引和第二索引之间的相似度小于相似阈值,则相似度不满足相似条件。
其中,第一MPT树和第二MPT树均为状态树,且第一MPT树与第二MPT树具有相同的树名,树名为预设固定字符串;状态树用于存储相应区块内所有合约账户的地址及各合约账户的账户信息;目标树节点包括以下之一:状态树中的拓展节点、分支节点和叶子节点;
当目标树节点包括拓展节点时,目标树节点中所存储的第一数据或第二数据包括目标树节点的下一树节点的哈希值及下一树节点的高度值;
当目标树节点包括分支节点时,目标树节点中存储的第一数据或第二数据包括分支节点的下一树节点的哈希值以及下一树节点的高度值;
当目标树节点包括叶子节点时,目标树节点中存储的第一数据或第二数据包括:账户信息和元数据,元数据包括账户信息所在合约账户对应的存储树的树名和存储树的根节点的高度值。
其中,第一MPT树和第二MPT树均为存储树,第一MPT树和第二MPT树均用于存储目标合约账户在相应区块中的所有账户状态信息;目标树节点包括以下之一:存储树中的拓展节点、分支节点和叶子节点;
当目标树节点包括拓展节点时,目标树节点中所存储的第一数据或第二数据包括目标树节点的下一树节点的哈希值以及下一树节点的高度值;
当目标树节点包括分支节点时,目标树节点中存储的第一数据或第二数据包括目标树节点的下一树节点的哈希值以及下一树节点的高度值;
当目标树节点包括叶子节点时,目标树节点中存储的第一数据或第二数据包括:账户状态信息;
其中,第一MPT树和第二MPT树具有相同的树名,树名为目标合约账户的地址,或者,树名由首次创建目标合约账户的区块的区块高度和目标合约账户在区块中被创建的顺序共同确定。
其中,数据库中包括有序字符串表文件;有序字符串表文件包括数据块;处理器1101在将第一索引所指示的第一数据与第二索引所指示的第二数据存储至数据库的同一数据块中时,可具体执行如下操作:
基于第一索引和第二索引,将第一索引所指示的第一数据与第二索引所指示的第二数据,按序写入至有序字符串表文件中的同一数据块中;
采用压缩算法,对写入第一数据和第二数据的数据块进行压缩处理,得到压缩后的数据块;
将压缩后的数据块存储至数据库的有序字符串表文件中;
其中,满足相似条件的树节点的索引越多,则被写入至同一数据块中的数据之间的重叠度越高,则数据存储时的压缩率越高,但数据存储时的处理效率越低。
其中,处理器1101,还用于:
获取目标树节点在第一MPT树中的关联信息,关联信息包括:第一区块的区块高度、目标树节点在第一MPT树中的路径及第一MPT树的树名;
根据第一区块的区块高度,目标树节点在第一MPT中的路径及第一MPT树的树名,按照索引构建规则构建得到目标树节点的第一索引;
根据第一索引,从数据库中查找第一索引所指示的第一数据所在的数据块,以及从查找到的数据块中读取第一数据。
其中,第一MPT树为存储树,目标树节点为第一MPT树中的根节点;处理器1101在获取目标树节点在第一MPT树中的关联信息时,可具体执行如下步骤:
获取第一MPT树对应的状态树;
从状态树的叶子节点中读取第一MPT树的树名及目标树节点在第一MPT树的高度值,目标树节点在第一MPT树的高度值等于第一区块的区块高度;
将空值确定为目标树节点在第一MPT树中的路径。
在本申请实施例中,区块链包括第一区块和第二区块,第一区块中维护有第一MPT(MerklePatriciaTrie,MPT)树,第二区块中维护有第二MPT树;第一MPT树和第二MPT树均包含目标树节点,但目标树节点在第一MPT树中的版本和在第二MPT树中的版本不同;获取目标树节点的第一索引,第一索引是根据目标树节点在第一MPT树中的关联信息构建得到的;第一索引用于指示第一MPT树中的目标树节点中所存储的第一数据,获取目标树节点的第二索引,第二索引根据目标树节点在第二MPT树中的关联信息构建得到;第二索引用于指示第二MPT树中的目标树节点中所存储的第二数据;可见,本申请实施例基于目标树节点在不同MPT树的关联信息,为不同版本的目标树节点构建不同索引,这为后续将目标树节点在不同MPT树中所存储的数据存储至同一数据块中提供了依据。获取第一索引和第二索引之间的相似度,若相似度满足相似条件,则将第一索引所指示的第一数据与第二索引所指示的第二数据存储至数据库的同一数据块中。在本申请实施例中充分利用第一索引和第二索引之间的相似度,能够将第一数据和第二数据存储至数据库的同一数据块中,对不同版本的树节点所存储的数据进行有效管理,从而实现对区块中的数据的有效存储管理。
此外,这里需要指出的是:本申请实施例还提供了一种计算机可读存储介质,且计算机可读存储介质中存储有计算机程序,且该计算机程序包括程序指令,当处理器执行上述程序指令时,能够执行前文图6、图8和图9所对应实施例中的方法,因此,这里将不再进行赘述。对于本申请所涉及的计算机可读存储介质实施例中未披露的技术细节,请参照本申请方法实施例的描述。作为示例,程序指令可以被部署在一个节点设备上,或者在位于一个地点的多个节点设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个节点设备上执行。
根据本申请的一个方面,提供了一种计算机程序产品,该计算机程序产品包括计算机程序,该计算机程序存储在计算机可读存储介质中。节点设备的处理器从计算机可读存储介质读取该计算机程序,处理器执行该计算机程序,使得该节点设备可以执行前文图6、图8和图9所对应实施例中的方法,因此,这里将不再进行赘述。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖的范围。
Claims (15)
1.一种基于区块链的数据处理方法,其特征在于,所述区块链包括第一区块和第二区块,所述第一区块中维护有第一默克尔前缀树,所述第二区块中维护有第二默克尔前缀树;所述第一默克尔前缀树和所述第二默克尔前缀树均包含目标树节点,但所述目标树节点在所述第一默克尔前缀树中的版本和在所述第二默克尔前缀树中的版本不同;所述方法包括:
获取所述目标树节点的第一索引;所述第一索引是根据所述目标树节点在所述第一默克尔前缀树中的关联信息构建得到的;所述第一索引用于指示所述第一默克尔前缀树中的目标树节点中所存储的第一数据;
获取所述目标树节点的第二索引,所述第二索引根据所述目标树节点在所述第二默克尔前缀树中的关联信息构建得到;所述第二索引用于指示所述第二默克尔前缀树中的目标树节点中所存储的第二数据;
获取所述第一索引和所述第二索引之间的相似度;
若所述相似度满足相似条件,则将所述第一索引所指示的第一数据与所述第二索引所指示的第二数据存储至数据库的同一数据块中;
其中,所述目标树节点的索引是按照索引构建规则对所述目标树节点在相应默克尔前缀树中的关联信息进行构建得到的;所述目标树节点在相应默克尔前缀树中的关联信息包括:区块高度、所述目标树节点在相应默克尔前缀树中的路径,以及默克尔前缀树的树名;所述目标树节点的索引的构建方法,包括:按照所述索引构建规则,对区块高度和预设的索引构建因子之间的商进行取整运算,得到取整结果;并对区块高度和预设的索引构建因子之间的商进行取余运算,得到取余结果;按照所述索引构建规则,对所述取整结果、默克尔前缀树的树名、所述目标树节点在相应默克尔前缀树的树名及所述取余结果进行拼接处理,得到所述目标树节点的索引。
2.如权利要求1所述的方法,其特征在于,所述区块链包含多个区块,所述区块链上的区块按照预设的索引构建因子被划分为多个区间;所述第一区块与所述第二区块是指位于相同区间内的任意两个区块;
其中,所述索引构建因子的取值由所述区块链的数据存储需求决定;所述数据存储需求包括以下至少一种:数据存储时的压缩率和数据存储时的处理效率;所述压缩率越高,则所述索引构建因子的取值越大;所述处理效率越高,则所述索引构建因子的取值越小。
3.如权利要求2所述的方法,其特征在于,所述索引构建规则是基于所述索引构建因子定义得到的;所述索引构建规则的定义原则包括:位于相同区间内的不同区块所维护的默克尔前缀树中,相同树节点的不同索引之间的相似度应当满足相似条件;
其中,所述索引构建因子的取值越大,同一区间内的区块数量越多,满足相似条件的索引数量越多;所述索引构建因子的取值越小,同一区间内的区块数量越少,满足相似条件的索引数量越少。
4.如权利要求1所述的方法,其特征在于,所述第一索引的构建方法,包括:
按照所述索引构建规则,对所述第一区块的区块高度和预设的索引构建因子之间的商进行取整运算,得到第一取整结果;并对所述第一区块的区块高度与所述索引构建因子之间的商进行取余运算,得到第一取余结果;
按照所述索引构建规则,对所述第一取整结果、所述第一默克尔前缀树的树名、所述目标树节点在所述第一默克尔前缀树中的路径及所述第一取余结果进行拼接处理,得到所述目标树节点的第一索引;
所述第二索引的构建方法,包括:
按照所述索引构建规则,对所述第二区块的区块高度和所述索引构建因子之间的商进行取整运算,得到第二取整结果;并对所述第二区块的区块高度与所述索引构建因子之间的商进行取余运算,得到第二取余结果;
按照所述索引构建规则,对所述第二取整结果、所述第二默克尔前缀树的树名、所述目标树节点在所述第二默克尔前缀树中的路径及所述第二取余结果进行拼接处理,得到所述目标树节点的第二索引。
5.如权利要求1所述的方法,其特征在于,所述第一索引包含顺序排列的N个数位,所述第二索引包含顺序排列的N个数位;
所述获取所述第一索引和所述第二索引之间的相似度,包括:
按照所述N个数位的排列顺序,遍历比对所述第一索引与所述第二索引之间各个相同数位上的取值是否相同;
当首次遍历比对到所述第一索引与所述第二索引之间任一相同数位上的取值不相同时,结束遍历比对;以及,
根据遍历比对得到的所述第一索引和所述第二索引之间具备相同取值的数位的长度M,确定所述第一索引和所述第二索引之间的相似度;M为正整数且M小于或等于N。
6.如权利要求5所述的方法,其特征在于,所述根据遍历比对得到的所述第一索引和所述第二索引之间具备相同取值的数位的长度M,确定所述第一索引和所述第二索引之间的相似度,包括:
将M的取值确定为所述第一索引和所述第二索引之间的相似度;或者,
将M在N中的占比确定为所述第一索引和所述第二索引之间的相似度;
其中,所述相似条件包括相似阈值,若所述第一索引和所述第二索引之间的相似度大于或等于所述相似阈值,则所述相似度满足相似条件;若所述第一索引和所述第二索引之间的相似度小于所述相似阈值,则所述相似度不满足相似条件。
7.如权利要求4所述的方法,其特征在于,所述第一默克尔前缀树和第二默克尔前缀树均为状态树,且所述第一默克尔前缀树与第二默克尔前缀树具有相同的树名,所述树名为预设固定字符串;所述状态树用于存储相应区块内所有合约账户的地址及各合约账户的账户信息;所述目标树节点包括以下之一:所述状态树中的拓展节点、分支节点和叶子节点;
当所述目标树节点包括拓展节点时,所述目标树节点中所存储的第一数据或第二数据包括所述目标树节点的下一树节点的哈希值及所述下一树节点的高度值;
当所述目标树节点包括分支节点时,所述目标树节点中存储的第一数据或第二数据包括所述目标树节点的下一树节点的哈希值以及所述下一树节点的高度值;
当所述目标树节点包括叶子节点时,所述目标树节点中存储的第一数据或第二数据包括:账户信息和元数据,所述元数据包括账户信息所在合约账户对应的存储树的树名和所述存储树的根节点的高度值。
8.如权利要求4所述的方法,其特征在于,所述第一默克尔前缀树和第二默克尔前缀树均为存储树,所述第一默克尔前缀树和所述第二默克尔前缀树均用于存储目标合约账户在相应区块中的所有账户状态信息;所述目标树节点包括以下之一:所述存储树中的拓展节点、分支节点和叶子节点;
当所述目标树节点包括拓展节点时,所述目标树节点中所存储的第一数据或第二数据包括所述目标树节点的下一树节点的哈希值以及所述下一树节点的高度值;
当所述目标树节点包括分支节点时,所述目标树节点中存储的第一数据或第二数据包括所述目标树节点的下一树节点的哈希值以及所述下一树节点的高度值;
当所述目标树节点包括叶子节点时,所述目标树节点中存储的第一数据或第二数据包括:账户状态信息;
其中,所述第一默克尔前缀树和所述第二默克尔前缀树具有相同的树名,所述树名为所述目标合约账户的地址,或者,所述树名由首次创建所述目标合约账户的区块的区块高度和所述目标合约账户在所述区块中被创建的顺序共同确定。
9.如权利要求1所述的方法,其特征在于,所述数据库中包括有序字符串表文件;所述有序字符串表文件包括数据块;
所述将所述第一索引所指示的第一数据与所述第二索引所指示的第二数据存储至数据库的同一数据块中,包括:
基于所述第一索引和所述第二索引,将所述第一索引所指示的第一数据与所述第二索引所指示的第二数据,按序写入至所述有序字符串表文件中的同一数据块中;
采用压缩算法,对写入所述第一数据和所述第二数据的数据块进行压缩处理,得到压缩后的数据块;
将所述压缩后的数据块存储至所述数据库的所述有序字符串表文件中;
其中,满足相似条件的树节点的索引越多,则被写入至同一数据块中的数据之间的重叠度越高,则数据存储时的压缩率越高,但数据存储时的处理效率越低。
10.如权利要求1所述的方法,其特征在于,所述方法还包括:
获取所述目标树节点在所述第一默克尔前缀树中的关联信息,所述目标树节点在所述第一默克尔前缀树中的关联信息包括:所述第一区块的区块高度、所述目标树节点在所述第一默克尔前缀树中的路径及所述第一默克尔前缀树的树名;
根据所述第一区块的区块高度,所述目标树节点在所述第一默克尔前缀中的路径及所述第一默克尔前缀树的树名,按照索引构建规则构建得到所述目标树节点的第一索引;
根据所述第一索引,从所述数据库中查找所述第一索引所指示的第一数据所在的数据块,以及从查找到的数据块中读取所述第一数据。
11.如权利要求10所述的方法,其特征在于,所述第一默克尔前缀树为存储树,所述目标树节点为所述第一默克尔前缀树中的根节点;所述获取所述目标树节点在所述第一默克尔前缀树中的关联信息,包括:
获取所述第一默克尔前缀树对应的状态树;
从所述状态树的叶子节点中读取所述第一默克尔前缀树的树名及所述目标树节点在所述第一默克尔前缀树的高度值,所述目标树节点在所述第一默克尔前缀树的高度值等于所述第一区块的区块高度;
将空值确定为所述目标树节点在所述第一默克尔前缀树中的路径。
12.一种基于区块链的数据处理装置,其特征在于,所述区块链包括第一区块和第二区块,所述第一区块中维护有第一默克尔前缀树,所述第二区块中维护有第二默克尔前缀树;所述第一默克尔前缀树和所述第二默克尔前缀树均包含目标树节点,但所述目标树节点在所述第一默克尔前缀树中的版本和在所述第二默克尔前缀树中的版本不同,所述装置包括:
处理单元,用于获取所述目标树节点的第一索引;所述第一索引是根据所述目标树节点在所述第一默克尔前缀树中的关联信息构建得到的;所述第一索引用于指示所述第一默克尔前缀树中的目标树节点中所存储的第一数据;
所述处理单元,还用于获取所述目标树节点的第二索引,所述第二索引根据所述目标树节点在所述第二默克尔前缀树中的关联信息构建得到;所述第二索引用于指示所述第二默克尔前缀树中的目标树节点中所存储的第二数据;
所述处理单元,还用于获取所述第一索引和所述第二索引之间的相似度;
存储单元,用于若所述相似度满足相似条件,则将所述第一索引所指示的第一数据与所述第二索引所指示的第二数据存储至数据库的同一数据块中;
其中,所述目标树节点的索引是按照索引构建规则对所述目标树节点在相应默克尔前缀树中的关联信息进行构建得到的;所述目标树节点在相应默克尔前缀树中的关联信息包括:区块高度、所述目标树节点在相应默克尔前缀树中的路径,以及默克尔前缀树的树名;所述目标树节点的索引的构建方法,包括:按照索引构建规则,对区块高度和预设的索引构建因子之间的商进行取整运算,得到取整结果;并对区块高度和预设的索引构建因子之间的商进行取余运算,得到取余结果;按照所述索引构建规则,对所述取整结果、默克尔前缀树的树名、所述目标树节点在相应默克尔前缀树的树名及所述取余结果进行拼接处理,得到所述目标树节点的索引。
13.一种节点设备,其特征在于,包括:
处理器,适用于执行计算机程序;
计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序被所述处理器执行时,执行如权利要求1-11任一项所述的基于区块链的数据处理方法。
14.一种计算机可读存储介质,其特征在于,所述计算机存储介质存储有计算机程序,所述计算机程序被处理器执行时,执行如权利要求1-11任一项所述的基于区块链的数据处理方法。
15.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现如权利要求1-11任一项所述的基于区块链的数据处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311306070.5A CN117056342B (zh) | 2023-10-10 | 2023-10-10 | 一种基于区块链的数据处理方法及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311306070.5A CN117056342B (zh) | 2023-10-10 | 2023-10-10 | 一种基于区块链的数据处理方法及相关设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117056342A CN117056342A (zh) | 2023-11-14 |
CN117056342B true CN117056342B (zh) | 2024-01-26 |
Family
ID=88664746
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311306070.5A Active CN117056342B (zh) | 2023-10-10 | 2023-10-10 | 一种基于区块链的数据处理方法及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117056342B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111488115A (zh) * | 2019-01-28 | 2020-08-04 | 网易(杭州)网络有限公司 | 基于区块链的数据缓存方法、装置、电子设备以及介质 |
WO2022237596A1 (zh) * | 2021-05-11 | 2022-11-17 | 支付宝(杭州)信息技术有限公司 | 智能合约存储内容的遍历方法及装置、电子设备 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7287033B2 (en) * | 2002-03-06 | 2007-10-23 | Ori Software Development, Ltd. | Efficient traversals over hierarchical data and indexing semistructured data |
US11301452B2 (en) * | 2018-10-09 | 2022-04-12 | Ebay, Inc. | Storing and verification of derivative work data on blockchain with original work data |
US10992459B2 (en) * | 2019-08-30 | 2021-04-27 | Advanced New Technologies Co., Ltd. | Updating a state Merkle tree |
JP2024519533A (ja) * | 2021-05-06 | 2024-05-15 | ストロング フォース アイオーティ ポートフォリオ 2016,エルエルシー | 産業用モノのインターネットのための量子、生物学、コンピュータビジョン、ニューラルネットワークシステム |
-
2023
- 2023-10-10 CN CN202311306070.5A patent/CN117056342B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111488115A (zh) * | 2019-01-28 | 2020-08-04 | 网易(杭州)网络有限公司 | 基于区块链的数据缓存方法、装置、电子设备以及介质 |
WO2022237596A1 (zh) * | 2021-05-11 | 2022-11-17 | 支付宝(杭州)信息技术有限公司 | 智能合约存储内容的遍历方法及装置、电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN117056342A (zh) | 2023-11-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11556516B2 (en) | Distributed blockchain data storage under account model | |
US11526488B2 (en) | Distributed blockchain data storage under account model | |
JP2020530213A (ja) | ブロックチェーンワールド状態マークルパトリシアトライ木サブツリーの構築 | |
CN110599169B (zh) | 数据处理方法、装置、终端及介质 | |
CN108197226A (zh) | Mptc账户状态树以及mptc区块链快速检索方法 | |
US20210109921A1 (en) | Merkle tree storage of big data | |
US11070231B2 (en) | Reducing storage of blockchain metadata via dictionary-style compression | |
CN112261163B (zh) | 一种区块链***中的状态存储方法及区块链***、节点 | |
CN114064984B (zh) | 一种基于稀疏数组链表的世界状态增量更新方法及装置 | |
WO2022087837A1 (en) | Blockchain system having efficient world state data structures | |
Chen et al. | MiniChain: A lightweight protocol to combat the UTXO growth in public blockchain | |
Ramabaja et al. | Compact merkle multiproofs | |
CN117056342B (zh) | 一种基于区块链的数据处理方法及相关设备 | |
WO2024066007A1 (zh) | 区块链***中的交易执行方法、共识节点和区块链*** | |
CN116760661A (zh) | 数据存储方法、装置、计算机设备、存储介质和程序产品 | |
Pi et al. | xFabLedger: Extensible Ledger Storage for Hyperledger Fabric | |
WO2022087834A1 (en) | Blockchain system having efficient world state data structures | |
CN111488607A (zh) | 业务数据区块链的数据处理方法及其装置 | |
CN111737728A (zh) | 基于业务数据区块链的自媒体数据存储方法及*** | |
CN111695137A (zh) | 基于业务数据区块链的旅游数据存储方法及*** | |
WO2023160040A1 (zh) | 基于区块链的数据处理方法、装置、设备及可读存储介质 | |
CN111488606B (zh) | 基于业务数据区块链的数据共享方法及装置 | |
Islam et al. | Reducing Storage Requirement in Blockchain Networks Using Overlapping Data Distribution | |
WO2024066012A1 (zh) | 区块链***中节点类型的转换方法、装置及区块链*** | |
CN113449003B (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 |