CN117421369A - 基于区块链的数据处理方法、装置、设备及可读存储介质 - Google Patents
基于区块链的数据处理方法、装置、设备及可读存储介质 Download PDFInfo
- Publication number
- CN117421369A CN117421369A CN202311398983.4A CN202311398983A CN117421369A CN 117421369 A CN117421369 A CN 117421369A CN 202311398983 A CN202311398983 A CN 202311398983A CN 117421369 A CN117421369 A CN 117421369A
- Authority
- CN
- China
- Prior art keywords
- initial
- ordered
- layer
- data
- node
- 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
- 238000003672 processing method Methods 0.000 title claims abstract description 20
- 238000000034 method Methods 0.000 claims abstract description 45
- 238000012545 processing Methods 0.000 claims description 40
- 238000004590 computer program Methods 0.000 claims description 20
- 230000006870 function Effects 0.000 claims description 17
- 238000004891 communication Methods 0.000 claims description 8
- 238000010586 diagram Methods 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 5
- 238000013507 mapping Methods 0.000 description 4
- 230000001502 supplementing effect Effects 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 102100029563 Somatostatin Human genes 0.000 description 3
- 238000004422 calculation algorithm Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000000903 blocking effect Effects 0.000 description 2
- 230000006835 compression Effects 0.000 description 2
- 238000007906 compression Methods 0.000 description 2
- VLFZHMWZMNJMTK-UHFFFAOYSA-N CCC.CCC.CCC.CCC Chemical compound CCC.CCC.CCC.CCC VLFZHMWZMNJMTK-UHFFFAOYSA-N 0.000 description 1
- 102100030851 Cortistatin Human genes 0.000 description 1
- 238000007792 addition Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Abstract
本申请公开了一种基于区块链的数据处理方法、装置、设备及可读存储介质,该方法包括:根据区块链中的业务区块分别对应的区块高度,确定业务区块关联的状态树的状态树节点的节点高度;通过节点高度与节点哈希生成状态树节点的存储关键字,基于状态树节点相关联的存储关键字,将状态树节点的状态数据存入层级数据库中;若初始有序表所存储的状态数据的数据量,达到初始层对应的第一数据量阈值,则将目标有序表与关联有序表拼接为目标有序合并表;将目标有序合并表存储至层级数据库中的初始层的下一层。采用本申请,可以提高区块链状态数据的存储效率。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种基于区块链的数据处理方法、装置、设备及可读存储介质。
背景技术
目前区块链的状态树的状态树节点使用节点哈希作为数据库存储的关键字(key),由于节点哈希具有随机性,使得状态树节点在存储到数据库时,关键字是无序的,并且可能重复,对于使用顺序读写结构的数据库,数据库需要反复对关键字进行大小排序,才能确定关键字的存储位置,存储效率非常低,并且数据库每个分层或者分块所存储的关键字也会重复,所对应的关键字范围也会重叠,从而导致数据库在将分层或者分块合并时,需要进行大量的压缩(Compaction)处理,影响数据写入性能。
发明内容
本申请实施例提供了一种基于区块链的数据处理方法、装置、设备及可读存储介质,可以提高区块链状态数据的存储效率。
本申请实施例一方面提供了一种基于区块链的数据处理方法,包括:
根据区块链中的业务区块分别对应的区块高度,确定业务区块关联的状态树的状态树节点的节点高度;每个状态树的状态树节点均包含节点哈希,单个状态树中每个状态树节点的节点高度均与所属的业务区块的区块高度相同;
通过节点高度与节点哈希生成状态树节点的存储关键字,基于状态树节点相关联的存储关键字,将状态树节点的状态数据存入层级数据库中;层级数据库包括初始层,初始层包含一个或多个分别具有互不重叠的初始关键字范围的初始有序表,初始有序表用于按序存储属于所具有的初始关键字范围内的状态数据;
若初始有序表所存储的状态数据的数据量,达到初始层对应的第一数据量阈值,则将达到第一数据量阈值的初始有序表,确定为目标有序表,基于目标有序表的初始关键字范围,在初始层中确定关联有序表,将目标有序表与关联有序表拼接为目标有序合并表;目标有序表和关联有序表分别包含的状态数据在目标有序合并表中的顺序,与目标有序表和关联有序表分别对应的存储关键字的排序顺序相同;
将目标有序合并表存储至层级数据库中的初始层的下一层。
其中,通过节点高度与节点哈希生成状态树节点的存储关键字,包括:
获取状态树为状态树节点分配的节点前缀;
基于节点高度、状态树的地址以及节点前缀,生成状态树节点的存储关键字。
其中,层级数据库还包括缓存层,初始层的一个或多个初始有序表中包括初始有序表Si,i为正整数;基于状态树节点相关联的存储关键字,将状态树节点的状态数据存入层级数据库中,包括:
将状态树节点的状态数据存入层级数据库的缓存层中;
若缓存层的状态数据的数据量,达到缓存层对应的缓存数据量阈值,则将缓存层中的状态数据存储至层级数据库中的初始层;
若状态树节点相关联的存储关键字属于初始有序表Si的初始关键字范围,则将存储关键字属于初始有序表Si的初始关键字范围的状态数据,存储至初始有序表Si中。
其中,层级数据库中初始层的下一层为第一合并层,第一合并层包含一个或多个分别具有互不重叠的第一关键字范围的第一有序表,第一有序表用于按序存储属于所具有的第一关键字范围内的状态数据;
基于状态树节点相关联的存储关键字,将状态树节点的状态数据存入层级数据库中,包括:
将状态树节点的状态数据存入层级数据库的缓存层中;
若缓存层的状态数据的数据量,达到缓存层对应的缓存数据量阈值,则将缓存层中的状态数据存储至层级数据库中的初始层;
若初始层中不存在初始有序表,则将状态数据的存储关键字从大到小顺序排列,基于初始层对应的初始表数据阈值,将顺序排列后的存储关键字划分为M个初始数据组;M为正整数;
通过M个初始数据组中的存储关键字,确定M个初始数据组分别对应初始关键字范围,基于初始关键字范围生成M个初始有序表,基于初始关键字范围与存储关键字之间的关系,将状态数据存储至所关联的初始有序表中。
其中,层级数据库中初始层的下一层为第一合并层,第一合并层包含一个或多个分别具有互不重叠的第一关键字范围的第一有序表,第一有序表用于按序存储属于所具有的第一关键字范围内的状态数据;
基于目标有序表的初始关键字范围,在初始层中确定关联有序表,将目标有序表与关联有序表拼接为目标有序合并表,包括:
若第一有序表中的第一关键字范围中包含目标有序表的初始关键字范围,则将包含目标有序表的初始关键字范围的第一有序表,确定为待拼接表;
将初始关键字范围属于待拼接表的第一关键字范围的剩余初始有序表,确定为关联有序表,将目标有序表与关联有序表拼接至待拼接表中,得到目标有序合并表;剩余初始有序表为除了目标有序表之外的初始有序表。
其中,还包括:
若目标有序合并表所存储的状态数据的数据量,大于第一合并层对应的第二数据量阈值,则基于待拼接有序表所存储的状态数据的数据量与待拼接有序表的第一关键字范围,在目标有序合并表中确定拼接数据组,将拼接数据组拼接至待拼接有序表;
将目标有序合并表中的剩余存储关键字划分为Q个合并数据组,通过Q个合并数据组中的存储关键字,确定Q个合并数据组分别对应第一关键字范围,基于Q个合并数据组分别对应的第一关键字范围将目标有序合并表划分为Q个第一有序表,将Q个第一有序表存储至第一合并层;剩余存储关键字是指目标有序合并表中除了拼接数据组对应的存储关键字以外的存储关键字;
若目标有序合并表所存储的状态数据的数据量,小于或等于第一合并层对应的第二数据量阈值,则执行将目标有序合并表存储至层级数据库中的初始层的下一层的步骤。
其中,还包括:
若目标有序合并表所存储的状态数据的数据量,大于第一合并层对应的第二数据量阈值,则基于第二数据量阈值,将目标有序合并表中的存储关键字划分为N个合并数据组;N为正整数;第一合并层为层级数据库中的初始层的下一层;
通过N个合并数据组中的存储关键字,确定N个合并数据组分别对应第一关键字范围,基于N个合并数据组分别对应的第一关键字范围将目标有序合并表划分为N个第一有序表,将N个第一有序表存储至第一合并层;
若目标有序合并表所存储的状态数据的数据量,小于或等于第一合并层对应的第二数据量阈值,则执行将目标有序合并表存储至层级数据库中的初始层的下一层的步骤。
其中,层级数据库中初始层的下一层为第一合并层,第一合并层包含一个或多个分别具有互不重叠的第一关键字范围的第一有序表,第一有序表用于按序存储属于所具有的第一关键字范围内的状态数据;一个或多个第一有序表包括目标有序合并表;
方法还包括:
若初始有序表所存储的状态数据的数据量,达到初始层对应的第一数据量阈值,则将达到第一数据量阈值的初始有序表,确定为跨层有序表;
基于跨层有序表的初始关键字范围,将第一合并层中与跨层有序表相关联的第一有序表,确定为跨层拼接表;跨层拼接表的第一关键字范围中的最大值与目标有序表的初始关键字范围的最小值相同;
若跨层拼接表所存储的状态数据的数据量,达到第一合并层对应的第二数据量阈值,则将跨层有序表与跨层拼接表拼接为目标跨层合并表;
将目标跨层合并表存储至层级数据库中的第一合并层的下一层。
其中,状态树节点包含状态树节点的子节点的节点高度和节点哈希,方法还包括:
获取状态树节点所存储的状态树节点的子节点的节点高度和节点哈希;
基于状态树节点的子节点的节点高度和节点哈希,生成查询关键字,通过查询关键词查询状态树节点的子节点的状态数据。
本申请实施例一方面提供了一种基于区块链的数据处理装置,包括:
节点高度确定模块,用于根据区块链中的业务区块分别对应的区块高度,确定业务区块关联的状态树的状态树节点的节点高度;每个状态树的状态树节点均包含节点哈希,单个状态树中每个状态树节点的节点高度均与所属的业务区块的区块高度相同;
关键字处理模块,用于通过节点高度与节点哈希生成状态树节点的存储关键字,基于状态树节点相关联的存储关键字,将状态树节点的状态数据存入层级数据库中;层级数据库包括初始层,初始层包含一个或多个分别具有互不重叠的初始关键字范围的初始有序表,初始有序表用于按序存储属于所具有的初始关键字范围内的状态数据;
拼接处理模块,用于若初始有序表所存储的状态数据的数据量,达到初始层对应的第一数据量阈值,则将达到第一数据量阈值的初始有序表,确定为目标有序表,基于目标有序表的初始关键字范围,在初始层中确定关联有序表,将目标有序表与关联有序表拼接为目标有序合并表;目标有序表和关联有序表分别包含的状态数据在目标有序合并表中的顺序,与目标有序表和关联有序表分别对应的存储关键字的排序顺序相同;
存储模块,用于将目标有序合并表存储至层级数据库中的初始层的下一层。
其中,关键字处理模块,具体用于获取状态树为状态树节点分配的节点前缀;基于节点高度、状态树的地址以及节点前缀,生成状态树节点的存储关键字。
其中,层级数据库还包括缓存层,初始层的一个或多个初始有序表中包括初始有序表Si,i为正整数;关键字处理模块,包括:
第一缓存单元,用于将状态树节点的状态数据存入层级数据库的缓存层中;
初始表存储单元,用于若缓存层的状态数据的数据量,达到缓存层对应的缓存数据量阈值,则将缓存层中的状态数据存储至层级数据库中的初始层;
初始表存储单元,还用于若状态树节点相关联的存储关键字属于初始有序表Si的初始关键字范围,则将存储关键字属于初始有序表Si的初始关键字范围的状态数据,存储至初始有序表Si中。
其中,层级数据库中初始层的下一层为第一合并层,第一合并层包含一个或多个分别具有互不重叠的第一关键字范围的第一有序表,第一有序表用于按序存储属于所具有的第一关键字范围内的状态数据;关键字处理模块,包括:
第二缓存单元,用于将状态树节点的状态数据存入层级数据库的缓存层中;
初始表生成单元,用于若缓存层的状态数据的数据量,达到缓存层对应的缓存数据量阈值,则将缓存层中的状态数据存储至层级数据库中的初始层;
初始表生成单元,还用于若初始层中不存在初始有序表,则将状态数据的存储关键字从大到小顺序排列,基于初始层对应的初始表数据阈值,将顺序排列后的存储关键字划分为M个初始数据组;M为正整数;
初始表生成单元,还用于通过M个初始数据组中的存储关键字,确定M个初始数据组分别对应初始关键字范围,基于初始关键字范围生成M个初始有序表,基于初始关键字范围与存储关键字之间的关系,将状态数据存储至所关联的初始有序表中。
其中,层级数据库中初始层的下一层为第一合并层,第一合并层包含一个或多个分别具有互不重叠的第一关键字范围的第一有序表,第一有序表用于按序存储属于所具有的第一关键字范围内的状态数据;拼接处理模块,包括:
第一拼接单元,用于若第一有序表中的第一关键字范围中包含目标有序表的初始关键字范围,则将包含目标有序表的初始关键字范围的第一有序表,确定为待拼接表;
第一关联单元,用于将初始关键字范围属于待拼接表的第一关键字范围的剩余初始有序表,确定为关联有序表,将目标有序表与关联有序表拼接至待拼接表中,得到目标有序合并表;剩余初始有序表为除了目标有序表之外的初始有序表。
其中,还包括:
拼接补充模块,用于若目标有序合并表所存储的状态数据的数据量,大于第一合并层对应的第二数据量阈值,则基于待拼接有序表所存储的状态数据的数据量与待拼接有序表的第一关键字范围,在目标有序合并表中确定拼接数据组,将拼接数据组拼接至待拼接有序表;
拼接拆分模块,用于将目标有序合并表中的剩余存储关键字划分为Q个合并数据组,通过Q个合并数据组中的存储关键字,确定Q个合并数据组分别对应第一关键字范围,基于Q个合并数据组分别对应的第一关键字范围将目标有序合并表划分为Q个第一有序表,将Q个第一有序表存储至第一合并层;剩余存储关键字是指目标有序合并表中除了拼接数据组对应的存储关键字以外的存储关键字;
拼接确定模块,用于若目标有序合并表所存储的状态数据的数据量,小于或等于第一合并层对应的第二数据量阈值,则执行将目标有序合并表存储至层级数据库中的初始层的下一层的步骤。
其中,还包括:
合并拆分模块,用于若目标有序合并表所存储的状态数据的数据量,大于第一合并层对应的第二数据量阈值,则基于第二数据量阈值,将目标有序合并表中的存储关键字划分为N个合并数据组;N为正整数;第一合并层为层级数据库中的初始层的下一层;
合并拆分模块,还用于通过N个合并数据组中的存储关键字,确定N个合并数据组分别对应第一关键字范围,基于N个合并数据组分别对应的第一关键字范围将目标有序合并表划分为N个第一有序表,将N个第一有序表存储至第一合并层;
合并确定模块,用于若目标有序合并表所存储的状态数据的数据量,小于或等于第一合并层对应的第二数据量阈值,则执行将目标有序合并表存储至层级数据库中的初始层的下一层的步骤。
其中,层级数据库中初始层的下一层为第一合并层,第一合并层包含一个或多个分别具有互不重叠的第一关键字范围的第一有序表,第一有序表用于按序存储属于所具有的第一关键字范围内的状态数据;一个或多个第一有序表包括目标有序合并表;方法还包括:
跨层确定模块,用于若初始有序表所存储的状态数据的数据量,达到初始层对应的第一数据量阈值,则将达到第一数据量阈值的初始有序表,确定为跨层有序表;
跨层确定模块,还用于基于跨层有序表的初始关键字范围,将第一合并层中与跨层有序表相关联的第一有序表,确定为跨层拼接表;跨层拼接表的第一关键字范围中的最大值与目标有序表的初始关键字范围的最小值相同;
跨层处理模块,用于若跨层拼接表所存储的状态数据的数据量,达到第一合并层对应的第二数据量阈值,则将跨层有序表与跨层拼接表拼接为目标跨层合并表;
跨层处理模块,还用于将目标跨层合并表存储至层级数据库中的第一合并层的下一层。
其中,状态树节点包含状态树节点的子节点的节点高度和节点哈希,方法还包括:
子节点处理模块,用于获取状态树节点所存储的状态树节点的子节点的节点高度和节点哈希;
子节点处理模块,还用于基于状态树节点的子节点的节点高度和节点哈希,生成查询关键字,通过查询关键词查询状态树节点的子节点的状态数据。
本申请实施例一方面提供了一种计算机设备,包括:处理器、存储器以及网络接口;
处理器与存储器、网络接口相连,其中,网络接口用于提供数据通信功能,存储器用于存储计算机程序,计算机程序被处理器执行时,使得该计算机设备执行本申请实施例提供的方法。
本申请实施例一方面提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,该计算机程序适于由处理器加载并执行,以使得具有该处理器的计算机设备执行本申请实施例提供的方法。
本申请实施例一方面提供了一种计算机程序产品,该计算机程序产品包括计算机程序,该计算机程序存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机程序,处理器执行该计算机程序,使得该计算机设备执行本申请实施例提供的方法。
本申请实施例通过节点高度与节点哈希的组合,为状态树节点生成唯一标识的存储关键字,由于区块链的高度不断增加,新的业务区块所对应的状态树节点的节点高度也增加,区块链节点所生成的存储关键字在节点高度的数值上连续,并且新生成的存储关键字均会比之前的存储关键字大,因此在层级数据库的初始层中,每个初始有序表的初始关键字范围不会重叠,在层级数据库的初始层达到初始层对应的第一数据量阈值时,区块链节点可以将达到第一数据量阈值的初始有序表,确定为目标有序表,基于目标有序表的初始关键字范围,在初始层中确定关联有序表,因为初始有序表中的存储关键字不会重复,层级数据库无需对初始有序表和关联有序进行压缩合并,而是可以直接将初始有序表与关联有序表进行平移拼接,确定为目标有序合并表,将目标有序合并表存储至层级数据库中的初始层的下一层,提高了压缩合并的效率,从而加快了区块链状态数据存储。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种区块链网络的结构示意图;
图2是本申请实施例提供的一种基于区块链的数据处理场景示意图;
图3是本申请实施例提供的一种基于区块链的数据处理方法的流程示意图一;
图4是本申请实施例提供的一种基于区块链的数据处理方法的流程示意图二;
图5是本申请实施例提供的一种基于区块链的数据处理装置的结构示意图;
图6是本申请实施例提供的一种计算机设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
区块链是运行区块链技术的载体和组织方式。区块链技术(Blockchaintechnology,BT)也被称之为分布式账本技术,是一种互联网数据库技术,其特点是去中心化、公开透明,让每个人均可参与数据库记录。区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种分布式基础架构与计算方式。
为便于理解,以下将对区块链及其相关概念进行阐述:
1、区块链(Block chain):狭义上,区块链是一种以区块为基本单位的链式数据结构,区块中利用数字摘要对之前获取的交易历史进行校验,适合分布式记账场景下防篡改和可扩展性的需求;广义上,区块链还指代区块链结构实现的分布式记账技术,包括分布式共识、隐私与安全保护、点对点通信技术、网络协议、智能合约等。
区块链的目标是实现一个分布的数据记录账本,此账本只允许添加,不允许删除。账本底层的基本结构是一个线性的链表。链表由一个个“区块”串联组成,后继区块中记录前继区块的哈希(Hash)值,每个区块(以及区块中的交易)是否合法,可通过计算哈希值的方式进行快速检验。若网络中的节点提议添加一个新的区块,必须经过共识机制对区块达成共识确认。
2、区块(block):是在区块链网络上承载交易数据的数据包,是一种被标记上时间戳和前继区块对应的哈希值的数据结构,区块经过网络的共识机制验证并确认区块中的交易。区块包括区块头(Block Header)以及区块体(Block Body),区块头可以记录当前区块的元信息,包含当前版本号、前继区块对应的哈希值、时间戳、随机数、默克尔树根(MerkleRoot)的哈希值等数据。区块体可以记录一段时间内所生成的详细数据,包括当前区块经过验证的、区块创建过程中生成的所有交易记录或是其他信息,可以理解为账本的一种表现形式。此外,区块体的详细数据可以包括通过默克尔树(Merkle Tree)的哈希过程,生成唯一的Merkle Root记录于区块头。
前继区块,也称父区块(Parent Block),区块链通过在区块头记录区块对应的哈希值以及父区块对应的哈希值实现时间上的排序。
3、哈希值(hash):也称作信息特征值或特征值,哈希值是通过哈希算法将任意长度的输入数据转换为密码并进行固定输出而生成的,不能通过解密哈希值来检索原始输入数据,它是一个单向的加密函数。在区块链中,每个区块(除了初始区块)都包含前继区块的哈希值,哈希值是区块链技术中的潜力核心基础和最重要的方面,它保留了记录和查看数据的真实性,以及区块链作为一个整体的完整性。
4、智能合约(Smart Contract):智能合约的概念具备承诺、协议、数字形式三大要素,因此能够将区块链的应用范围扩展至金融行业交易、支付、结算和清算的各个环节。智能合约是指当一个预先编好的条件被触发时,立即执行相应的合同条款,其工作原理类似于计算机程序的if-then语句。请参见图1,图1是本申请实施例提供的一种区块链网络的结构示意图。如图1所示的区块链网络可以包括但不限于联盟链所对应的区块链网络。该区块链网络中可以包括多个区块链节点,多个区块链节点具体可以包括区块链节点10a、区块链节点10b、区块链节点10c、区块链节点10d、…、区块链节点10n。其中,每个区块链节点在进行正常工作时可以接收到外界发送的数据,并基于接收到的数据进行区块上链处理,也可以向外界发送数据。为了保证各个区块链节点之间的数据互通,每个区块链节点之间可以存在数据连接,例如区块链节点10a和区块链节点10b之间存在数据连接,区块链节点10a和区块链节点10c之间存在数据连接,区块链节点10b和区块链节点10c之间存在数据连接。
可以理解的是,区块链节点之间可以通过上述数据连接进行数据或者区块传输。区块链网络可以基于节点标识实现区块链节点之间的数据连接,对于区块链网络中的每个区块链节点,均具有与其对应的节点标识,而且上述每个区块链节点均可以存储与自身有相连关系的其他区块链节点的节点标识,以便后续根据其他区块链节点的节点标识,将获取到的数据或生成的区块广播至其他区块链节点。
例如区块链节点10a中可以维护一个如表1所示的节点标识列表,该节点标识列表保存着其他节点的节点名称和节点标识:
表1
节点名称 | 节点标识 |
区块链节点1 | AAA.AAA.AAA.AAA |
区块链节点2 | BBB.BBB.BBB.BBB |
区块链节点3 | CCC.CCC.CCC.CCC |
… | … |
区块链节点n | EEE.EEE.EEE.EEE |
其中,节点标识可为网络之间互联的协议(Internet Protocol,IP)地址以及其他任意一种能够用于标识区块链网络中区块链节点的信息,表1中仅以IP地址为例进行说明。例如,区块链节点1可以通过节点标识BBB.BBB.BBB.BBB向区块链节点2发送信息(例如,交易数据),且区块链节点2可以通过节点标识AAA.AAA.AAA.AAA确定该信息是由区块链节点1所发送的。
在区块链中,在将一个区块进行上链之前,该区块必须经过区块链网络中的共识节点进行共识,在共识通过后才能将该区块添加到区块链上。可以理解的是,当区块链被用于商业机构的一些场景中时,并非区块链中的所有参与节点(即上述区块链网络中的区块链节点)都有足够的资源和必要性成为区块链的共识节点。例如,在图1所示的区块链网络中,可以将区块链节点10a、区块链节点10b、区块链节点10c和区块链节点10d作为该区块链网络中的共识节点。区块链网络中的共识节点参与共识,也就是对区块(包含一批交易)进行共识,即对区块进行投票;而非共识节点不参与共识,但会帮助传播区块和投票消息,以及相互同步状态等。
可以理解,当区块链网络采用拜占庭共识机制来实现区块的共识时,区块的组装与共识的发起通常由主节点(也可称为出块节点)完成。在本申请实施例中,如图1所示的区块链网络可以采用拜占庭共识机制来实现区块的共识,此时,具有共识功能的区块链节点,例如,区块链节点10a,在确定当前区块高度的区块上链成功后,需要确定下一区块高度对应的区块对应的主节点,才能完成针对下一区块高度的区块的共识操作。
具体的,区块链节点10a可以将区块链中,业务区块所对应的区块高度,确定为该业务区块的状态树中状态树节点的节点高度。
其中,状态树可以是默克尔前缀树(Merkle Patricia Tree,MPT),区块链节点可以通过默克尔前缀树的状态树节点存储状态数据(如交易信息、转账数据等)。每个状态树中的状态树节点均包含节点哈希,单个状态树中每个状态树节点的节点高度均与所属的业务区块的区块高度相同。
区块链状态树的状态数据是可以指区块链中所有账户的状态信息,包括账户的余额、合约代码、存储数据等。这些状态数据被组织成一棵树状结构,每个节点代表一个账户或合约,节点之间通过父子关系连接起来。状态树的根节点可以存储着当前区块链的全局状态信息。
区块链节点10a可以通过状态树节点所包含的节点高度与节点哈希生成存储关键字(key)。存储关键字可以是状态树节点的状态数据在数据库存储或者读取所需的索引。
区块链节点10a可以通过状态树节点相关联的存储关键字将状态树节点的状态数据存储至层级数据库中。层级数据库可以是采用顺序读写,例如是顺序追加写的结构,例如可以是LSM-Tree(log-structured merge-tree,日志合并树)结构的多级存储数据库。
为便于理解,层级数据库可以是LevelDB(Level Data Base),LevelDB是一个可持久化的键值数据库,LevelDB可以具有多个存储层级,采用LSM-Tree结构,将磁盘的随机写转化为顺序写。
区块链节点10a可以先将状态数据存储至层级数据库的缓存层,缓存层可以是LevelDB中的缓存表(immutable memtable)中,若缓存表存储的状态数据的数据量,达到缓存层对应的缓存数据量阈值(可以是预先设置的数值),则区块链节点10a可以将缓存层中的状态数据存储至层级数据库中的初始层(可以是LevelDB的Level 0层)。层级数据库用于存储数据的表结构可以是有序表(SST,Sorted String Table)。
层级数据库中的初始层可以包含若干个初始有序表(Level 0SSTable),初始有序表可以对应一个初始关键字范围,每个初始有序表所对应的初始关键字范围互不重叠,初始有序表用于按序存储属于所具有的初始关键字范围内的状态数据。
若初始层中初始有序表所存储的状态数据的数据量,达到初始层对应的第一数据量阈值(可以是预先设置的数值),则区块链节点10a可以将达到第一数据量阈值的初始有序表,确定为目标有序表。
区块链节点10a可以基于目标有序表的初始关键字范围,在初始层中确定关联有序表,将目标有序表与关联有序表拼接为目标有序合并表。关联有序表可以与目标有序表的初始关键字范围相邻的初始有序表。
其中,目标有序表和关联有序表分别包含的状态数据在目标有序合并表中的顺序,与目标有序表和关联有序表分别对应的存储关键字的排序顺序相同。
区块链节点10a可以将目标有序合并表存储至层级数据库中的初始层的下一层,初始层的下一层可以是第一合并层(可以是LevelDB的Level 1层)。
可以理解,本申请实施例中的层级数据库中缓存层可以对应多层数据库中的内存层,初始层以及第一合并层可以分别对应多层数据库中的各个级别的磁盘层。因此层级数据库还可以是HBase(分布式存储数据库)、Cassandra(可扩展分布式数据库)、RocksDB(快速键值数据库)等数据库。
本申请实施例通过节点高度与节点哈希的组合,为状态树节点生成唯一标识的存储关键字,由于区块链的高度不断增加,新的业务区块所对应的状态树节点的节点高度也增加,区块链节点所生成的存储关键字在节点高度的数值上连续,并且新生成的存储关键字均会比之前的存储关键字大,因此在层级数据库的初始层中,每个初始有序表的初始关键字范围不会重叠,在层级数据库的初始层达到初始层对应的第一数据量阈值时,区块链节点可以将达到第一数据量阈值的初始有序表,确定为目标有序表,基于目标有序表的初始关键字范围,在初始层中确定关联有序表,因为初始有序表中的存储关键字不会重复,层级数据库无需对初始有序表和关联有序进行压缩合并,而是可以直接将初始有序表与关联有序表进行平移拼接,确定为目标有序合并表,将目标有序合并表存储至层级数据库中的初始层的下一层,提高了压缩合并的效率,从而加快了区块链状态数据存储。
请参见图2,图2是本申请实施例提供的一种基于区块链的数据处理的场景示意图。
如图2所示,区块链节点10a可以将区块链中,业务区块所对应的区块高度,确定为该业务区块的状态树中状态树节点的节点高度。例如,业务区块1的区块高度为500,那么业务区块1相关联的状态树中每个状态树节点的节点高度均为500。
其中,状态树可以是默克尔前缀树,区块链节点可以通过默克尔前缀树的状态树节点存储状态数据(如交易信息、转账数据等)。每个状态树中的状态树节点均包含节点哈希,单个状态树中每个状态树节点的节点高度均与所属的业务区块的区块高度相同。
区块链节点10a可以通过状态树节点所包含的节点高度与节点哈希生成存储关键字。存储关键字可以是状态树节点的状态数据在数据库存储或者读取所需的索引。例如,状态树节点2的状态数据(value)为状态数据2,节点高度为50,节点哈希为hash1,那么状态树节点2所对应的存储关键字可以是50hash1。
区块链节点10a可以通过状态树节点相关联存储关键字将状态树节点的状态数据存储至层级数据库中。层级数据库可以是LevelDB,LevelDB可以具有多个存储层级,如immutable memtable(可以称之为缓存层)、Level 0层(可以称之为初始层)、Level 1层(可以称之为第一合并层)、Level 2层(可以称之为第二合并层)等。层级数据库中的初始层可以包含若干个初始有序表(Level 0SSTable,L0SST),初始有序表可以对应一个初始关键字范围,每个初始有序表所对应的初始关键字范围互不重叠,初始有序表用于按序存储属于所具有的初始关键字范围内的状态数据。层级数据库中的第一合并层可以包含若干个第一有序表(Level 1SSTable,L1 SST),第一有序表可以对应一个第一关键字范围,每个第一有序表所对应的第一关键字范围互不重叠,第一有序表用于按序存储属于所具有的第一关键字范围内的状态数据。
例如,区块链节点可以通过存储关键字500hash1与状态数据2组成键值对,通过LevelDB有序存储状态数据2。
区块链节点10a可以先将状态数据存储至层级数据库的缓存层中,若缓存层所存储的状态数据的数据量,达到缓存层对应的缓存数据量阈值,则区块链节点10a可以将缓存层中的状态数据存储至层级数据库中的初始层。
其中,缓存数据量阈值可以是预先设置的数值,缓存数据量阈值可以是限制数据条数的数值,也可以是限制数据量大小的数值,本申请实施例在此不做限制。
例如,如图2所示,“L0 SST1”可以是“Level0 SSTable1”,也可以称之为初始有序表1,初始有序表1的初始关键字范围可以是“0hash-50hash”,其中,0和50可以是指节点高度,hash是指节点哈希,可以表示为hash1、hash2等,具体可以是十六进制字符串。“L0SST2”对应的初始有序表2的初始关键字范围可以是“51hash-100hash”。
若初始层中初始有序表所存储的状态数据的数据量,达到初始层对应的第一数据量阈值(可以是预先设置的数值),则区块链节点10a可以将达到第一数据量阈值的初始有序表,确定为目标有序表。
区块链节点10a可以基于目标有序表的初始关键字范围,在初始层中确定关联有序表,将目标有序表与关联有序表拼接为目标有序合并表。关联有序表可以与目标有序表的初始关键字范围相邻的初始有序表。
其中,目标有序表和关联有序表分别包含的状态数据在目标有序合并表中的顺序,与目标有序表和所联有序表分别对应的存储关键字的排序顺序相同。
例如,初始层中,“L0 SST1”对应的初始有序表1所存储的状态数据的数据量,达到初始层对应的第一数据量阈值,那么区块链节点10a可以将达到第一数据量阈值的初始有序表1,确定为目标有序表。区块链节点10a可以基于目标有序表的初始关键字范围“0hash-50hash”,确定初始关键字范围是“51hash-100hash”的初始有序表2(L0 SST2)为关联有序表,区块链节点10a可以将目标有序表与关联有序表拼接为目标有序合并表。
区块链节点10a可以将目标有序合并表存储至层级数据库中的初始层的下一层,初始层的下一层可以是第一合并层(可以是LevelDB的Level 1层)。例如可以将目标有序合并表确定为“L1 SST1”对应的第一有序表1,第一有序表1的第一关键字范围可以是“0hash-100hash”。
可以理解,本申请实施例中的层级数据库中缓存层可以对应多层数据库中的内存层,初始层以及第一合并层可以分别对应多层数据库中的各个级别的磁盘层。因此层级数据库还可以是HBase(分布式存储数据库)、Cassandra(可扩展分布式数据库)、RocksDB(快速键值数据库)等数据库。
本申请实施例通过节点高度与节点哈希的组合,为状态树节点生成唯一标识的存储关键字,由于区块链的高度不断增加,新的业务区块所对应的状态树节点的节点高度也增加,区块链节点所生成的存储关键字在节点高度的数值上连续,并且新生成的存储关键字均会比之前的存储关键字大,因此在层级数据库的初始层中,每个初始有序表的初始关键字范围不会重叠,在层级数据库的初始层达到初始层对应的第一数据量阈值时,区块链节点可以将达到第一数据量阈值的初始有序表,确定为目标有序表,基于目标有序表的初始关键字范围,在初始层中确定关联有序表,因为初始有序表中的存储关键字不会重复,层级数据库无需对初始有序表和关联有序进行压缩合并,而是可以直接将初始有序表与关联有序表进行平移拼接,确定为目标有序合并表,将目标有序合并表存储至层级数据库中的初始层的下一层,提高了压缩合并的效率,从而加快了区块链状态数据存储。
请参见图3,图3是本申请实施例提供的一种基于区块链的数据处理方法的流程示意图一,该基于区块链的数据处理方法可以由区块链节点执行,区块链节点可以是如图1所示的任一区块链节点,例如可以是区块链节点10a。以下将以本数据处理方法由区块链节点执行为例进行说明。其中,该基于区块链的数据处理方法至少可以包括以下步骤S101-步骤S104:
步骤S101,根据区块链中的业务区块分别对应的区块高度,确定业务区块关联的状态树的状态树节点的节点高度;每个状态树的状态树节点均包含节点哈希,单个状态树中每个状态树节点的节点高度均与所属的业务区块的区块高度相同;
具体的,区块链节点可以将区块链中,业务区块所对应的区块高度,确定为该业务区块的状态树中状态树节点的节点高度。
其中,状态树可以是默克尔前缀树,区块链节点可以通过默克尔前缀树的状态树节点存储状态数据(如交易信息、转账数据等)。每个状态树中的状态树节点均包含节点哈希,单个状态树中每个状态树节点的节点高度均与所属的业务区块的区块高度相同。
区块链状态树的状态数据是可以指区块链中所有账户的状态信息,包括账户的余额、合约代码、存储数据等。这些状态数据被组织成一棵树状结构,每个节点代表一个账户或合约,节点之间通过父子关系连接起来。状态树的根节点可以存储着当前区块链的全局状态信息。
可以理解,在状态树的状态树节点中,对于一个新的区块高度,有新的状态树节点插入时,新的状态树节点的节点高度为新的区块高度。
步骤S102,通过节点高度与节点哈希生成状态树节点的存储关键字,基于状态树节点相关联的存储关键字,将状态树节点的状态数据存入层级数据库中;层级数据库包括初始层,初始层包含一个或多个分别具有互不重叠的初始关键字范围的初始有序表,初始有序表用于按序存储属于所具有的初始关键字范围内的状态数据;
具体的,区块链节点可以通过状态树节点所包含的节点高度与节点哈希生成存储关键字,存储关键字可以是状态树节点的状态数据在数据库存储或者读取所需的索引。
区块链节点可以将节点高度对应的第一字符串与节点哈希对应的第二字符串进行拼接得到存储关键字,第一字符串可以是存储关键字的头部字符段落,第二字符串可以是存储关键字的尾部字符段落,即存储关键字的前部分为节点高度对应的第一字符串。
例如,状态树节点3的状态数据(value)为状态数据3,节点高度为45,节点哈希为hash3,那么状态树节点3所对应的存储关键字(key)可以是45hash3。
可以理解,由于区块链的高度不断增加,新的业务区块所对应的状态树节点的节点高度也增加,区块链节点所生成的存储关键字在节点高度的数值上连续,因此存储关键字之间不会重复,并且新生成的存储关键字均会比之前的存储关键字大,从而在层级数据库存储时,不会因为存储关键字范围重叠而进行压缩,提高了区块链状态数据的存储效率。
区块链节点可以通过状态树节点相关联存储关键字将状态树节点的状态数据存储至层级数据库中。层级数据库可以是采用顺序读写,例如是顺序追加写的结构,例如可以是日志合并树结构的多级存储数据库。
层级数据库可以是LevelDB,层级数据库中缓存层可以对应多层数据库中的内存层,初始层以及第一合并层可以分别对应多层数据库中的各个级别的磁盘层。因此层级数据库还可以是HBase、Cassandra、RocksDB等数据库。
层级数据库中的初始层可以包含若干个初始有序表,初始有序表可以对应一个初始关键字范围,每个初始有序表所对应的初始关键字范围互不重叠,初始有序表用于按序存储属于所具有的初始关键字范围内的状态数据。层级数据库中的第一合并层可以包含若干个第一有序表,第一有序表可以对应一个第一关键字范围,每个第一有序表所对应的第一关键字范围互不重叠,第一有序表用于按序存储属于所具有的第一关键字范围内的状态数据。
为便于理解,层级数据库可以是LevelDB,LevelDB是一个可持久化的键值数据库,LevelDB可以具有多个存储层级,采用LSM-Tree结构,将磁盘的随机写转化为顺序写。
层级数据库用于存储数据的表结构可以是有序表,以初始层中的初始有序表1(L0SST1)为例,该有序表中存储关键字与状态数据可以如表2所示:
表2
其中,初始有序表1对应的初始关键字范围1可以是0hash-50hash,其中,0和50可以是指节点高度,hash是指节点哈希,可以表示为hash1、hash2等,具体可以是十六进制字符串。存储关键字“0hash1”、“0hash2”、“1hash3”、“50hash4”、“50hash5”可以均属于初始关键字范围1(0hash-50hash)。“0hash1”可以是区块高度为0的业务区块相关联的状态树的状态树节点1所生成的存储关键字,状态树节点1所存储的状态数据可以是value01,“0hash2”可以是区块高度为0的业务区块相关联的状态树的状态树节点2所生成的存储关键字,状态树节点2所存储的状态数据可以是value02,“1hash3”可以是区块高度为1的业务区块相关联的状态树的状态树节点3所生成的存储关键字,状态树节点3所存储的状态数据可以是value13,“50hash4”可以是区块高度为50的业务区块相关联的状态树的状态树节点4所生成的存储关键字,状态树节点4所存储的状态数据可以是value54,“50hash5”可以是区块高度为50的业务区块相关联的状态树的状态树节点5所生成的存储关键字,状态树节点5所存储的状态数据可以是value55。
步骤S103,若初始有序表所存储的状态数据的数据量,达到初始层对应的第一数据量阈值,则将达到第一数据量阈值的初始有序表,确定为目标有序表,基于目标有序表的初始关键字范围,在初始层中确定关联有序表,将目标有序表与关联有序表拼接为目标有序合并表;目标有序表和关联有序表分别包含的状态数据在目标有序合并表中的顺序,与目标有序表和关联有序表分别对应的存储关键字的排序顺序相同;
具体的,若初始层中初始有序表所存储的状态数据的数据量,达到初始层对应的第一数据量阈值(可以是预先设置的数值),则区块链节点可以将达到第一数据量阈值的初始有序表,确定为目标有序表。
区块链节点可以基于目标有序表的初始关键字范围,在初始层中确定关联有序表,将目标有序表与关联有序表拼接为目标有序合并表。
其中,目标有序表和关联有序表分别包含的状态数据在目标有序合并表中的顺序,与目标有序表和所联有序表分别对应的存储关键字的排序顺序相同。
例如,初始层中初始有序表1的初始关键字范围1是0hash-50hash,初始有序表2的初始关键字范围2是51hash-100hash,初始关键字范围1的最大值与初始有序表2的最小值在数值上连续或者相等,那么当初始有序表1所存储的状态数据的数据量达到初始层对应的第一数据量阈值时,初始有序表2就可以被确定为初始有序表1的关联有序表。
步骤S104,将目标有序合并表存储至层级数据库中的初始层的下一层。
具体的,区块链节点可以将目标有序合并表存储至层级数据库中的初始层的下一层,初始层的下一层可以是第一合并层。
本申请实施例通过根据区块链中的业务区块分别对应的区块高度,确定业务区块关联的状态树的状态树节点的节点高度;每个状态树的状态树节点均包含节点哈希,单个状态树中每个状态树节点的节点高度均与所属的业务区块的区块高度相同;通过节点高度与节点哈希生成状态树节点的存储关键字,基于状态树节点相关联的存储关键字,将状态树节点的状态数据存入层级数据库中;层级数据库包括初始层,初始层包含一个或多个分别具有互不重叠的初始关键字范围的初始有序表,初始有序表用于按序存储属于所具有的初始关键字范围内的状态数据;若初始有序表所存储的状态数据的数据量,达到初始层对应的第一数据量阈值,则将达到第一数据量阈值的初始有序表,确定为目标有序表,基于目标有序表的初始关键字范围,在初始层中确定关联有序表,将目标有序表与关联有序表拼接为目标有序合并表;目标有序表和关联有序表分别包含的状态数据在目标有序合并表中的顺序,与目标有序表和关联有序表分别对应的存储关键字的排序顺序相同;将目标有序合并表存储至层级数据库中的初始层的下一层。由此可见,本申请实施例通过节点高度与节点哈希的组合,为状态树节点生成唯一标识的存储关键字,由于区块链的高度不断增加,新的业务区块所对应的状态树节点的节点高度也增加,区块链节点所生成的存储关键字在节点高度的数值上连续,并且新生成的存储关键字均会比之前的存储关键字大,因此在层级数据库的初始层中,每个初始有序表的初始关键字范围不会重叠,初始有序表的初始关键字范围的最大值也与下一个初始有序表初始关键字范围的最小值连续,在层级数据库的初始层达到初始层对应的第一数据量阈值时,区块链节点可以将达到第一数据量阈值的初始有序表,确定为目标有序表,基于目标有序表的初始关键字范围,在初始层中确定关联有序表,因为初始有序表中的存储关键字不会重复,并且顺序排列,层级数据库无需对初始有序表和关联有序进行压缩合并,而是可以直接将初始有序表与关联有序表进行平移拼接,确定为目标有序合并表,将目标有序合并表存储至层级数据库中的初始层的下一层,提高了压缩合并的效率,从而加快了区块链状态数据存储。
请参见图4,图4是本申请实施例提供的一种基于区块链的数据处理方法的流程示意图二,该基于区块链的数据处理方法可以由区块链节点执行,区块链节点可以是如图1所示的任一区块链节点,例如可以是区块链节点10a。以下将以本数据处理方法由区块链节点执行为例进行说明。以下将以本数据处理方法由资源客户端执行为例进行说明。其中,该基于区块链的数据处理方法至少可以包括以下步骤S201-步骤S205:
步骤S201,根据区块链中的业务区块分别对应的区块高度,确定业务区块关联的状态树的状态树节点的节点高度;
具体的,可以参见上述图3实施例步骤S101对应的具体描述。
步骤S202,通过节点高度与节点哈希生成状态树节点的存储关键字;
具体的,区块链节点可以通过状态树节点所包含的节点高度与节点哈希生成存储关键字,存储关键字可以是状态树节点的状态数据在数据库存储或者读取所需的索引。
可选的,区块链节点也可以通过节点高度、状态树的地址以及节点前缀生成存储关键字,其过程可以是:获取状态树为状态树节点分配的节点前缀;基于节点高度、状态树的地址以及节点前缀,生成状态树节点的存储关键字。
具体的,节点前缀可以是状态树为存储状态数据,为状态树节点分配的字符前缀或者字符串前缀,状态树通过各个节点所共有的字符段落,确定状态树各个状态树节点的子节点,例如状态树节点1的节点前缀1为98abc76,状态树节点2的节点前缀2为98abc54,状态树节点3的节点前缀3为98def12,区块链节点可以确定节点前缀1、节点前缀2和节点前缀3共有的字符段落“98”为扩展节点1的字符串前缀,确定节点前缀1和节点前缀2共有的字符段落“abc”为下一个节点(扩展节点2)的字符串前缀,其中,扩展节点1的子节点有扩展节点2和状态树节点1,扩展节点2的子节点有状态树节点1和状态树节点2。
区块链节点可以通过业务区块的区块高度确定节点高度,由于区块链中各个状态树的状态树节点的节点哈希可能相同,所以通过状态树的地址和节点前缀,来确定每一个状态树节点。因此,区块链节点也可以通过节点高度所对应的第一字符串、以及状态树的地址对应的字符串和节点前缀对应的第三字符串生成存储关键字。
区块链节点可以将节点高度对应的第一字符串与第三字符串进行拼接得到存储关键字,第一字符串可以是存储关键字的头部字符段落,第三字符串可以是存储关键字的尾部字符段落,即存储关键字的前部分为节点高度对应的第一字符串。
可以理解,本申请实施例通过节点高度与节点哈希的组合,或者节点高度、状态树的地址与节点前缀的组合,为状态树节点生成唯一标识的存储关键字,由于区块链的高度不断增加,新的业务区块所对应的状态树节点的节点高度也增加,区块链节点所生成的存储关键字在节点高度的数值上连续,并且新生成的存储关键字均会比之前的存储关键字大,因此,本方案也可以是通过一定的函数及函数组合(例如可以是哈希函数),为每个状态树节点生成唯一的映射值,映射值可以是十六进制字符串,新生成的映射值的数值可以不断增大,区块链节点也可以将映射值作为状态树节点的存储关键字,本申请实施例在此不做限制。
可选的,状态树节点可以存储子节点的节点哈希与节点高度,层级数据库可以通过状态树节点查询其子节点的状态数据,其过程可以是:获取状态树节点所存储的状态树节点的子节点的节点高度和节点哈希;基于状态树节点的子节点的节点高度和节点哈希,生成查询关键字,通过查询关键词查询状态树节点的子节点的状态数据。
具体的,业务区块的状态树的状态树节点状态树节点可以存储子节点的节点哈希(next node Hash)与子节点的节点高度(commitHeight),层级数据库可以通过状态树节点所存储的节点高度与节点哈希,生成查询关键字,查询关键字可以与状态树节点的子节点的存储关键字相同,区块链节点可以通过查询关键词查询状态树节点的子节点的状态数据。
步骤S203,层级数据库还包括缓存层,初始层的一个或多个初始有序表中包括初始有序表Si,i为正整数。将状态树节点的状态数据存入层级数据库的缓存层中;若缓存层的状态数据的数据量,达到缓存层对应的缓存数据量阈值,则将缓存层中的状态数据存储至层级数据库中的初始层;若状态树节点相关联的存储关键字属于初始有序表Si的初始关键字范围,则将存储关键字属于初始有序表Si的初始关键字范围的状态数据,存储至初始有序表Si中。
具体的,区块链节点可以将状态树节点的状态数据存入层级数据库的缓存层中。
层级数据库可以是LevelDB,层级数据库中缓存层可以对应多层数据库中的内存层,初始层以及第一合并层可以分别对应多层数据库中的各个级别的磁盘层。因此层级数据库还可以是HBase、Cassandra、RocksDB等数据库。
层级数据库可以包括缓存层、初始层、第一合并层和第二合并层等,缓存层可以是内存层,初始层、第一合并层和第二合并层可以是磁盘层。
层级数据库中的缓存层可以包括若干个缓存表。
层级数据库中的初始层可以包含若干个初始有序表,初始有序表可以对应一个初始关键字范围,每个初始有序表所对应的初始关键字范围互不重叠,初始有序表用于按序存储属于所具有的初始关键字范围内的状态数据。初始有序表中的状态数据是基于存储关键字从小到大有序排列的。
层级数据库中的第一合并层可以包含若干个第一有序表,第一有序表可以对应一个第一关键字范围,每个第一有序表所对应的第一关键字范围互不重叠,第一有序表用于按序存储属于所具有的第一关键字范围内的状态数据。第一有序表中的状态数据是基于存储关键字从小到大有序排列的。
为便于理解,层级数据库可以是LevelDB,LevelDB是一个可持久化的键值数据库,LevelDB可以具有多个存储层级,采用LSM-Tree结构,将磁盘的随机写转化为顺序写。
可以理解,缓存层到初始层的存储方式可以是,缓存层的状态数据的数据量,达到缓存层对应的缓存数据量阈值,即插入的状态数据占用内存到了一个界限后,层级数据库生成新的日志(Log)文件和缓存表,达到缓存数据量阈值的缓存表只接受读操作,不再接受写操作,层级数据库可以后台调度会将达到缓存数据量阈值的缓存表的状态数据导出到磁盘,生成初始层中的初始表。缓存表所能存储的数据量可以和初始有序表所能存储的数据量相等。
层级数据库生成新的初始表的过程可以是:将状态树节点的状态数据存入层级数据库的缓存层中;若缓存层的状态数据的数据量,达到缓存层对应的缓存数据量阈值,则将缓存层中的状态数据存储至层级数据库中的初始层;若初始层中不存在初始有序表,则将状态数据的存储关键字从大到小顺序排列,基于初始层对应的初始表数据阈值,将顺序排列后的存储关键字划分为M个初始数据组;M为正整数;通过M个初始数据组中的存储关键字,确定M个初始数据组分别对应初始关键字范围,基于初始关键字范围生成M个初始有序表,基于初始关键字范围与存储关键字之间的关系,将状态数据存储至所关联的初始有序表中。
具体的,区块链节点可以将状态树节点的状态数据存入层级数据库的缓存层中。
若缓存层的状态数据的数据量,达到缓存层对应的缓存数据量阈值,则区块链节点可以将缓存层中的状态数据存储至层级数据库中的初始层。
若初始层中不存在初始有序表,则区块链节点可以将一个或者多个缓存表中的状态数据的存储关键字从大到小顺序排列,基于初始层对应的初始表数据阈值,将顺序排列后的存储关键字划分为若干个初始数据组。
其中,若干个初始数据组所存储的状态数据的数据量可以与初始层对应的初始表数据阈值相等,未达到初始层对应的初始表数据阈值的初始数据组可以重新存储至缓存表中,当缓存表所状态数据的数据量,达到缓存层对应的缓存数据量阈值时,重新确定性的初始数据组。
区块链节点可以通过初始数据组中的存储关键字,确定每个初始数据组分别对应初始关键字范围,例如初始数据组1中所包含的存储关键字分别为“0hash”、“1hash”、“2hash”、……、“49hash”、“50hash”,那么区块链节点可以确定初始数据组1的初始关键字范围1可以表示为“0hash-50hash”。
区块链节点可以基于初始关键字范围生成初始有序表,基于初始关键字范围与存储关键字之间的关系,将状态数据存储至所关联的初始有序表中。
区块链节点可以将属于初始关键字范围内的存储关键字所对应的状态数据,存储至所对应的初始有序表中。例如,状态数据2所对应的存储关键字为“0hash2”,那么区块链节点可以将状态数据2存储至初始数据组1所生成的初始有序表中。
步骤S204,若初始有序表所存储的状态数据的数据量,达到初始层对应的第一数据量阈值,则将达到第一数据量阈值的初始有序表,确定为目标有序表,基于目标有序表的初始关键字范围,在初始层中确定关联有序表,将目标有序表与关联有序表拼接为目标有序合并表;目标有序表和关联有序表分别包含的状态数据在目标有序合并表中的顺序,与目标有序表和关联有序表分别对应的存储关键字的排序顺序相同;
具体的,若初始层中初始有序表所存储的状态数据的数据量,达到初始层对应的第一数据量阈值(可以是预先设置的数值),则区块链节点可以将达到第一数据量阈值的初始有序表,确定为目标有序表。
区块链节点可以基于目标有序表的初始关键字范围,在初始层中确定关联有序表,将目标有序表与关联有序表拼接为目标有序合并表。
其中,目标有序表和关联有序表分别包含的状态数据在目标有序合并表中的顺序,与目标有序表和所联有序表分别对应的存储关键字的排序顺序相同。
例如,初始层中初始有序表1的初始关键字范围1是0hash-50hash,初始有序表2的初始关键字范围2是51hash-100hash,初始关键字范围1的最大值与初始有序表2的最小值在数值上连续或者相等,那么当初始有序表1所存储的状态数据的数据量达到初始层对应的第一数据量阈值时,初始有序表2就可以被确定为初始有序表1的关联有序表。
可选的,区块链节点可以将目标有序表与关联有序表直接拼接至第一合并层的第一有序表中,其过程可以是:若第一有序表中的第一关键字范围中包含目标有序表的初始关键字范围,则将包含目标有序表的初始关键字范围的第一有序表,确定为待拼接表;将初始关键字范围属于待拼接表的第一关键字范围的剩余初始有序表,确定为关联有序表,将目标有序表与关联有序表拼接至待拼接表中,得到目标有序合并表;剩余初始有序表为除了目标有序表之外的初始有序表。
具体的,若第一有序表中的第一关键字范围中包含目标有序表的初始关键字范围,则区块链节点可以将包含目标有序表的初始关键字范围的第一有序表,确定为待拼接表。
例如,在层级数据库的第一合并层有第一有序表1,第一有序表的第一关键字范围1可以是“0hash-100hash”,初始层中初始有序表1的初始关键字范围1是0hash-50hash,初始有序表2的初始关键字范围2是51hash-100hash,初始关键字范围1的最大值与初始有序表2的最小值在数值上连续或者相等,那么当初始有序表1所存储的状态数据的数据量达到初始层对应的第一数据量阈值时,初始有序表2就可以被确定为初始有序表1的关联有序表,第一有序表1的第一关键字范围1包含初始有序表1的初始关键字范围,区块链节点可以将第一有序表1确定为待拼接表。
区块链节点可以将目标有序表与关联有序表拼接至待拼接表中,得到目标有序合并表。例如区块链节点可以将初始有序表1、初始有序表2拼接至第一有序表1中,得到目标有序合并表。
拼接后的目标有序表可能超出层级数据库第一合并层对应的第二数据量阈值,层级数据库可以将目标有序合并进行拆分,确定为多个第一有序表。其过程可以是:若目标有序合并表所存储的状态数据的数据量,大于第一合并层对应的第二数据量阈值,则基于待拼接有序表所存储的状态数据的数据量与待拼接有序表的第一关键字范围,在目标有序合并表中确定拼接数据组,将拼接数据组拼接至待拼接有序表;将目标有序合并表中的剩余存储关键字划分为Q个合并数据组,通过Q个合并数据组中的存储关键字,确定Q个合并数据组分别对应第一关键字范围,基于Q个合并数据组分别对应的第一关键字范围将目标有序合并表划分为Q个第一有序表,将Q个第一有序表存储至第一合并层;剩余存储关键字是指目标有序合并表中除了拼接数据组对应的存储关键字以外的存储关键字;若目标有序合并表所存储的状态数据的数据量,小于或等于第一合并层对应的第二数据量阈值,则执行将目标有序合并表存储至层级数据库中的初始层的下一层的步骤。
具体的,若目标有序合并表所存储的状态数据的数据量,大于第一合并层对应的第二数据量阈值(可以是预先设置的数值),则区块链节点可以基于待拼接有序表所存储的状态数据的数据量与待拼接有序表的第一关键字范围,在目标有序合并表中确定拼接数据组,区块链节点可以将拼接数据组拼接至待拼接有序表。
其中,拼接数据组的数据量可以是第二数据量阈值与待拼接有序表所存储的状态数据的数据量的差值,使得待拼接有序表在完成拼接后,所存储的数据量达到第二数据量阈值,区块链节点可以通过拼接后的待拼接有序表确定为一个第一有序表,通过该第一有序表所存储的存储关键字,重新确定该第一有序表的第一关键字范围。
区块链节点可以将目标有序合并表中的剩余存储关键字划分为若干个合并数据组,通过每个合并数据组中的存储关键字,确定每个合并数据组分别对应第一关键字范围。其中,剩余存储关键字是指目标有序合并表中除了拼接数据组对应的存储关键字以外的存储关键字。
其中,若干个合并数据组所存储的状态数据的数据量可以与第一合并层对应的第二数据量阈值相等,未达到第一合并层对应的第二数据量阈值也可以被确定为一个合并数据组,并通过所存储的存储关键字与第二数据量阈值确定其第一关键字范围。
例如合并数据组1中所包含的存储关键字分别为“101hash”、“102hash”、“103hash”、……、“199hash”、“200hash”,那么区块链节点可以确定合并数据组1的第一关键字范围1可以表示为“101hash-200hash”。
合并数据组2中所包含的存储关键字分别为“201hash”、“202hash”、“203hash”、……、“261hash”、“2262hash”,合并数据组所存储的数据量未达到第二数据量阈值,区块链节点可以通过存储关键字的最小值“201hash”与第二数据量阈值确定合并数据组2的第一关键字范围2可以表示为“201hash-300hash”。
区块链节点可以通过合并数据组分别对应的第一关键字范围将目标有序合并表划分为若干个第一有序表,区块链节点可以将若干个第一有序表存储至第一合并层。
若目标有序合并表所存储的状态数据的数据量,小于或等于第一合并层对应的第二数据量阈值,则区块链节点可以将目标有序合并表存储至层级数据库中的初始层的下一层。
步骤S205,若目标有序合并表所存储的状态数据的数据量,大于第一合并层对应的第二数据量阈值,则基于第二数据量阈值,将目标有序合并表中的存储关键字划分为N个合并数据组;N为正整数;第一合并层为层级数据库中的初始层的下一层;通过N个合并数据组中的存储关键字,确定N个合并数据组分别对应第一关键字范围,基于N个合并数据组分别对应的第一关键字范围将目标有序合并表划分为N个第一有序表,将N个第一有序表存储至第一合并层;若目标有序合并表所存储的状态数据的数据量,小于或等于第一合并层对应的第二数据量阈值,则执行将目标有序合并表存储至层级数据库中的初始层的下一层的步骤。
具体的,目标有序合并表所存储的数据量可能大于第一合并层对应的第二数据量阈值。
若目标有序合并表所存储的状态数据的数据量,大于第一合并层对应的第二数据量阈值,则区块链节点可以基于第二数据量阈值,将目标有序合并表中的存储关键字划分为若干个合并数据组。
区块链节点可以通过合并数据组中的存储关键字,确定每个合并数据组分别对应第一关键字范围,基于每个合并数据组分别对应的第一关键字范围将目标有序合并表划分为若干个第一有序表,将若干个第一有序表存储至第一合并层。
其中,划分合并数据组与确定每个合并数据组分别对应第一关键字范围的内容可以参照上述步骤S204的具体描述。
若目标有序合并表所存储的状态数据的数据量,小于或等于第一合并层对应的第二数据量阈值,则区块链节点可以将目标有序合并表存储至层级数据库中的初始层的下一层。
可选的,初始层与第一合并层中的初始有序表与第一有序表也可以进行跨层合并,其过程可以是:若初始有序表所存储的状态数据的数据量,达到初始层对应的第一数据量阈值,则将达到第一数据量阈值的初始有序表,确定为跨层有序表;基于跨层有序表的初始关键字范围,将第一合并层中与跨层有序表相关联的第一有序表,确定为跨层拼接表;跨层拼接表的第一关键字范围中的最大值与目标有序表的初始关键字范围的最小值相同;若跨层拼接表所存储的状态数据的数据量,达到第一合并层对应的第二数据量阈值,则将跨层有序表与跨层拼接表拼接为目标跨层合并表;将目标跨层合并表存储至层级数据库中的第一合并层的下一层。
具体的,若初始有序表所存储的状态数据的数据量,达到初始层对应的第一数据量阈值,则区块链节点可以将达到第一数据量阈值的初始有序表,确定为跨层有序表。
区块链节点可以基于跨层有序表的初始关键字范围,将第一合并层中与跨层有序表相关联的第一有序表,确定为跨层拼接表。
例如,初始有序表3所所存储的状态数据的数据量,达到初始层对应的第一数据量阈值,那么区块链节点可以将达到第一数据量阈值的初始有序表3,确定为跨层有序表初始有序表3的初始关键字范围3可以是“151hash-200hash”。区块链节点可以将第一关键字范围的最大值与初始关键字范围3的最大值相同的第一有序表,确定为跨层拼接表,例如第一有序表1的第一关键字范围1是“0hash-200hash”,那么区块链节点可以确定第一有序表1为跨层拼接表。
区块链节点可以将跨层有序表与跨层拼接表拼接为目标跨层合并表,将目标跨层合并表存储至层级数据库中的第一合并层的下一层。
其中,层级数据库中的第一合并层的下一层可以是第二合并层。
本申请实施例通过根据区块链中的业务区块分别对应的区块高度,确定业务区块关联的状态树的状态树节点的节点高度;通过节点高度与节点哈希生成状态树节点的存储关键字;层级数据库还包括缓存层,初始层的一个或多个初始有序表中包括初始有序表Si,i为正整数。将状态树节点的状态数据存入层级数据库的缓存层中;若缓存层的状态数据的数据量,达到缓存层对应的缓存数据量阈值,则将缓存层中的状态数据存储至层级数据库中的初始层;若状态树节点相关联的存储关键字属于初始有序表Si的初始关键字范围,则将存储关键字属于初始有序表Si的初始关键字范围的状态数据,存储至初始有序表Si中。若初始有序表所存储的状态数据的数据量,达到初始层对应的第一数据量阈值,则将达到第一数据量阈值的初始有序表,确定为目标有序表,基于目标有序表的初始关键字范围,在初始层中确定关联有序表,将目标有序表与关联有序表拼接为目标有序合并表;目标有序表和关联有序表分别包含的状态数据在目标有序合并表中的顺序,与目标有序表和关联有序表分别对应的存储关键字的排序顺序相同;若目标有序合并表所存储的状态数据的数据量,大于第一合并层对应的第二数据量阈值,则基于第二数据量阈值,将目标有序合并表中的存储关键字划分为N个合并数据组;N为正整数;第一合并层为层级数据库中的初始层的下一层;通过N个合并数据组中的存储关键字,确定N个合并数据组分别对应第一关键字范围,基于N个合并数据组分别对应的第一关键字范围将目标有序合并表划分为N个第一有序表,将N个第一有序表存储至第一合并层;若目标有序合并表所存储的状态数据的数据量,小于或等于第一合并层对应的第二数据量阈值,则执行将目标有序合并表存储至层级数据库中的初始层的下一层的步骤。由此可见,本申请实施例通过节点高度与节点哈希的组合,或者节点高度、状态树的地址与节点前缀的组合,为状态树节点生成唯一标识的存储关键字,由于区块链的高度不断增加,新的业务区块所对应的状态树节点的节点高度也增加,区块链节点所生成的存储关键字在节点高度的数值上连续,并且新生成的存储关键字均会比之前的存储关键字大,因此在层级数据库的初始层中,每个初始有序表的初始关键字范围不会重叠,初始有序表的初始关键字范围的最大值也与下一个初始有序表初始关键字范围的最小值连续,在层级数据库的初始层达到初始层对应的第一数据量阈值时,区块链节点可以将达到第一数据量阈值的初始有序表,确定为目标有序表,基于目标有序表的初始关键字范围,在初始层中确定关联有序表,因为初始有序表中的存储关键字不会重复,并且顺序排列,层级数据库无需对初始有序表和关联有序进行压缩合并,而是可以直接将初始有序表与关联有序表进行平移拼接,确定为目标有序合并表,将目标有序合并表存储至层级数据库中的初始层的下一层,提高了压缩合并的效率,从而加快了区块链状态数据存储。
另一方面,可以在初始层中确定目标有序表与关联有序表来拼接成为目标有序合并表,也可以在第一合并层中确定待拼接表,将目标有序表与关联有序表拼接至待拼接表中成为目标有序合并表,目标有序合并表也可以拆分为多个第一有序表,层级数据库也可以将初始层的初始有序表与第一合并层的第一有序表进行跨层拼接,提高了层级数据库数据存储的兼容性与可行性。
请参见图5,图5是本申请实施例提供的一种基于区块链的数据处理装置的结构示意图一。如图5所示,该数据处理装置1包括节点高度确定模块500、关键字处理模块510、拼接处理模块520、存储模块530、拼接补充模块540、拼接拆分模块550、拼接确定单元560、合并拆分模块570、合并确定模块580、跨层确定模块590、跨层处理模块600和子节点处理模块610。其中,关键字处理模块510包括第一缓存单元511、初始表存储单元512、第二缓存单元513、初始表生成单元514。拼接处理模块520包括第一拼接单元521和第一关联单元522。
节点高度确定模块500,用于根据区块链中的业务区块分别对应的区块高度,确定业务区块关联的状态树的状态树节点的节点高度;每个状态树的状态树节点均包含节点哈希,单个状态树中每个状态树节点的节点高度均与所属的业务区块的区块高度相同;节点高度确定模块500的具体功能可以参见上述图3对应实施例的步骤S101的具体描述,在此不再赘述。
关键字处理模块510,用于通过节点高度与节点哈希生成状态树节点的存储关键字,基于状态树节点相关联的存储关键字,将状态树节点的状态数据存入层级数据库中;层级数据库包括初始层,初始层包含一个或多个分别具有互不重叠的初始关键字范围的初始有序表,初始有序表用于按序存储属于所具有的初始关键字范围内的状态数据;关键字处理模块510的具体功能可以参见上述图3对应实施例的步骤S102的具体描述,在此不再赘述。
其中,关键字处理模块510包括第一缓存单元511、初始表存储单元512、第二缓存单元513、初始表生成单元514。
第一缓存单元511,用于将状态树节点的状态数据存入层级数据库的缓存层中;
初始表存储单元512,用于若缓存层的状态数据的数据量,达到缓存层对应的缓存数据量阈值,则将缓存层中的状态数据存储至层级数据库中的初始层;
初始表存储单元512,还用于若状态树节点相关联的存储关键字属于初始有序表Si的初始关键字范围,则将存储关键字属于初始有序表Si的初始关键字范围的状态数据,存储至初始有序表Si中。
第二缓存单元513,用于将状态树节点的状态数据存入层级数据库的缓存层中;
初始表生成单元514,用于若缓存层的状态数据的数据量,达到缓存层对应的缓存数据量阈值,则将缓存层中的状态数据存储至层级数据库中的初始层;
初始表生成单元514,还用于若初始层中不存在初始有序表,则将状态数据的存储关键字从大到小顺序排列,基于初始层对应的初始表数据阈值,将顺序排列后的存储关键字划分为M个初始数据组;M为正整数;
初始表生成单元514,还用于通过M个初始数据组中的存储关键字,确定M个初始数据组分别对应初始关键字范围,基于初始关键字范围生成M个初始有序表,基于初始关键字范围与存储关键字之间的关系,将状态数据存储至所关联的初始有序表中。
第一缓存单元511、初始表存储单元512、第二缓存单元513、初始表生成单元514的具体功能可以参见上述图4对应实施例的步骤S203的具体描述,在此不再赘述。
拼接处理模块520,用于若初始有序表所存储的状态数据的数据量,达到初始层对应的第一数据量阈值,则将达到第一数据量阈值的初始有序表,确定为目标有序表,基于目标有序表的初始关键字范围,在初始层中确定关联有序表,将目标有序表与关联有序表拼接为目标有序合并表;目标有序表和关联有序表分别包含的状态数据在目标有序合并表中的顺序,与目标有序表和关联有序表分别对应的存储关键字的排序顺序相同;拼接处理模块520的具体功能可以参见上述图3对应实施例的步骤S103的具体描述,在此不再赘述。
其中,拼接处理模块520包括第一拼接单元521和第一关联单元522。
第一拼接单元521,用于若第一有序表中的第一关键字范围中包含目标有序表的初始关键字范围,则将包含目标有序表的初始关键字范围的第一有序表,确定为待拼接表;
第一关联单元522,用于将初始关键字范围属于待拼接表的第一关键字范围的剩余初始有序表,确定为关联有序表,将目标有序表与关联有序表拼接至待拼接表中,得到目标有序合并表;剩余初始有序表为除了目标有序表之外的初始有序表。
第一拼接单元521和第一关联单元522的具体功能可以参见上述图4对应实施例的步骤S204的具体描述,在此不再赘述。
存储模块530,用于将目标有序合并表存储至层级数据库中的初始层的下一层。存储模块530的具体功能可以参见上述图3对应实施例的步骤S104的具体描述,在此不再赘述。
拼接补充模块540,用于若目标有序合并表所存储的状态数据的数据量,大于第一合并层对应的第二数据量阈值,则基于待拼接有序表所存储的状态数据的数据量与待拼接有序表的第一关键字范围,在目标有序合并表中确定拼接数据组,将拼接数据组拼接至待拼接有序表;
拼接拆分模块550,用于将目标有序合并表中的剩余存储关键字划分为Q个合并数据组,通过Q个合并数据组中的存储关键字,确定Q个合并数据组分别对应第一关键字范围,基于Q个合并数据组分别对应的第一关键字范围将目标有序合并表划分为Q个第一有序表,将Q个第一有序表存储至第一合并层;剩余存储关键字是指目标有序合并表中除了拼接数据组对应的存储关键字以外的存储关键字;
拼接确定单元560,用于若目标有序合并表所存储的状态数据的数据量,小于或等于第一合并层对应的第二数据量阈值,则执行将目标有序合并表存储至层级数据库中的初始层的下一层的步骤。
拼接补充模块540、拼接拆分模块550和拼接确定单元560的具体功能可以参见上述图4对应实施例的步骤S204的具体描述,在此不再赘述。
合并拆分模块570,用于若目标有序合并表所存储的状态数据的数据量,大于第一合并层对应的第二数据量阈值,则基于第二数据量阈值,将目标有序合并表中的存储关键字划分为N个合并数据组;N为正整数;第一合并层为层级数据库中的初始层的下一层;
合并拆分模块570,还用于通过N个合并数据组中的存储关键字,确定N个合并数据组分别对应第一关键字范围,基于N个合并数据组分别对应的第一关键字范围将目标有序合并表划分为N个第一有序表,将N个第一有序表存储至第一合并层;
合并确定模块580,用于若目标有序合并表所存储的状态数据的数据量,小于或等于第一合并层对应的第二数据量阈值,则执行将目标有序合并表存储至层级数据库中的初始层的下一层的步骤。
合并拆分模块570和合并确定模块580的具体功能可以参见上述图4对应实施例的步骤S205的具体描述,在此不再赘述。
跨层确定模块590,用于若初始有序表所存储的状态数据的数据量,达到初始层对应的第一数据量阈值,则将达到第一数据量阈值的初始有序表,确定为跨层有序表;
跨层确定模块590,还用于基于跨层有序表的初始关键字范围,将第一合并层中与跨层有序表相关联的第一有序表,确定为跨层拼接表;跨层拼接表的第一关键字范围中的最大值与目标有序表的初始关键字范围的最小值相同;
跨层处理模块600,用于若跨层拼接表所存储的状态数据的数据量,达到第一合并层对应的第二数据量阈值,则将跨层有序表与跨层拼接表拼接为目标跨层合并表;
跨层处理模块600,还用于将目标跨层合并表存储至层级数据库中的第一合并层的下一层。
跨层确定模块590和跨层处理模块600的具体功能可以参见上述图4对应实施例的步骤S205的具体描述,在此不再赘述。
子节点处理模块610,用于获取状态树节点所存储的状态树节点的子节点的节点高度和节点哈希;
子节点处理模块610,还用于基于状态树节点的子节点的节点高度和节点哈希,生成查询关键字,通过查询关键词查询状态树节点的子节点的状态数据。子节点处理模块610的具体功能可以参见上述图4对应实施例的步骤S202的具体描述,在此不再赘述。
请参见图6,图6是本申请实施例提供的一种计算机设备的结构示意图。如图6所示,该计算机设备1000可以包括:处理器1001,网络接口1004和存储器1005,此外,上述计算机设备1000还可以包括:用户接口1003,和至少一个通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。其中,用户接口1003可以包括显示屏(Display)、键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器1005可选的还可以是至少一个位于远离前述处理器1001的存储装置。如图6所示,作为一种计算机可读存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及设备控制应用程序。
在如图6所示的计算机设备1000中,网络接口1004可提供网络通讯网元;而用户接口1003主要用于为用户提供输入的接口;而处理器1001可以用于调用存储器1005中存储的设备控制应用程序,以实现:
根据区块链中的业务区块分别对应的区块高度,确定业务区块关联的状态树的状态树节点的节点高度;每个状态树的状态树节点均包含节点哈希,单个状态树中每个状态树节点的节点高度均与所属的业务区块的区块高度相同;
通过节点高度与节点哈希生成状态树节点的存储关键字,基于状态树节点相关联的存储关键字,将状态树节点的状态数据存入层级数据库中;层级数据库包括初始层,初始层包含一个或多个分别具有互不重叠的初始关键字范围的初始有序表,初始有序表用于按序存储属于所具有的初始关键字范围内的状态数据;
若初始有序表所存储的状态数据的数据量,达到初始层对应的第一数据量阈值,则将达到第一数据量阈值的初始有序表,确定为目标有序表,基于目标有序表的初始关键字范围,在初始层中确定关联有序表,将目标有序表与关联有序表拼接为目标有序合并表;目标有序表和关联有序表分别包含的状态数据在目标有序合并表中的顺序,与目标有序表和关联有序表分别对应的存储关键字的排序顺序相同;
将目标有序合并表存储至层级数据库中的初始层的下一层。
应当理解,本申请实施例中所描述的计算机设备1000可执行前文图3和图4任一个所对应实施例中对该数据处理方法的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
此外,这里需要指出的是:本申请实施例还提供了一种计算机可读存储介质,且上述计算机可读存储介质中存储有计算机程序,当上述处理器执行上述计算机程序时,能够执行前文图3和图4任一个所对应实施例中对上述数据处理方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本申请所涉及的计算机可读存储介质实施例中未披露的技术细节,请参照本申请方法实施例的描述。
上述计算机可读存储介质可以是前述任一实施例提供的数据处理装置或者上述计算机设备的内部存储单元,例如计算机设备的硬盘或内存。该计算机可读存储介质也可以是该计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(smart media card,SMC),安全数字(secure digital,SD)卡,闪存卡(flash card)等。进一步地,该计算机可读存储介质还可以既包括该计算机设备的内部存储单元也包括外部存储设备。该计算机可读存储介质用于存储该计算机程序以及该计算机设备所需的其他程序和数据。该计算机可读存储介质还可以用于暂时地存储已经显示或者将要显示的数据。
此外,这里需要指出的是:本申请实施例还提供了一种计算机程序产品,该计算机程序产品包括计算机程序,该计算机程序存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机程序,处理器执行该计算机程序,使得该计算机设备执行前文图3和图4任一个所对应实施例提供的方法。
本申请实施例的说明书和权利要求书及附图中的术语“第一”、“第二”等是用于区别不同对象,而非用于描述特定顺序。此外,术语“包括”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、装置、产品或设备没有限定于已列出的步骤或模块,而是可选地还包括没有列出的步骤或模块,或可选地还包括对于这些过程、方法、装置、产品或设备固有的其他步骤单元。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照网元一般性地描述了各示例的组成及步骤。这些网元究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的网元,但是这种实现不应认为超出本申请的范围。
以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖的范围。
Claims (13)
1.一种基于区块链的数据处理方法,其特征在于,包括:
根据区块链中的业务区块分别对应的区块高度,确定所述业务区块关联的状态树的状态树节点的节点高度;每个状态树的状态树节点均包含节点哈希,单个状态树中每个状态树节点的节点高度均与所属的业务区块的区块高度相同;
通过所述节点高度与所述节点哈希生成所述状态树节点的存储关键字,基于所述状态树节点相关联的存储关键字,将所述状态树节点的状态数据存入层级数据库中;所述层级数据库包括初始层,所述初始层包含一个或多个分别具有互不重叠的初始关键字范围的初始有序表,所述初始有序表用于按序存储属于所具有的初始关键字范围内的状态数据;
若所述初始有序表所存储的状态数据的数据量,达到所述初始层对应的第一数据量阈值,则将达到所述第一数据量阈值的初始有序表,确定为目标有序表,基于所述目标有序表的初始关键字范围,在所述初始层中确定关联有序表,将所述目标有序表与所述关联有序表拼接为目标有序合并表;所述目标有序表和所述关联有序表分别包含的状态数据在所述目标有序合并表中的顺序,与所述目标有序表和所述关联有序表分别对应的存储关键字的排序顺序相同;
将所述目标有序合并表存储至所述层级数据库中的所述初始层的下一层。
2.根据权利要求1所述的方法,其特征在于,所述通过所述节点高度与所述节点哈希生成所述状态树节点的存储关键字,包括:
获取所述状态树为所述状态树节点分配的节点前缀;
基于所述节点高度、所述状态树的地址以及所述节点前缀,生成所述状态树节点的存储关键字。
3.根据权利要求1所述的方法,其特征在于,所述层级数据库还包括缓存层,所述初始层的一个或多个初始有序表中包括初始有序表Si,i为正整数;所述基于所述状态树节点相关联的存储关键字,将所述状态树节点的状态数据存入层级数据库中,包括:
将所述状态树节点的状态数据存入所述层级数据库的缓存层中;
若所述缓存层的状态数据的数据量,达到所述缓存层对应的缓存数据量阈值,则将所述缓存层中的状态数据存储至所述层级数据库中的初始层;
若所述状态树节点相关联的存储关键字属于所述初始有序表Si的初始关键字范围,则将存储关键字属于所述初始有序表Si的初始关键字范围的状态数据,存储至初始有序表Si中。
4.根据权利要求1所述的方法,其特征在于,所述层级数据库中所述初始层的下一层为第一合并层,所述第一合并层包含一个或多个分别具有互不重叠的第一关键字范围的第一有序表,所述第一有序表用于按序存储属于所具有的第一关键字范围内的状态数据;
所述基于所述状态树节点相关联的存储关键字,将所述状态树节点的状态数据存入层级数据库中,包括:
将所述状态树节点的状态数据存入所述层级数据库的缓存层中;
若所述缓存层的状态数据的数据量,达到所述缓存层对应的缓存数据量阈值,则将所述缓存层中的状态数据存储至所述层级数据库中的初始层;
若所述初始层中不存在初始有序表,则将所述状态数据的存储关键字从大到小顺序排列,基于所述初始层对应的初始表数据阈值,将顺序排列后的存储关键字划分为M个初始数据组;M为正整数;
通过所述M个初始数据组中的存储关键字,确定所述M个初始数据组分别对应初始关键字范围,基于所述初始关键字范围生成M个初始有序表,基于所述初始关键字范围与所述存储关键字之间的关系,将所述状态数据存储至所关联的初始有序表中。
5.根据权利要求1所述的方法,其特征在于,所述层级数据库中所述初始层的下一层为第一合并层,所述第一合并层包含一个或多个分别具有互不重叠的第一关键字范围的第一有序表,所述第一有序表用于按序存储属于所具有的第一关键字范围内的状态数据;
所述基于所述目标有序表的初始关键字范围,在所述初始层中确定关联有序表,将所述目标有序表与所述关联有序表拼接为目标有序合并表,包括:
若所述第一有序表中的第一关键字范围中包含所述目标有序表的初始关键字范围,则将包含所述目标有序表的初始关键字范围的第一有序表,确定为待拼接表;
将初始关键字范围属于所述待拼接表的第一关键字范围的剩余初始有序表,确定为关联有序表,将所述目标有序表与所述关联有序表拼接至所述待拼接表中,得到目标有序合并表;所述剩余初始有序表为除了所述目标有序表之外的初始有序表。
6.根据权利要求5所述的方法,其特征在于,还包括:
若所述目标有序合并表所存储的状态数据的数据量,大于第一合并层对应的第二数据量阈值,则基于所述待拼接有序表所存储的状态数据的数据量与所述待拼接有序表的第一关键字范围,在所述目标有序合并表中确定拼接数据组,将所述拼接数据组拼接至所述待拼接有序表;
将所述目标有序合并表中的剩余存储关键字划分为Q个合并数据组,通过所述Q个合并数据组中的存储关键字,确定所述Q个合并数据组分别对应第一关键字范围,基于所述Q个合并数据组分别对应的第一关键字范围将所述目标有序合并表划分为Q个第一有序表,将所述Q个第一有序表存储至所述第一合并层;所述剩余存储关键字是指所述目标有序合并表中除了所述拼接数据组对应的存储关键字以外的存储关键字;
若所述目标有序合并表所存储的状态数据的数据量,小于或等于所述第一合并层对应的第二数据量阈值,则执行所述将所述目标有序合并表存储至所述层级数据库中的所述初始层的下一层的步骤。
7.根据权利要求1所述的方法,其特征在于,还包括:
若所述目标有序合并表所存储的状态数据的数据量,大于第一合并层对应的第二数据量阈值,则基于所述第二数据量阈值,将所述目标有序合并表中的存储关键字划分为N个合并数据组;N为正整数;所述第一合并层为所述层级数据库中的所述初始层的下一层;
通过所述N个合并数据组中的存储关键字,确定所述N个合并数据组分别对应第一关键字范围,基于所述N个合并数据组分别对应的第一关键字范围将所述目标有序合并表划分为N个第一有序表,将所述N个第一有序表存储至所述第一合并层;
若所述目标有序合并表所存储的状态数据的数据量,小于或等于所述第一合并层对应的第二数据量阈值,则执行所述将所述目标有序合并表存储至所述层级数据库中的所述初始层的下一层的步骤。
8.根据权利要求1所述的方法,其特征在于,所述层级数据库中所述初始层的下一层为第一合并层,所述第一合并层包含一个或多个分别具有互不重叠的第一关键字范围的第一有序表,所述第一有序表用于按序存储属于所具有的第一关键字范围内的状态数据;一个或多个第一有序表包括所述目标有序合并表;
所述方法还包括:
若所述初始有序表所存储的状态数据的数据量,达到所述初始层对应的第一数据量阈值,则将达到所述第一数据量阈值的初始有序表,确定为跨层有序表;
基于所述跨层有序表的初始关键字范围,将所述第一合并层中与所述跨层有序表相关联的第一有序表,确定为跨层拼接表;所述跨层拼接表的第一关键字范围中的最大值与所述目标有序表的初始关键字范围的最小值相同;
若所述跨层拼接表所存储的状态数据的数据量,达到所述第一合并层对应的第二数据量阈值,则将所述跨层有序表与所述跨层拼接表拼接为目标跨层合并表;
将所述目标跨层合并表存储至所述层级数据库中的所述第一合并层的下一层。
9.根据权利要求1所述的方法,其特征在于,所述状态树节点包含所述状态树节点的子节点的节点高度和节点哈希,所述方法还包括:
获取所述状态树节点所存储的所述状态树节点的子节点的节点高度和节点哈希;
基于所述状态树节点的子节点的节点高度和节点哈希,生成查询关键字,通过所述查询关键词查询所述状态树节点的子节点的状态数据。
10.一种基于区块链的数据处理装置,其特征在于,包括:
节点高度确定模块,用于根据区块链中的业务区块分别对应的区块高度,确定所述业务区块关联的状态树的状态树节点的节点高度;每个状态树的状态树节点均包含节点哈希,单个状态树中每个状态树节点的节点高度均与所属的业务区块的区块高度相同;
关键字处理模块,用于通过所述节点高度与所述节点哈希生成所述状态树节点的存储关键字,基于所述状态树节点相关联的存储关键字,将所述状态树节点的状态数据存入层级数据库中;所述层级数据库包括初始层,所述初始层包含一个或多个分别具有互不重叠的初始关键字范围的初始有序表,所述初始有序表用于按序存储属于所具有的初始关键字范围内的状态数据;
拼接处理模块,用于若所述初始有序表所存储的状态数据的数据量,达到所述初始层对应的第一数据量阈值,则将达到所述第一数据量阈值的初始有序表,确定为目标有序表,基于所述目标有序表的初始关键字范围,在所述初始层中确定关联有序表,将所述目标有序表与所述关联有序表拼接为目标有序合并表;所述目标有序表和所述关联有序表分别包含的状态数据在所述目标有序合并表中的顺序,与所述目标有序表和所述关联有序表分别对应的存储关键字的排序顺序相同;
存储模块,用于将所述目标有序合并表存储至所述层级数据库中的所述初始层的下一层。
11.一种计算机设备,其特征在于,包括:处理器、存储器以及网络接口;
所述处理器与所述存储器、所述网络接口相连,其中,所述网络接口用于提供数据通信功能,所述存储器用于存储计算机程序,所述处理器用于调用所述程序代码,以使得所述计算机设备执行权利要求1-9任一项所述的方法。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,所述计算机程序适于由处理器加载并执行,以使得具有所述处理器的计算机设备执行权利要求1-9任一项所述的方法。
13.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机程序,该计算机程序存储在计算机可读存储介质中,且适于由处理器读取并执行,以使得具有所述处理器的计算机设备执行权利要求1-9任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311398983.4A CN117421369A (zh) | 2023-10-25 | 2023-10-25 | 基于区块链的数据处理方法、装置、设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311398983.4A CN117421369A (zh) | 2023-10-25 | 2023-10-25 | 基于区块链的数据处理方法、装置、设备及可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117421369A true CN117421369A (zh) | 2024-01-19 |
Family
ID=89532097
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311398983.4A Pending CN117421369A (zh) | 2023-10-25 | 2023-10-25 | 基于区块链的数据处理方法、装置、设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117421369A (zh) |
-
2023
- 2023-10-25 CN CN202311398983.4A patent/CN117421369A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113329031B (zh) | 一种区块的状态树的生成方法及装置 | |
US11283616B2 (en) | Method for index-based and integrity-assured search in a blockchain | |
CN101009516B (zh) | 一种进行数据同步的方法、系统及装置 | |
CN111444196B (zh) | 块链式账本中全局状态的哈希的生成方法、装置及设备 | |
US20210073796A1 (en) | Method of selective authentication of a blockchain user with a smart contract | |
CN110930152B (zh) | 一种基于区块链的数据处理方法及相关设备 | |
CN113326165B (zh) | 基于区块链的数据处理方法、设备及计算机可读存储介质 | |
CN112862490A (zh) | 一种异步网络下的输出共识方法 | |
CN112579261A (zh) | 退出跨片事务的方法和系统、主链节点和目标分片节点 | |
CN112261163A (zh) | 一种区块链系统中的状态存储方法及区块链系统、节点 | |
CN110941676A (zh) | 一种配置方法、装置、设备及介质 | |
CN113362068B (zh) | 一种轻节点验证区块链状态转移的方法 | |
CN112261160B (zh) | 包含分片的区块链系统中退出跨片事务的方法及系统 | |
CN115988001A (zh) | 区块链系统的共识投票处理方法、装置、设备以及介质 | |
CN116977067A (zh) | 基于区块链的数据处理方法、装置、设备及可读存储介质 | |
CN117421369A (zh) | 基于区块链的数据处理方法、装置、设备及可读存储介质 | |
CN109241058A (zh) | 一种向b+树批量插入键值对的方法和装置 | |
CN116542668A (zh) | 一种基于区块链的数据处理方法、设备及可读存储介质 | |
WO2023160040A1 (zh) | 基于区块链的数据处理方法、装置、设备及可读存储介质 | |
CN116700628B (zh) | 区块链数据处理方法、装置、计算机设备和存储介质 | |
CN117390117A (zh) | 基于区块链的数据处理方法、装置、设备及可读存储介质 | |
CN112883038B (zh) | 一种基于区块链的数据管理方法、计算机及可读存储介质 | |
CN111339566B (zh) | 区块摘要方法、装置、计算机设备和存储介质 | |
CN113641649B (zh) | 数据获取方法、装置、设备和存储介质 | |
WO2024007856A1 (zh) | 数据处理方法、装置及设备、介质、产品 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |