掌桥专利:专业的专利平台
掌桥专利
首页

区块链账本数据的处理方法、装置、存储介质及电子设备

文献发布时间:2023-06-19 10:19:37


区块链账本数据的处理方法、装置、存储介质及电子设备

技术领域

本公开涉及区块链技术领域,具体地,涉及一种区块链账本数据的处理方法、装置、存储介质及电子设备。

背景技术

区块链存储系统是区块链的核心技术,被区块链网络中的每一区块链节点所承载。区块链存储系统用于查询区块链节点上的各种账本数据,或者用于将待写入数据写入区块链节点。

相关技术中,当区块链存储系统进行数据写入时,需要将待写入数据同时写入账本数据库、交易数据库、历史数据库以及状态数据库。这种数据写入业务流程过于复杂,涉及多个IO操作,非常影响区块链网络的数据写入性能。

发明内容

本公开的目的是提供一种区块链账本数据的处理方法、装置、存储介质及电子设备,以提升区块链网络的数据写入性能。

为了实现上述目的,本公开实施例的第一部分提供一种区块链账本数据的处理方法,所述方法应用于区块链网络中的区块链节点,所述方法包括:

将区块链网络中新产生的账本数据写入账本数据库,并生成所述账本数据的元数据信息,所述元数据信息包括表征所述账本数据存储位置的文件位置指针;

将所述账本数据的所述元数据信息写入增量数据库,以完成新产生的所述账本数据的数据写入事务;

基于所述增量数据库中所述元数据信息中包括的所述文件位置指针,从所述账本数据库中获取对应的所述账本数据;并,

根据从所述账本数据库中获取到的所述账本数据更新所述区块链节点的交易数据库、历史数据库以及状态数据库;

其中,对新产生的所述账本数据进行数据写入事务的过程与对所述区块链节点的所述交易数据库、所述历史数据库以及所述状态数据库进行更新的过程是异步执行的。

可选地,所述方法还包括:

获取针对目标数据库的数据查询请求;

在所述目标数据库为所述账本数据库的情况下,从所述账本数据库中获取目标账本数据,并将所述目标账本数据反馈给所述数据查询请求对应的请求方。

可选地,所述方法还包括:

在所述目标数据库为所述交易数据库、所述历史数据库以及所述状态数据库中的任一者的情况下,从所述目标数据库中获取目标全量数据;并

从所述增量数据库中获取目标元数据信息,根据获取到的所述目标元数据信息从所述账本数据库中获取对应的增量账本数据;

将获取到的所述增量账本数据作为目标增量数据与所述目标全量数据进行合并得到目标数据,并将所述目标数据反馈给所述数据查询请求对应的请求方。

可选地,所述基于所述增量数据库中所述元数据信息中包括的所述文件位置指针,从所述账本数据库中获取对应的所述账本数据,包括:

根据所述增量数据库中各元数据信息的写入顺序,依次基于所述各元数据信息中包括的所述文件位置指针,从所述账本数据库中获取所述账本数据;

所述根据从所述账本数据库中获取到的所述账本数据更新所述区块链节点的交易数据库、历史数据库以及状态数据库,包括:

基于从所述账本数据库中获取到的每一账本数据,依次根据所述每一账本数据更新所述交易数据库、所述历史数据库以及所述状态数据库。

可选地,所述方法还包括:

在根据所述账本数据库中的任一账本数据更新所述交易数据库、所述历史数据库以及所述状态数据库之后,将所述增量数据库中对应该账本数据的所述元数据信息标记为已更新状态。

可选地,所述元数据信息还包括账本标识,所述将所述账本数据的所述元数据信息写入增量数据库,包括:

在所述增量数据库中根据B+树的数据结构存储所述元数据信息,其中,B+树的根节点用于存储所述元数据信息中的所述账本标识,B+树的叶子节点用于存储所述文件位置指针。

可选地,对所述区块链节点的所述交易数据库、所述历史数据库以及所述状态数据库进行更新的过程是周期性执行的;或者,对所述区块链节点的所述交易数据库、所述历史数据库以及所述状态数据库进行更新的过程是在所述区块链节点处于空闲状态的情况下执行的;

其中,所述区块链节点是否处于空闲状态是在所述根据所述增量数据库中各元数据信息的写入顺序,依次基于所述各元数据信息中包括的所述文件位置指针,从所述账本数据库中获取所述账本数据之前进行确定的。

根据本公开实施例的第二部分,提供一种区块链存储系统,所述系统包括:数据写入模块、增量数据模块、数据更新模块;

所述数据写入模块用于,将区块链网络中新产生的账本数据写入账本数据库,并将所述账本数据的元数据信息发送给所述增量数据模块,所述元数据信息包括表征所述账本数据存储位置的文件位置指针;

所述增量数据模块用于,将接收到的所述元数据信息写入增量数据库,以完成新产生的所述账本数据的数据写入事务;

所述数据更新模块用于,基于所述增量数据库中所述元数据信息中包括的所述文件位置指针,从所述账本数据库中获取对应的所述账本数据;并根据从所述账本数据库中获取到的所述账本数据更新区块链节点的交易数据库、历史数据库以及状态数据库;

其中,对新产生的所述账本数据进行数据写入事务的过程与对所述区块链节点的所述交易数据库、所述历史数据库以及所述状态数据库进行更新的过程是异步执行的。

根据本公开实施例的第三部分,提供一种区块链账本数据的处理装置,所述装置应用于区块链网络中的区块链节点,所述装置包括:

第一写入模块,被配置为用于将区块链网络中新产生的账本数据写入账本数据库,并生成所述账本数据的元数据信息,所述元数据信息包括表征所述账本数据存储位置的文件位置指针;

第二写入模块,被配置为用于将所述账本数据的所述元数据信息写入增量数据库,以完成新产生的所述账本数据的数据写入事务;

第一获取模块,被配置为用于基于所述增量数据库中所述元数据信息中包括的所述文件位置指针,从所述账本数据库中获取对应的所述账本数据;

更新模块,被配置为用于根据从所述账本数据库中获取到的所述账本数据更新所述区块链节点的交易数据库、历史数据库以及状态数据库;

其中,对新产生的所述账本数据进行数据写入事务的过程与对所述区块链节点的所述交易数据库、所述历史数据库以及所述状态数据库进行更新的过程是异步执行的。

可选地,所述装置还包括:

第二获取模块,被配置为用于获取针对目标数据库的数据查询请求;

第一反馈模块,被配置为用于在所述目标数据库为所述账本数据库的情况下,从所述账本数据库中获取目标账本数据,并将所述目标账本数据反馈给所述数据查询请求对应的请求方。

可选地,所述装置还包括:

第三获取模块,被配置为用于在所述目标数据库为所述交易数据库、所述历史数据库以及所述状态数据库中的任一者的情况下,从所述目标数据库中获取目标全量数据;并

第四获取模块,被配置为用于从所述增量数据库中获取目标元数据信息,根据获取到的所述目标元数据信息从所述账本数据库中获取对应的增量账本数据;

第二反馈模块,被配置为用于将获取到的所述增量账本数据作为目标增量数据与所述目标全量数据进行合并得到目标数据,并将所述目标数据反馈给所述数据查询请求对应的请求方。

可选地,所述第一获取模块包括:

第一获取子模块,被配置为用于根据所述增量数据库中各元数据信息的写入顺序,依次基于所述各元数据信息中包括的所述文件位置指针,从所述账本数据库中获取所述账本数据;

可选地,所述更新模块包括:

更新子模块,被配置为用于基于从所述账本数据库中获取到的每一账本数据,依次根据所述每一账本数据更新所述交易数据库、所述历史数据库以及所述状态数据库。

可选地,所述装置还包括:

标记模块,被配置为用于在根据所述账本数据库中的任一账本数据更新所述交易数据库、所述历史数据库以及所述状态数据库之后,将所述增量数据库中对应该账本数据的所述元数据信息标记为已更新状态。

所述元数据信息还包括账本标识,所述第二写入模块包括:

第二写入子模块,被配置为用于在所述增量数据库中根据B+树的数据结构存储所述元数据信息,其中,B+树的根节点用于存储所述元数据信息中的所述账本标识,B+树的叶子节点用于存储所述文件位置指针。

可选地,对所述区块链节点的所述交易数据库、所述历史数据库以及所述状态数据库进行更新的过程是周期性执行的;或者,对所述区块链节点的所述交易数据库、所述历史数据库以及所述状态数据库进行更新的过程是在所述区块链节点处于空闲状态的情况下执行的;

其中,所述区块链节点是否处于空闲状态是在所述根据所述增量数据库中各元数据信息的写入顺序,依次基于所述各元数据信息中包括的所述文件位置指针,从所述账本数据库中获取所述账本数据之前进行确定的。

根据本公开实施例的第四部分,提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述第一方面中任一项所述方法的步骤。

根据本公开实施例的第五部分,提供一种电子设备,包括:

存储器,其上存储有计算机程序;

处理器,用于执行所述存储器中的所述计算机程序,以实现上述第一方面中任一项所述方法的步骤。

采用上述技术方案,至少能够达到如下技术效果:

区块链网络中的每一区块链节点在对区块链网络中新产生的账本数据进行数据写入时,仅将新产生的账本数据写入账本数据库,并将生成的该账本数据的元数据信息写入增量数据库,如此以完成新产生的该账本数据的数据写入事务。在完成新产生的账本数据的数据写入事务之后,基于增量数据库中元数据信息中包括的文件位置指针,从账本数据库中获取对应的账本数据,并根据从账本数据库中获取到的账本数据更新该区块链节点的交易数据库、历史数据库以及状态数据库。由于对新产生的账本数据进行数据写入事务的过程与对区块链节点的交易数据库、历史数据库以及状态数据库进行更新的过程是异步执行的,因而本公开的这种账本数据异步写入方式与相关技术中将新产生的账本数据同时写入账本数据库、交易数据库、历史数据库以及状态数据库的数据写入方式相比,可以在单位时间内将更多新产生的账本数据写入区块链节点中,因而本公开的这种方式提升了区块链节点的数据写入性能,进而提升了区块链网络的数据写入性能。

本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。

附图说明

附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:

图1是根据本公开一示例性实施例示出的一种区块链账本数据的处理方法的流程图。

图2是根据本公开一示例性实施例示出的一种区块链存储系统的框图。

图3是根据本公开一示例性实施例示出的另一种区块链存储系统的框图。

图4是根据本公开一示例性实施例示出的一种区块链账本数据的处理装置的框图。

图5是根据本公开一示例性实施例示出的一种电子设备的框图。

具体实施方式

以下结合附图对本公开的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本公开,并不用于限制本公开。

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。

图1是根据本公开一示例性实施例示出的一种区块链账本数据的处理方法的流程图,该方法应用于区块链网络中的区块链节点,如图1所示,该方法包括以下步骤:

S11、将区块链网络中新产生的账本数据写入账本数据库,并生成所述账本数据的元数据信息,所述元数据信息包括表征所述账本数据存储位置的文件位置指针。

首先需说明的是,区块链网络中的账本数据库是一种区块链账本,该账本数据库的数据记录格式为区块链。

历史数据库(History Database),以LevelDB数据库作为数据存储载体,存储区块中有效交易相关的key和value,其中value存储账本产生时间。而交易数据库是指在value中存储账本标识的历史数据库。

状态数据库(State Database),存储了交易日志中所有key的最新值(WorldState),默认数据库使用LevelDB。

容易理解的是,当向区块链网络中写入数据时,该待写入数据可以被看做区块链网络中新产生的账本数据。相关技术中,区块链网络中新产生的账本数据需同时被写入账本数据库、交易数据库、历史数据库以及状态数据库,在将新产生的账本数据写入账本数据库、交易数据库、历史数据库以及状态数据库之后,该新产生的账本数据的数据写入事务完成。

其中,在将区块链网络中新产生的账本数据写入账本数据库的情况下,账本数据库生成该账本数据的元数据信息,元数据信息包括该账本数据的账本编码/标识,以及表征该账本数据存储位置的文件位置指针。文件位置指针由3个部分组成,包括所在文件的编号fileSuffixNum、文件内的偏移量offset、区块占用的字节数bytesLength。

S12、将所述账本数据的所述元数据信息写入增量数据库,以完成新产生的所述账本数据的数据写入事务。

可选地,所述元数据信息还包括账本标识,所述将所述账本数据的所述元数据信息写入增量数据库,包括:

在所述增量数据库中根据B+树的数据结构存储所述元数据信息,其中,B+树的根节点用于存储所述元数据信息中的所述账本标识,B+树的叶子节点用于存储所述文件位置指针。

其中,B+树是一种树数据结构,是一个n叉树,每个节点通常有多个孩子,一颗B+树包含根节点、内部节点和叶子节点。B+树通常用于数据库和操作系统的文件系统中。B+树的特点是能够保持数据稳定有序,其插入与修改拥有较稳定的对数时间复杂度。B+树元素自底向上插入。

在本公开实施例中,增量数据库中根据B+树的数据结构存储元数据信息,其中,B+树的根节点用于存储元数据信息中的账本标识,B+树的叶子节点用于存储元数据信息中的文件位置指针。

S13、基于所述增量数据库中所述元数据信息中包括的所述文件位置指针,从所述账本数据库中获取对应的所述账本数据;

增量数据库中存储的每一元数据信息中均包括文件位置指针,根据该文件位置指针可以从账本数据库中获取到对应的账本数据。具体地,本领域普通技术人员应当理解的是,区块查找是一个三级索引过程,查找一个区块就是先确定是哪个链,然后根据文件位置指针中的文件编号fileSuffixNum找到对应的文件,再根据文件位置指针中的文件内偏移量offset和区块占用字节数bytesLength确定区块的内容,如此即可找到每一元数据信息对应的账本数据。

S14、根据从所述账本数据库中获取到的所述账本数据更新所述区块链节点的交易数据库、历史数据库以及状态数据库;其中,对新产生的所述账本数据进行数据写入事务的过程与对所述区块链节点的所述交易数据库、所述历史数据库以及所述状态数据库进行更新的过程是异步执行的。

由于对新产生的账本数据进行数据写入事务的过程与对区块链节点的交易数据库、历史数据库以及状态数据库进行更新的过程是异步执行的。因此,一种可实现的实施方式,对所述区块链节点的所述交易数据库、所述历史数据库以及所述状态数据库进行更新的过程是周期性执行的;或者,对所述区块链节点的所述交易数据库、所述历史数据库以及所述状态数据库进行更新的过程是在所述区块链节点处于空闲状态的情况下执行的;并且,其中,所述区块链节点是否处于空闲状态是在所述基于所述增量数据库中所述元数据信息中包括的所述文件位置指针,从所述账本数据库中获取对应的所述账本数据之前进行确定的。

具体地,在将区块链网络中新产生的账本数据写入账本数据库,并将该账本数据的元数据信息存储在增量数据库之后的下一周期,执行基于增量数据库中该元数据信息中包括的文件位置指针,从账本数据库中获取对应的该账本数据;并,根据从账本数据库中获取到的该账本数据更新区块链节点的交易数据库、历史数据库以及状态数据库的步骤。或者,在将区块链网络中新产生的账本数据写入账本数据库,并将该账本数据的元数据信息存储在增量数据库之后,若确定区块链节点处于空闲状态,则执行基于增量数据库中该元数据信息中包括的文件位置指针,从账本数据库中获取对应的该账本数据;并,根据从账本数据库中获取到的该账本数据更新区块链节点的交易数据库、历史数据库以及状态数据库的步骤。

可选地,所述方法还包括:

在根据所述账本数据库中的任一账本数据更新所述交易数据库、所述历史数据库以及所述状态数据库之后,将所述增量数据库中对应该账本数据的所述元数据信息标记为已更新状态。

根据从账本数据库中获取到的账本数据更新区块链节点的交易数据库、历史数据库以及状态数据库。并在根据账本数据库中的任一账本数据更新交易数据库、历史数据库以及状态数据库之后,可以将增量数据库中对应该账本数据的元数据信息标记为已更新状态。

一种可实现的实施方式,按照账本数据产生的时间,将每一账本数据的元数据信息依次写入增量数据库。进一步地,按照增量数据库中各元数据信息的存储顺序,依次针对每一元数据信息对应的账本数据库中的账本数据,将该账本数据更新至交易数据库、历史数据库以及状态数据库,并在增量数据库中将该账本数据对应的元数据信息标记为已更新状态,或者将该增量数据库中读取元数据信息的起始点指针指向下一未被更新的账本数据对应的元数据信息。

采用这种方法,区块链网络中的每一区块链节点在对区块链网络中新产生的账本数据进行数据写入时,仅将新产生的账本数据写入账本数据库,并将生成的该账本数据的元数据信息写入增量数据库,如此以完成新产生的该账本数据的数据写入事务。在完成新产生的账本数据的数据写入事务之后,基于增量数据库中元数据信息中包括的文件位置指针,从账本数据库中获取对应的账本数据,并根据从账本数据库中获取到的账本数据更新该区块链节点的交易数据库、历史数据库以及状态数据库。由于对新产生的账本数据进行数据写入事务的过程与对区块链节点的交易数据库、历史数据库以及状态数据库进行更新的过程是异步执行的,因而本公开的这种账本数据异步写入方式与相关技术中将新产生的账本数据同时写入账本数据库、交易数据库、历史数据库以及状态数据库的数据写入方式相比,可以在单位时间内将更多新产生的账本数据写入区块链节点中,因而本公开的这种方式提升了区块链节点的数据写入性能,进而提升了区块链网络的数据写入性能。

可选地,所述方法还包括:

获取针对目标数据库的数据查询请求;在所述目标数据库为所述账本数据库的情况下,从所述账本数据库中获取目标账本数据,并将所述目标账本数据反馈给所述数据查询请求对应的请求方。

容易理解的是,由于采用本公开的上述技术方案,区块链节点在对区块链网络中新产生的账本数据进行数据写入时,会将新产生的账本数据写入账本数据库,因而账本数据库中存储了所有已产生的账本数据。所述当获取到针对账本数据库的数据查询请求的情况下,可以直接从账本数据库中获取目标账本数据,并将目标账本数据反馈给数据查询请求对应的请求方。

可选地,所述方法还包括:

在所述目标数据库为所述交易数据库、所述历史数据库以及所述状态数据库中的任一者的情况下,从所述目标数据库中获取目标全量数据;并从所述增量数据库中获取目标元数据信息,根据获取到的所述目标元数据信息从所述账本数据库中获取对应的增量账本数据;将获取到的所述增量账本数据作为目标增量数据与所述目标全量数据进行合并得到目标数据,并将所述目标数据反馈给所述数据查询请求对应的请求方。

由于采用本公开的上述技术方案,对新产生的账本数据进行数据写入事务的过程与对区块链节点的交易数据库、历史数据库以及状态数据库进行更新的过程是异步执行的,因此,交易数据库、历史数据库以及状态数据库可能不是当前时间点对应的最新数据库。那么在获取到针对交易数据库/历史数据库/状态数据库的数据查询请求的情况下,可以先确定数据查询请求所对应的目标数据是否为当前交易数据库/历史数据库/状态数据库已经存储的数据。

若确定数据查询请求所对应的目标数据不为当前交易数据库/历史数据库/状态数据库已存储的数据。则从交易数据库/历史数据库/状态数据库中获取目标全量数据,并从增量数据库中获取目标元数据信息,根据获取到的目标元数据信息从账本数据库中获取对应的增量账本数据。将获取到的增量账本数据作为目标增量数据与目标全量数据进行合并得到目标数据,进而将目标数据反馈给数据查询请求对应的请求方。

若确定数据查询请求所对应的目标数据为当前交易数据库/历史数据库/状态数据库已存储的数据。则直接从交易数据库/历史数据库/状态数据库中获取目标数据,并将目标数据反馈给数据查询请求对应的请求方。

采用这种方式,在数据查询的情况下,可能存在需要从增量数据库获取元数据信息,并根据获取到的元数据信息从账本数据库获取账本数据,并将获取到的账本数据与当前交易数据库/历史数据库/状态数据库中的目标全量数据进行合并从而得到对应的目标数据的情况。虽然这种情况降低了区块链节点的数据读取性能,但是,在写多读少的场景下,这种方式大大提高了区块链网络的数据写入性能,因而即便在降低了区块链节点的数据读取性能的情况下,也能提高区块链网络的吞吐能力。

并且,值得说明的是,相关技术中,区块链节点的数据写入性能为3000TPS,而区块链节点的数据读取性能为至少10000TPS。因此面对区块链网络本身为写多读少的应用场景,这种降低区块链节点的数据读取性能以大幅度提升区块链节点的数据写入性能的方式,能够提升区块链网络的整体吞吐能力。

可选地,上述步骤S13基于所述增量数据库中所述元数据信息中包括的所述文件位置指针,从所述账本数据库中获取对应的所述账本数据,具体可以包括:

根据所述增量数据库中各元数据信息的写入顺序,依次基于所述各元数据信息中包括的所述文件位置指针,从所述账本数据库中获取所述账本数据。

具体地,当增量数据库中存在多个未更新状态的元数据信息时,根据该多个元数据信息的写入顺序,依次基于该多个元数据信息中包括的文件位置指针,从账本数据库中获取对应的多个账本数据。

进一步细,上述步骤S14所述根据从所述账本数据库中获取到的所述账本数据更新所述区块链节点的交易数据库、历史数据库以及状态数据库,具体可以包括:

基于从所述账本数据库中获取到的每一账本数据,依次根据所述每一账本数据更新所述交易数据库、所述历史数据库以及所述状态数据库。

具体地,在从账本数据库中获取到多个账本数据的情况下,根据该多个账本数据的获取顺序,将每一账本数据更新至交易数据库、历史数据库以及状态数据库。

采用这种方式,在当前交易数据库、历史数据库、状态数据库的状态基础之上,按照账本数据写入账本数据库的顺序,将每一账本数据更新至交易数据库、历史数据库以及状态数据库。如此,实现了重塑历史过程,将每一账本数据按照历史发生顺序写入交易数据库、历史数据库以及状态数据库,从而可以将交易数据库、历史数据库以及状态数据库更新至当前最新状态。

基于同一发明构思,本公开实施例还提供一种区块链存储系统,如图2所示,所述系统200包括:数据写入模块210、增量数据模块220、数据更新模块230;

所述数据写入模块210用于,将区块链网络中新产生的账本数据写入账本数据库,并将所述账本数据的元数据信息发送给所述增量数据模块,所述元数据信息包括表征所述账本数据存储位置的文件位置指针;

所述增量数据模块220用于,将接收到的所述元数据信息写入增量数据库,以完成新产生的所述账本数据的数据写入事务;

所述数据更新模块230用于,基于所述增量数据库中所述元数据信息中包括的所述文件位置指针,从所述账本数据库中获取对应的所述账本数据;并根据从所述账本数据库中获取到的所述账本数据更新区块链节点的交易数据库、历史数据库以及状态数据库;其中,对新产生的所述账本数据进行数据写入事务的过程与对所述区块链节点的所述交易数据库、所述历史数据库以及所述状态数据库进行更新的过程是异步执行的。

采用这种系统200,区块链网络中的每一区块链节点在对区块链网络中新产生的账本数据进行数据写入时,仅将新产生的账本数据写入账本数据库,并将生成的该账本数据的元数据信息写入增量数据库,如此以完成新产生的该账本数据的数据写入事务。在完成新产生的账本数据的数据写入事务之后,基于增量数据库中元数据信息中包括的文件位置指针,从账本数据库中获取对应的账本数据,并根据从账本数据库中获取到的账本数据更新该区块链节点的交易数据库、历史数据库以及状态数据库。由于对新产生的账本数据进行数据写入事务的过程与对区块链节点的交易数据库、历史数据库以及状态数据库进行更新的过程是异步执行的,因而本公开的这种账本数据异步写入方式与相关技术中将新产生的账本数据同时写入账本数据库、交易数据库、历史数据库以及状态数据库的数据写入方式相比,可以在单位时间内将更多新产生的账本数据写入区块链节点中,因而本公开的这种方式提升了区块链节点的数据写入性能,进而提升了区块链网络的数据写入性能。

图3是根据本公开一示例性实施例示出的另一种区块链存储系统300的框图,如图3所示,包括代理模块310、数据写入模块320、增量数据模块330、数据查询模块340、数据更新模块350、补偿模块360;其中,数据写入模块320、增量数据模块330、数据更新模块350与前述实施例中的数据写入模块210、增量数据模块220、数据更新模块230相同,此处不再赘述。

其中,代理模块310,用于实现区块链存储功能代理和服务路由功能。其中区块链存储功能代理是对外提供区块链节点的访问接口。服务路由功能是将读/写请求路由到数据写入模块320/数据查询模块340。

数据查询模块340,用于获取针对目标数据库的数据查询请求;在所述目标数据库为所述账本数据库的情况下,从所述账本数据库中获取目标账本数据,并将所述目标账本数据反馈给所述数据查询请求对应的请求方。还用于,在所述目标数据库为所述交易数据库、所述历史数据库以及所述状态数据库中的任一者的情况下,从所述目标数据库中获取目标全量数据;并从所述增量数据库中获取目标元数据信息,根据获取到的所述目标元数据信息从所述账本数据库中获取对应的增量账本数据;将获取到的所述增量账本数据作为目标增量数据与所述目标全量数据进行合并得到目标数据,并将所述目标数据反馈给所述数据查询请求对应的请求方。

补偿模块360,用于对在根据从所述账本数据库中获取到的所述账本数据更新区块链节点的交易数据库、历史数据库以及状态数据库过程中出现的异常情况进行事务补偿,以保证事务一致性。

由于需要将从账本数据库中获取到的账本数据同步到交易数据库、历史数据库以及状态数据库,因而该过程存在存储事务一致性的问题。补偿模块360,通过事务补偿机制,可以实现在将从账本数据库中获取到的账本数据同步到交易数据库、历史数据库以及状态数据库过程中,保持事务一致性。其中,补偿模块360的事务补偿机制采用重试、事务补偿以及事务回滚等策略。

图4是根据本公开一示例性实施例示出的一种区块链账本数据的处理装置的框图,所述装置应用于区块链网络中的区块链节点,所述装置400包括:

第一写入模块410,被配置为用于将区块链网络中新产生的账本数据写入账本数据库,并生成所述账本数据的元数据信息,所述元数据信息包括表征所述账本数据存储位置的文件位置指针;

第二写入模块420,被配置为用于将所述账本数据的所述元数据信息写入增量数据库,以完成新产生的所述账本数据的数据写入事务;

第一获取模块430,被配置为用于基于所述增量数据库中所述元数据信息中包括的所述文件位置指针,从所述账本数据库中获取对应的所述账本数据;

更新模块440,被配置为用于根据从所述账本数据库中获取到的所述账本数据更新所述区块链节点的交易数据库、历史数据库以及状态数据库;

其中,对新产生的所述账本数据进行数据写入事务的过程与对所述区块链节点的所述交易数据库、所述历史数据库以及所述状态数据库进行更新的过程是异步执行的。

采用这种装置,区块链网络中的每一区块链节点在对区块链网络中新产生的账本数据进行数据写入时,仅将新产生的账本数据写入账本数据库,并将生成的该账本数据的元数据信息写入增量数据库,如此以完成新产生的该账本数据的数据写入事务。在完成新产生的账本数据的数据写入事务之后,基于增量数据库中元数据信息中包括的文件位置指针,从账本数据库中获取对应的账本数据,并根据从账本数据库中获取到的账本数据更新该区块链节点的交易数据库、历史数据库以及状态数据库。由于对新产生的账本数据进行数据写入事务的过程与对区块链节点的交易数据库、历史数据库以及状态数据库进行更新的过程是异步执行的,因而本公开的这种账本数据异步写入方式与相关技术中将新产生的账本数据同时写入账本数据库、交易数据库、历史数据库以及状态数据库的数据写入方式相比,可以在单位时间内将更多新产生的账本数据写入区块链节点中,因而本公开的这种方式提升了区块链节点的数据写入性能,进而提升了区块链网络的数据写入性能。

可选地,所述装置400还包括:

第二获取模块,被配置为用于获取针对目标数据库的数据查询请求;

第一反馈模块,被配置为用于在所述目标数据库为所述账本数据库的情况下,从所述账本数据库中获取目标账本数据,并将所述目标账本数据反馈给所述数据查询请求对应的请求方。

可选地,所述装置400还包括:

第三获取模块,被配置为用于在所述目标数据库为所述交易数据库、所述历史数据库以及所述状态数据库中的任一者的情况下,从所述目标数据库中获取目标全量数据;并

第四获取模块,被配置为用于从所述增量数据库中获取目标元数据信息,根据获取到的所述目标元数据信息从所述账本数据库中获取对应的增量账本数据;

第二反馈模块,被配置为用于将获取到的所述增量账本数据作为目标增量数据与所述目标全量数据进行合并得到目标数据,并将所述目标数据反馈给所述数据查询请求对应的请求方。

可选地,所述第一获取模块430包括:

第一获取子模块,被配置为用于根据所述增量数据库中各元数据信息的写入顺序,依次基于所述各元数据信息中包括的所述文件位置指针,从所述账本数据库中获取所述账本数据;

可选地,所述更新模块440包括:

更新子模块,被配置为用于基于从所述账本数据库中获取到的每一账本数据,依次根据所述每一账本数据更新所述交易数据库、所述历史数据库以及所述状态数据库。

可选地,所述装置400还包括:

标记模块,被配置为用于在根据所述账本数据库中的任一账本数据更新所述交易数据库、所述历史数据库以及所述状态数据库之后,将所述增量数据库中对应该账本数据的所述元数据信息标记为已更新状态。

所述元数据信息还包括账本标识,所述第二写入模块420包括:

第二写入子模块,被配置为用于在所述增量数据库中根据B+树的数据结构存储所述元数据信息,其中,B+树的根节点用于存储所述元数据信息中的所述账本标识,B+树的叶子节点用于存储所述文件位置指针。

可选地,对所述区块链节点的所述交易数据库、所述历史数据库以及所述状态数据库进行更新的过程是周期性执行的;或者,对所述区块链节点的所述交易数据库、所述历史数据库以及所述状态数据库进行更新的过程是在所述区块链节点处于空闲状态的情况下执行的;

其中,所述区块链节点是否处于空闲状态是在所述根据所述增量数据库中各元数据信息的写入顺序,依次基于所述各元数据信息中包括的所述文件位置指针,从所述账本数据库中获取所述账本数据之前进行确定的。

关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

图5是根据一示例性实施例示出的一种电子设备700的框图。如图5所示,该电子设备700可以包括:处理器701,存储器702。该电子设备700还可以包括多媒体组件703,输入/输出(I/O)接口704,以及通信组件705中的一者或多者。

其中,处理器701用于控制该电子设备700的整体操作,以完成上述的区块链账本数据的处理方法中的全部或部分步骤。存储器702用于存储各种类型的数据以支持在该电子设备700的操作,这些数据例如可以包括用于在该电子设备700上操作的任何应用程序或方法的指令,以及应用程序相关的数据,例如联系人数据、收发的消息、图片、音频、视频等等。该存储器702可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(Static Random Access Memory,简称SRAM),电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,简称EEPROM),可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,简称EPROM),可编程只读存储器(Programmable Read-Only Memory,简称PROM),只读存储器(Read-Only Memory,简称ROM),磁存储器,快闪存储器,磁盘或光盘。多媒体组件703可以包括屏幕和音频组件。其中屏幕例如可以是触摸屏,音频组件用于输出和/或输入音频信号。例如,音频组件可以包括一个麦克风,麦克风用于接收外部音频信号。所接收的音频信号可以被进一步存储在存储器702或通过通信组件705发送。音频组件还包括至少一个扬声器,用于输出音频信号。I/O接口704为处理器701和其他接口模块之间提供接口,上述其他接口模块可以是键盘,鼠标,按钮等。这些按钮可以是虚拟按钮或者实体按钮。通信组件705用于该电子设备700与其他设备之间进行有线或无线通信。无线通信,例如Wi-Fi,蓝牙,近场通信(Near FieldCommunication,简称NFC),2G、3G、4G、NB-IOT、eMTC、或其他5G等等,或它们中的一种或几种的组合,在此不做限定。因此相应的该通信组件705可以包括:Wi-Fi模块,蓝牙模块,NFC模块等等。

在一示例性实施例中,电子设备700可以被一个或多个应用专用集成电路(Application Specific Integrated Circuit,简称ASIC)、数字信号处理器(DigitalSignal Processor,简称DSP)、数字信号处理设备(Digital Signal Processing Device,简称DSPD)、可编程逻辑器件(Programmable Logic Device,简称PLD)、现场可编程门阵列(Field Programmable Gate Array,简称FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述的区块链账本数据的处理方法。

在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,该程序指令被处理器执行时实现上述的区块链账本数据的处理方法的步骤。例如,该计算机可读存储介质可以为上述包括程序指令的存储器702,上述程序指令可由电子设备700的处理器701执行以完成上述的区块链账本数据的处理方法。

在另一示例性实施例中,还提供一种计算机程序产品,该计算机程序产品包含能够由可编程的装置执行的计算机程序,该计算机程序具有当由该可编程的装置执行时用于执行上述的区块链账本数据的处理方法的代码部分。

以上结合附图详细描述了本公开的优选实施方式,但是,本公开并不限于上述实施方式中的具体细节,在本公开的技术构思范围内,可以对本公开的技术方案进行多种简单变型,这些简单变型均属于本公开的保护范围。

另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合。为了避免不必要的重复,本公开对各种可能的组合方式不再另行说明。

此外,本公开的各种不同的实施方式之间也可以进行任意组合,只要其不违背本公开的思想,其同样应当视为本公开所公开的内容。

相关技术
  • 区块链账本数据的处理方法、装置、存储介质及电子设备
  • 区块链节点的账本处理方法、装置、服务器及存储介质
技术分类

06120112502436