数据存储方法及系统、设备和存储介质技术方案

技术编号:20389767 阅读:32 留言:0更新日期:2019-02-20 02:48
本发明专利技术提供一种数据存储方法及系统、设备和存储介质,该方法包括:在区块链网络的各节点本地存储对应于每个区块的默克尔树的全局索引表,以及每个区块的默克尔树。其中,版本的版本号为区块高度,全局索引表用于根据区块高度进行数据查询。本发明专利技术通过为默克尔树配置相对应的、以区块高度为版本号的全局索引表,为系统提供了可以直接通过区块高度查询全局索引表、通过一次读操作即可完成查询的数据查询途径,从而大幅提升了系统的数据读取性能;并进一步优化了系统在发生交易拥堵或节点崩溃时的健壮性。

【技术实现步骤摘要】
数据存储方法及系统、设备和存储介质
本申请涉及区块链
,具体涉及一种数据存储方法及系统、设备和存储介质。
技术介绍
当前区块链系统的数据读写的解决方案中,通常会采用默克尔树(MerkleTree)的结构,例如比特币的系统中通过默克尔树进行spv验证、以太坊的系统中通过默克尔前缀树(MerklePatriciaTree,简称MPT)进行数据的读写,等等。当前利用默克尔树的结构进行数据存储的方案的缺陷在于:所存储的数据限制了系统的读取性能,查询一笔交易的数据需要通过多次读操作来完成。例如,对于一颗20层的默克尔树,查询一个叶子节点的数据需要进行20次读操作来完成,导致数据查询的效率仅为普通数据库的查询效率的1/20,对于每秒能完成10万次读操作的系统,每秒仅能读取5000笔交易的数据。更进一步地,现有方案需要在节点本地数据库中写完默克尔树的数据后才能进行区块的共识,导致在交易数量剧增时容易发生交易拥堵。此外,现有方案在节点本地数据库中写默克尔树的数据时若发生崩溃,会导致无法生成区块。
技术实现思路
鉴于现有技术中的上述缺陷或不足,期望提供一种通过优化所存储的数据结构提升系统读取性能的数据存储方法及系统、设备和存储介质,并进一步期望优化系统在发生交易拥堵或节点崩溃时的健壮性。第一方面,本专利技术提供一种数据存储方法,包括:在区块链网络的各节点本地存储对应于每个区块的默克尔树的全局索引表,以及每个区块的默克尔树。其中,该全局索引表以区块高度为版本号,用于根据区块高度进行数据查询。第二方面,本专利技术提供一种数据存储系统,配置在区块链网络的节点中,包括第一存储单元和第二存储单元。第一存储单元配置用于在节点本地存储对应于每个区块的默克尔树的全局索引表;第二存储单元配置用于在节点本地存储每个区块的默克尔树。其中,该全局索引表以区块高度为版本号,用于根据区块高度进行数据查询。第三方面,本专利技术还提供一种设备,包括一个或多个处理器和存储器,其中存储器包含可由该一个或多个处理器执行的指令以使得该一个或多个处理器执行根据本专利技术各实施例提供的数据存储方法。第四方面,本专利技术还提供一种存储有计算机程序的存储介质,该计算机程序使计算机执行根据本专利技术各实施例提供的数据存储方法。本专利技术诸多实施例提供的数据存储方法及系统、设备和存储介质通过为默克尔树配置相对应的、以区块高度为版本号的全局索引表,为系统提供了可以直接通过区块高度查询全局索引表、通过一次读操作即可完成查询的数据查询途径,从而大幅提升了系统的数据读取性能;本专利技术一些实施例提供的数据存储方法及系统、设备和存储介质进一步通过在存储完全局索引表的数据后即打包区块共识,并异步存储对应的默克尔树的数据,从而可以大幅缓解交易数量剧增时的区块拥堵问题,同时还降低了存储数据时发生节点崩溃导致无法生成区块的风险;本专利技术一些实施例提供的数据存储方法及系统、设备和存储介质进一步通过在节点崩溃时通过全局索引表恢复每个区块的默克尔树,从而无需通过向其它节点同步数据进行恢复,缓解了节点间的通信压力;本专利技术一些实施例提供的数据存储方法及系统、设备和存储介质进一步通过查询全局索引表得到的数据构建最新版本的默克尔树,并将根节点哈希打包共识,实现了无需对全局索引表进行共识即可确保全局索引表的安全性;本专利技术一些实施例提供的数据存储方法及系统、设备和存储介质进一步通过在全局索引表中只记录默克尔树新增或修改的叶子节点,从而大幅降低了为多版本默克尔树配置全局索引表所带来的数据冗余。附图说明通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:图1为本专利技术一实施例中多版本默克尔树与全局索引表的对应关系示意图。图2为本专利技术一优选实施例提供的一种数据存储方法的流程图。图3为图2所示方法的一种优选实施方式的流程图。图4为本专利技术一实施例提供的一种数据存储系统的结构示意图。图5为图4所示系统的一种优选实施方式的结构示意图。图6为本专利技术一实施例提供的一种设备的结构示意图。具体实施方式下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关专利技术,而非对该专利技术的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与专利技术相关的部分。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。在本实施例中,本专利技术提供一种数据存储方法,包括:S10:在区块链网络的各节点本地存储对应于每个区块的默克尔树的全局索引表,以及每个区块的默克尔树。其中,该全局索引表以区块高度为版本号,用于根据区块高度进行数据查询。具体地,在本实施例中,上述默克尔树具体配置为默克尔状态树(MerkleStateTree),高度配置为20层,存储在节点本地的键值(key-value)数据库中,全局索引表存储在节点本地的另一数据库中;在更多实施例中,可根据实际需求将默克尔树配置为本领域常用的其它不同类型的默克尔树、不同高度、存储在节点本地的本领域常用的其它不同类型的数据库中,还可以将默克尔树和全局索引表存储在同一数据库中,均可实现相同的技术效果。图1为本专利技术一实施例中多版本默克尔树与全局索引表的对应关系示意图。如图1所示,以高度为3层的默克尔二叉状态树为例,在A节点中,当区块高度H=9的区块打包了一笔K4账户进行支付(或收款)、余额由V4变为V4′的交易时:在步骤S10中,一方面在A节点本地的kv数据库中新增一个叶子节点H4′,并新增相对应的索引节点H34′和根节点H1234′,其中,H4′为(K4,V4′)的哈希值;另一方面,在A节点本地的另一数据库中更新全局索引表,新增版本号为9的记录(K4,V4′)。上述默克尔树和全局索引表的存储可以同步进行,也可以异步进行,以下将结合图2-4详细介绍异步进行存储的优选方案。在本实施例中,被替换的叶子节点和索引节点将保留在数据库中,以便于在区块链发生分叉等场景下进行数据回滚;在另一些实施例中,还可以根据实际配置的不同方案将被替换的叶子节点和索引节点配置为直接删除或经过若干个区块高度后进行清理,可实现相同的技术效果。显而易见地,在通过上述存储方法为每个区块的默克尔树配置相对应的全局索引表后,可以通过区块高度直接在全局索引表中查询所需的数据,而无需再根据默克尔树的根节点哈希对默克尔树进行逐层的读取和查询。如图1所示,在本实施例中,全局索引表配置为在每个版本中只记录当前版本的默克尔树中新增或修改的叶子节点,而不再重复记录未发生修改的叶子节点;上述查询在所查找的区块高度若未查找到目标数据,可以通过数据库的指针进行滑动查找;在另一实施例中,还可以将全局索引表配置为在每个版本中记录当前版本的默克尔树的所有叶子节点;在该实施例中,上述查询可以通过区块高度直接查找到目标数据。上述实施例通过为默克尔树配置相对应的、以区块高度为版本号的全局索引表,为系统提供了可以直接通过区块高度查询全局索引表、通过一次读操作即可完成查询的数据查询途径,从而大幅提升了系统的数据读取性能;并进一步通过在全局索引表中只记录默克尔树新增或修改的叶子节点,从而大幅降低了为多版本默克尔树配置全局索引表所带来的数据冗余。图2本文档来自技高网...

【技术保护点】
1.一种数据存储方法,其特征在于,包括:在区块链网络的各节点本地存储对应于每个区块的默克尔树的全局索引表,以及所述每个区块的默克尔树;其中,所述全局索引表以区块高度为版本号,用于根据所述区块高度进行数据查询。

【技术特征摘要】
1.一种数据存储方法,其特征在于,包括:在区块链网络的各节点本地存储对应于每个区块的默克尔树的全局索引表,以及所述每个区块的默克尔树;其中,所述全局索引表以区块高度为版本号,用于根据所述区块高度进行数据查询。2.根据权利要求1所述的方法,其特征在于,所述在区块链网络的各节点本地存储对应于每个区块的默克尔树的全局索引表,以及所述每个区块的默克尔树包括:构建最新版本的默克尔树;根据所述最新版本的默克尔树在节点本地的第一数据库中生成或更新全局索引表,并生成所述全局索引表的存储完成信息,以供所述节点中的共识单元将所述最新版本的默克尔树的根节点哈希打包至区块中进行共识;根据所述最新版本的默克尔树在节点本地的第二数据库中生成或更新每个区块的默克尔树。3.根据权利要求2所述的方法,其特征在于,所述根据所述最新版本的默克尔树在节点本地的第一数据库中生成或更新全局索引表,并生成所述全局索引表的存储完成信息,以供所述节点的共识单元将所述最新版本的默克尔树的根节点哈希打包至区块中进行共识之后还包括:在所述节点崩溃后,根据所述全局索引表在所述第二数据库中恢复所述每个区块的默克尔树。4.根据权利要求2所述的方法,其特征在于,所述构建最新版本的默克尔树包括:通过所述全局索引表查询交易所需的业务数据;根据所述业务数据和所述交易构建最新版本的默克尔树。5.根据权利要求1-4任一项所述的方法,其特征在于,所述全局索引表在每个版本中只记录当前版本的默克尔树中新增或修改的叶子节点。6.根据权利要求1-4任一项所述的方法,其特征在于,所述默克尔树为默克尔状态树,存储在键值(key-value)数据库中。7.一种数据存储系统,配置在区块链网络的节点中,其特征在于,包括:第一存储单元,配置用于在节点本地存储对应于每个区块的...

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

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

1