一种状态树数据存储方法、同步方法及设备和存储介质技术

技术编号:22531799 阅读:17 留言:0更新日期:2019-11-13 09:06
本发明专利技术提供一种状态树数据存储方法、同步方法及设备和存储介质,包括:在内存中缓存并实时更新状态树数据;在若干预指定的第一区块高度将内存中的第一区块高度的状态树数据存储到本地数据库,并更新本地数据库中最新状态树数据的索引和区块高度。本发明专利技术通过将状态树数据存储在内存中,并在达到若干设定的特定区块高度时,将各特定区块高度的状态树数据存储在本地数据库中,无需从状态树数据库中查找状态树数据,大大提高了同步速度,并且避免了在查找过程中消耗过多的IO资源。

A state tree data storage method, synchronization method, equipment and storage medium

The invention provides a state tree data storage method, a synchronization method, a device and a storage medium, which include: caching and updating the state tree data in memory in real time; storing the state tree data of the first block height in memory to the local database in a number of predetermined first block heights, and updating the index and block heights of the latest state tree data in the local database. By storing the state tree data in the memory, and when reaching certain set block heights, the state tree data of each specific block height is stored in the local database, and it is unnecessary to search the state tree data from the state tree database, greatly improving the synchronization speed, and avoiding excessive IO resources consumption in the search process.

【技术实现步骤摘要】
一种状态树数据存储方法、同步方法及设备和存储介质
本申请涉及信息存储
,具体涉及区块链的一种状态树数据存储方法、同步方法及设备和存储介质。
技术介绍
当前区块链系统中,通常会利用默克尔树,默克尔平衡二叉树等对区块链的状态树数据(如账户余额等)进行存储,而在区块同步时,通常是由请求节点将对端节点的各区块中的交易执行后生成状态数据,这种方案同步数据比较缓慢。《CN109542979》、《CN108243253》以及以太坊快速同步可以实现从某一高度获取状态树数据,虽然对同步速度有了一定的改善,但是这些会给被请求节点带来较大的压力,如从对端节点获取默克尔树节点的时候,也会从数据库中查找,需要消耗较多的IO资源,而且也不能快速的查找某一区块高度的状态树数据。
技术实现思路
鉴于现有技术中的上述缺陷或不足,期望提供一种高效、快速的一种状态树数据存储方法、同步方法及设备和存储介质。第一方面,本专利技术提供一种状态树数据存储方法,包括:在内存中缓存并实时更新状态树数据;在若干预指定的第一区块高度将内存中的第一区块高度的状态树数据存储到本地数据库,并更新本地数据库中最新状态树数据的索引和区块高度;其中,索引和区块高度用于查找当前节点的本地数据库中的区块高度的状态树数据,以供第二节点获取当前节点的本地数据库中的最新状态树数据,并在若干区块链节点中选取目标节点以进行状态树数据的同步。进一步,选取目标节点后还包括:判断目标节点的同步高度的第一状态哈希与区块链上同步高度的区块的第二状态哈希是否一致以确定目标节点是否为可信任节点。进一步,第一同步高度不大于当前高度和回滚高度的差值。进一步,上述方法还包括:判断当前节点的本地数据库中的最高区块高度的前面若干区块高度的区块状态树数据是否正在被其他区块链节点同步:否,则删除一个区块高度的区块状态树数据。进一步,上述在内存中缓存并实时更新状态树数据包括:将执行第一区块所需存储的各节点分别存入相应的第一区块高度的第一缓存队列、所需删除的各节点分别存入第一区块高度的第二缓存队列;从当前内存所缓存的状态树数据中删除第二缓存队列的各节点;在当前内存所缓存的状态树数据中增加第一缓存队列的各节点。第二方面,本专利技术提供一种状态树数据同步方法,所同步的状态树数据由被请求节点根据上述的存储方法存储,上述方法包括:向若干节点分别发送同步请求信息以分别获取各被请求节点在本地数据库中存储的最高区块高度;根据各最高区块高度生成各第一同步高度,并在各第一同步高度中选择最高区块高度确定为同步高度,根据同步高度确定目标节点;其中,第一同步高度由由最高区块高度和回滚高度生成;向目标节点同步状态树数据,并将状态树数据存储到本节点的内存中。进一步,上述根据第一同步高度确定目标节点后还包括:判断目标节点的同步高度的第一状态哈希与区块链上同步高度的区块的第二状态哈希是否一致以确定目标节点是否为可信任节点。进一步,第一同步高度不大于当前高度和回滚高度的差值。第三方面,本专利技术提供另一种状态树数据同步方法,所同步的状态树数据由被请求节点根据上述所述的存储方法存储,该方法适用于被请求节点,该方法包括:根据请求节点发送的同步请求信息返回本节点在本地数据库中存储的最高区块高度,以供请求节点根据各最高区块高度生成各第一同步高度,并在各第一同步高度中选择最高区块高度确定为同步高度,根据同步高度确定目标节点后向目标节点同步状态树数据,并将状态树数据存储到本节点的内存中;其中,第一同步高度由由最高区块高度和回滚高度生成。进一步优选地,上述方法还包括:判断本地数据库中的最高区块高度的前面若干区块高度的区块状态树数据是否正在被其他区块链节点同步:否,则删除一个区块高度的区块状态树数据。第四方面,本专利技术还提供一种设备,包括一个或多个处理器和存储器,其中存储器包含可由该一个或多个处理器执行的指令以使得该一个或多个处理器执行根据本专利技术各实施例提供的存储方法、同步方法。第五方面,本专利技术还提供一种存储有计算机程序的存储介质,该计算机程序使计算机执行根据本专利技术各实施例提供的存储方法、同步方法。本专利技术诸多实施例提供的状态树数据存储方法、同步方法及设备和存储介质通过将状态树数据存储在内存中,并在达到若干设定的特定区块高度时,将各特定区块高度的状态树数据存储在本地数据库中,该存储方法使区块链节点在同步区块的状态树数据时可以通过设定的区块高度获取对应的状态树数据,无需从状态数据库中查找状态树数据,大大提高了同步速度,并且避免了在查找过程中消耗过多的IO资源。本专利技术诸多实施例提供的一些实施例提供的状态树数据存储方法、同步方法及设备和存储介质通过向被请求节点的状态树数据库中获取其本地数据库存储的最高特定区块高度的状态树数据,快速高效的完成状态树数据的同步过程,无需从状态数据库中查找状态树数据,大大提高了查找效率和同步效率。附图说明通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:图1为本专利技术一实施例提供的一种状态树数据存储方法的流程图。图2为图1所示方法的一种优选方式的流程图。图3为图1所示方法的一优选实施方式更新状态树数据的场景图。图4为本专利技术一实施例提供一种状态树数据同步方法的流程图。图5为图4所示方法一优选实施方式的流程图。图6为本专利技术一实施例提供的另一种状态树数据同步方法的流程图。图7为本专利技术一实施例提供的一种设备的结构示意图。具体实施方式下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关专利技术,而非对该专利技术的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与专利技术相关的部分。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。图1为本专利技术一实施例提供的一种状态树数据存储方法的流程图。如图1所示,在本实施例中,本专利技术提供一种状态树数据存储方法,包括:S11、在内存中缓存并实时更新状态树数据;S12、在若干预指定的第一区块高度将内存中的第一区块高度的状态树数据存储到本地数据库,并更新本地数据库中最新状态树数据的索引和区块高度;其中,索引和区块高度用于查找当前节点的本地数据库中的区块高度的状态树数据,以供第二节点获取当前节点的本地数据库中的最新状态树数据,并在若干区块链节点中选取目标节点以进行状态树数据的同步。具体地,当区块链节点在插入某一状态树数据以更新状态树时,将该数据同时存储在内存缓存中,以更新内存中缓存的状态树数据,当达到预指定的第一区块高度时,将该第一区块高度的状态树数据存储到本地数据库中,同时在存储该指定的第一区块高度的状态树数据时,同时更新该状态树数据的索引和该区块高度,这样,在后续查找工作中,可以快速的通过索引和区块高度找到对应的状态树数据,并完成后续的状态树数据同步工作。其中索引可以是状态树数据的名称,还可以是状态树数据的类型等等。更多的,步骤S12中将第一区块高度的状态树数据存储到本地数据库中可以是将状态树数据与区块的数据(如交易数据,区块头)分开独立存储在本地数据库中,还可以是在存储时配置特定的索引存储到本地数据库中,都能实现快速的获取完整的状态树数据。上述实施例通过本文档来自技高网...

【技术保护点】
1.一种状态树数据存储方法,其特征在于,包括:在内存中缓存并实时更新状态树数据;在若干预指定的第一区块高度将内存中的所述第一区块高度的状态树数据存储到本地数据库,并更新所述本地数据库中最新状态树数据的索引和区块高度;其中,所述索引和所述区块高度用于查找当前节点的本地数据库中的所述区块高度的状态树数据,以供第二节点获取当前节点的本地数据库中的最新状态树数据,并在若干区块链节点中选取目标节点以进行状态树数据的同步。

【技术特征摘要】
1.一种状态树数据存储方法,其特征在于,包括:在内存中缓存并实时更新状态树数据;在若干预指定的第一区块高度将内存中的所述第一区块高度的状态树数据存储到本地数据库,并更新所述本地数据库中最新状态树数据的索引和区块高度;其中,所述索引和所述区块高度用于查找当前节点的本地数据库中的所述区块高度的状态树数据,以供第二节点获取当前节点的本地数据库中的最新状态树数据,并在若干区块链节点中选取目标节点以进行状态树数据的同步。2.根据权利要求1所述的方法,其特征在于,所述选取目标节点后还包括:判断所述目标节点的同步高度的第一状态哈希与区块链上所述同步高度的区块的第二状态哈希是否一致以确定所述目标节点是否为可信任节点。3.根据权利要求2所述的方法,其特征在于,所述第一同步高度不大于当前高度和回滚高度的差值。4.根据权利要求3所述的方法,其特征在于,所述方法还包括:判断当前节点的本地数据库中的最高区块高度的上一个区块高度的区块状态树数据是否正在被其他区块链节点同步:否,则删除一个区块高度的区块状态树数据。5.根据权利要求1-4任一项所述的方法,其特征在于,所述在内存中缓存并实时更新状态树数据包括:将执行第一区块所需存储的各节点分别存入相应的第一区块高度的第一缓存队列、所需删除的各节点分别存入所述第一区块高度的第二缓存队列;从当前内存所缓存的状态树数据中删除所述第二缓存队列的各节点;在当前内存所缓存的状态树数据中增加所述第一缓存队列的各节点。6.一种状态树数据同步方法,所同步的状态树数据由被请求节点根据权利要求1-4所述的存储方法存储,所述方法适用于请求节点,其特征在于,所述方法包括:向若干节点分别发送同步请求信息以分别获取各所述被请求节点在本地数据库中存储的最高区块高度;根据各最高区块高度生成各第一同...

【专利技术属性】
技术研发人员:柳宇航王志文吴思进
申请(专利权)人:杭州复杂美科技有限公司
类型:发明
国别省市:浙江,33

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

1