CN114780285B 区块链数据恢复方法及装置、电子设备(蚂蚁区块链科技(上海)有限公司)_第1页
CN114780285B 区块链数据恢复方法及装置、电子设备(蚂蚁区块链科技(上海)有限公司)_第2页
CN114780285B 区块链数据恢复方法及装置、电子设备(蚂蚁区块链科技(上海)有限公司)_第3页
CN114780285B 区块链数据恢复方法及装置、电子设备(蚂蚁区块链科技(上海)有限公司)_第4页
CN114780285B 区块链数据恢复方法及装置、电子设备(蚂蚁区块链科技(上海)有限公司)_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

(19)国家知识产权局(12)发明专利地址200010上海市黄浦区外马路618号8层803室(72)发明人俞本权陆钟豪卓海振限公司11415专利代理师李威一种区块链数据恢复方法,应用于节点设述多个存储系统中用于存储所述区块交易数据的目标存储系统支持预写日志WAL模式;所述方于所述WAL日志文件恢复所述区块交易数据,并执行恢复出的所述区块交易数据以生成所述其,读取与所述目标存储系统中存储的区块交易数据对应的WAL日志的所述区块交易数据以生成所述其它类型的区块链数据将生成的所述其它类型的区块链数据,分别写储系统中用于存储所述其它类型的区块链数据~10421.一种区块链数据恢复方法,应用于节点设备;所述节点设备搭载了用于存储区块链数据的多个存储系统;其中,所述区块链数据包括区块交易数据和至少一种其它类型的区块链数据;所述多个存储系统中用于存储所述区块交易数据的目标存储系统支持预写日志响应于针对所述其它类型的区块链数据进行恢复的第一事件,读取与所述目标存储系基于所述WAL日志文件恢复所述区块交易数据,并执行恢复出的所述区块交易数据以生成所述其它类型的区块链数据;将生成的所述其它类型的区块链数据,分别写入所述多个存储系统中用于存储所述其它类型的区块链数据的各存储系统,所述各存储系统未启用预写日2.根据权利要求1所述的方法,所述方法还包括:确定所述各存储系统存储的所述其它类型的区块链数据对应的区块号中的最新区块号C,是否小于所述目标存储系统存储的区块交易数据对应的区块号中的最新区块号N;如3.根据权利要求2所述的方法,所述最新区块号C为所述各存储系统中存储的所述其它类型的区块链数据对应的最新区块号的最小值;确定所述各存储系统存储的所述其它类型的区块链数据对应的最新区块号C,是否小于所述目标存储系统存储的区块交易数据对应的最新区块号N之前,还包括:计算所述各存储系统中存储的所述其它类型的区块链数据对应的最新区块号的最小4.根据权利要求3所述的方法,所述多个存储系统存储的区块链数据的数据标识,包括所述区块链数据对应的区块号。5.根据权利要求4所述的方法,所述多个存储系统存储的区块链数据的数据标识,采用了统一的数据格式。6.根据权利要求5所述的方法,所述数据标识采用了WAL日志文件的LSN日志序列编号的数据格式。7.根据权利要求2所述的方法,读取与所述目标存储系统中存储的区块交易数据对应分别读取由所述最新区块号C和所述最新区块号N构成的区块号区间(C,N)中的各区块号所表示的区块中的区块交易数据对应的WAL日志文件;基于所述WAL日志文件恢复所述区块交易数据,并执行恢复出的所述区块链交易以生基于读取到的所述区块号区间(C,N)中的各区块号表示的区块中的区块交易数据对应的WAL日志文件,恢复与所述各区块号所表示的区块中的区块交易数据,并执行恢复出的所述区块交易数据,以生成与所述各区块号所表示的区块中的区块交易数据对应的所述其它类型的区块链数据。8.根据权利要求2所述的方法,确定所述各存储系统存储的所述其它类型的区块链数据对应的最新区块号C,是否小于所述目标存储系统存储的区块交易数据对应的最新区块号N,包括:3周期性确定所述各存储系统存储的所述其它类型的区块链数据对应的最新区块号C,是否小于所述目标存储系统存储的区块交易数据对应的最新区块号N;或者,响应于用户触发的针对所述其它类型的区块链数据进行恢复的指令,确定所述各存储系统存储的所述其它类型的区块链数据对应的最新区块号C,是否小于所述目标存储系统存储的区块交易数据对应的最新区块号N。9.根据权利要求1或8所述的方法,所述其它类型的区块链数据,包括以下示出的一个或者多个的组合:与所述区块交易数据对应的区块的区块头数据;与所述区块交易数据对应的交易收据;在所述区块交易数据执行完毕后,与所述区块链中的区块链账户对应的账户状态数10.根据权利要求1所述的方法,所述方法还包括:响应于对所述区块交易数据进行恢复的第二事件,基于所述WAL日志文件恢复所述区块交易数据,并将恢复出的所述区块交易数据,写入所述目标存储系统。11.根据权利要求10所述的方法,所述方法还包括:确定与所述目标存储系统中存储的区块交易数据对应的WAL日志文件的文件数量或者12.根据权利要求11所述的方法,确定与所述目标存储系统中存储的区块交易数据对应的WAL日志文件的文件数量或者存储容量是否达到阈值,包括:周期性确定与所述目标存储系统中存储的区块交易数据对应的WAL日志文件的文件数响应于用户触发的针对所述区块交易数据进行恢复的指令,确定与所述目标存储系统中存储的区块交易数据对应的WAL日志文件的文件数量或者存储容量是否达到阈值。13.一种区块链数据恢复装置,应用于节点设备;所述节点设备搭载了用于存储区块链数据的多个存储系统;其中,所述区块链数据包括区块交易数据和至少一种其它类型的区块链数据;所述多个存储系统中用于存储所述区块交易数据的目标存储系统支持预写日志读取模块,响应于针对所述其它类型的区块链数据进行恢复的第一事件,读取与所述目标存储系统中存储的区块交易数据对应的WAL日志文件;恢复模块,基于所述WAL日志文件恢复所述区块交易数据,并执行恢复出的所述区块交易数据以生成所述其它类型的区块链数据;写入模块,将生成的所述其它类型的区块链数据,分别写入所述多个存储系统中用于存储所述其它类型的区块链数据的各存储系统,所述各存储系统未启用预写日志WAL模式。处理器;用于存储处理器可执行指令的存储器;其中,所述处理器通过运行所述可执行指令以实现如权利要求1-12中任一项所述的方15.一种计算机可读存储介质,其上存储有计算机指令,其特征在于,该指令被处理器4执行时实现如权利要求1-12中任一项所述方法的步骤。5技术领域[0001]本说明书一个或多个实施例涉及区块链技术领域,尤其涉及一种区块链数据恢复方法及装置、电子设备。背景技术[0002]区块链技术,也被称之为分布式账本技术,是一种由若干台计算设备共同参与“记账”,共同维护一份完整的分布式数据库的新兴技术。由于区块链技术具有去中心化、公开透明、每台计算设备可以参与数据库记录、并且各计算设备之间可以快速的进行数据同步的特性,使得区块链技术已在众多的领域中广泛的进行应用。发明内容[0003]本说明书提出一种区块链数据恢复方法,应用于节点设备;所述节点设备搭载了用于存储区块链数据的多个存储系统;其中,所述区块链数据包括区块交易数据和至少一种其它类型的区块链数据;所述多个存储系统中用于存储所述区块交易数据的目标存储[0004]响应于针对所述其它类型的区块链数据进行恢复的第一事件,读取与所述目标存储系统中存储的区块交易数据对应的WAL日志文件;[0005]基于所述WAL日志文件恢复所述区块交易数据,并执行恢复出的所述区块交易数据以生成所述其它类型的区块链数据;[0006]将生成的所述其它类型的区块链数据,分别写入所述多个存储系统中用于存储所述其它类型的区块链数据的各存储系统。[0008]确定所述各存储系统存储的所述其它类型的区块链数据对应的区块号中的最新区块号C,是否小于所述目标存储系统存储的区块交易数据对应的区块号中的最新区块号N;如果是,生成所述第一事件。[0009]可选的,所述最新区块号C为所述各存储系统中存储的所述其它类型的区块链数据对应的最新区块号的最小值;[0010]确定所述各存储系统存储的所述其它类型的区块链数据对应的最新区块号C,是否小于所述目标存储系统存储的区块交易数据对应的最新区块号N之前,还包括:[0011]计算所述各存储系统中存储的所述其它类型的区块链数据对应的最新区块号的最小值,得到所述最新区块号C。[0012]可选的,所述多个存储系统存储的区块链数据的数据标识,包括所述区块链数据对应的区块号。[0013]可选的,所述多个存储系统存储的区块链数据的数据标识,采用了统一的数据格6[0015]可选的,读取与所述目标存储系统中存储的区块交易数据对应的WAL日志文件,包[0016]分别读取由所述最新区块号C和所述最新区块号N构成的区块号区间(C,N)中的各区块号所表示的区块中的区块交易数据对应的WAL日志文件;[0017]基于所述WAL日志文件恢复所述区块交易数据,并执行恢复出的所述区块链交易以生成所述其它类型的区块链数据,包括:[0018]基于读取到的所述区块号区间(C,N)中的各区块号表示的区块中的区块交易数据对应的WAL日志文件,恢复与所述各区块号所表示的区块中的区块交易数据,并执行恢复出的所述区块交易数据,以生成与所述各区块号所表示的区块中的区块交易数据对应的所述其它类型的区块链数据。[0019]可选的,确定所述各存储系统存储的所述其它类型的区块链数据对应的最新区块号C,是否小于所述目标存储系统存储的区块交易数据对应的最新区块号N,包括:[0020]周期性确定所述各存储系统存储的所述其它类型的区块链数据对应的最新区块号C,是否小于所述目标存储系统存储的区块交易数据对应的最新区块号N;或者,[0021]响应于用户触发的针对所述其它类型的区块链数据进行恢复的指令,确定所述各存储系统存储的所述其它类型的区块链数据对应的最新区块号C,是否小于所述目标存储系统存储的区块交易数据对应的最新区块号N。[0022]可选的,所述其它类型的区块链数据,包括以下示出的一个或者多个的组合:[0023]与所述区块交易数据对应的区块的区块头数据;[0024]与所述区块交易数据对应的交易收据;[0025]在所述区块交易数据执行完毕后,与所述区块链中的区块链账户对应的账户状态[0027]响应于对所述区块交易数据进行恢复的第二事件,基于所述WAL日志文件恢复所述区块交易数据,并将恢复出的所述区块交易数据,写入所述目标存储系统。[0029]确定与所述目标存储系统中存储的区块交易数据对应的WAL日志文件的文件数量或者存储容量是否达到阈值;如果是,生成所述第二事件。[0030]可选的,确定与所述目标存储系统中存储的区块交易数据对应的WAL日志文件的文件数量或者存储容量是否达到阈值,包括:[0031]周期性确定与所述目标存储系统中存储的区块交易数据对应的WAL日志文件的文件数量或者存储容量是否达到阈值;或者,[0032]响应于用户触发的针对所述区块交易数据进行恢复的指令,确定与所述目标存储系统中存储的区块交易数据对应的WAL日志文件的文件数量或者存储容量是否达到阈值。[0033]本说明书还提出一种区块链数据恢复装置,应用于节点设备;所述节点设备搭载了用于存储区块链数据的多个存储系统;其中,所述区块链数据包括区块交易数据和至少一种其它类型的区块链数据;所述多个存储系统中用于存储所述区块交易数据的目标存[0034]读取模块,响应于针对所述其它类型的区块链数据进行恢复的第一事件,读取与7所述目标存储系统中存储的区块交易数据对应的WAL日志文件;[0035]恢复模块,基于所述WAL日志文件恢复所述区块交易数据,并执行恢复出的所述区块交易数据以生成所述其它类型的区块链数据;[0036]写入模块,将生成的所述其它类型的区块链数据,分别写入所述多个存储系统中用于存储所述其它类型的区块链数据的各存储系统。[0038]第一确定模块,确定所述各存储系统存储的所述其它类型的区块链数据对应的区块号中的最新区块号C,是否小于所述目标存储系统存储的区块交易数据对应的区块号中的最新区块号N;如果是,生成所述第一事件。[0039]可选的,所述最新区块号C为所述各存储系统中存储的所述其它类型的区块链数据对应的最新区块号的最小值;[0040]所述确定模块进一步:[0041]在确定所述各存储系统存储的所述其它类型的区块链数据对应的最新区块号C,是否小于所述目标存储系统存储的区块交易数据对应的最新区块号N之前,计算所述各存储系统中存储的所述其它类型的区块链数据对应的最新区块号的最小值,得到所述最新[0042]可选的,所述多个存储系统存储的区块链数据的数据标识,包括所述区块链数据对应的区块号。[0043]可选的,所述多个存储系统存储的区块链数据的数据标识,采用了统一的数据格[0046]分别读取由所述最新区块号C和所述最新区块号N构成的区块号区间(C,N)中的各区块号所表示的区块中的区块交易数据对应的WAL日志文件;[0048]基于读取到的所述区块号区间(C,N)中的各区块号表示的区块中的区块交易数据对应的WAL日志文件,恢复与所述各区块号所表示的区块中的区块交易数据,并执行恢复出的所述区块交易数据,以生成与所述各区块号所表示的区块中的区块交易数据对应的所述其它类型的区块链数据。[0050]周期性确定所述各存储系统存储的所述其它类型的区块链数据对应的最新区块号C,是否小于所述目标存储系统存储的区块交易数据对应的最新区块号N;或者,[0051]响应于用户触发的针对所述其它类型的区块链数据进行恢复的指令,确定所述各存储系统存储的所述其它类型的区块链数据对应的最新区块号C,是否小于所述目标存储系统存储的区块交易数据对应的最新区块号N。[0052]可选的,所述其它类型的区块链数据,包括以下示出的一个或者多个的组合:[0053]与所述区块交易数据对应的区块的区块头数据;[0054]与所述区块交易数据对应的交易收据;[0055]在所述区块交易数据执行完毕后,与所述区块链中的区块链账户对应的账户状态8数据。[0057]响应于对所述区块交易数据进行恢复的第二事件,基于所述WAL日志文件恢复所述区块交易数据,并将恢复出的所述区块交易数据,写入所述目标存储系统。[0059]第二确定模块,确定与所述目标存储系统中存储的区块交易数据对应的WAL日志文件的文件数量或者存储容量是否达到阈值;如果是,生成所述第二事件。[0061]周期性确定与所述目标存储系统中存储的区块交易数据对应的WAL日志文件的文件数量或者存储容量是否达到阈值;或者,[0062]响应于用户触发的针对所述区块交易数据进行恢复的指令,确定与所述目标存储系统中存储的区块交易数据对应的WAL日志文件的文件数量或者存储容量是否达到阈值。[0063]以上技术方案中,一方面,由于区块链搭载的多个存储系统中,可以只有用于存储区块交易数据的目标存储系统支持预写日志WAL模式,而用于存储与该区块交易数据对应的其它类型的区块链数据的存储系统则可以不必重复启用WAL模式;因此,对于搭载多个存储系统的节点设备而言,可以只存储和维护一份与区块交易数据对应的WAL日志文件即可,不再需要在存储和维护多份WAL日志文件,可以显著降低节点设备在存储多种区块链数据时的存储开销;[0064]另一方面,由于节点设备存储的与该区块交易数据对应的其它类型的区块链数据,是基于与区块交易数据对应的WAL日志文件来进行统一恢复;对于搭载多个存储系统的节点设备而言,可以不再需要基于各个存储系统对应的WAL日志文件来分别进行数据恢复;因此,可以显著降低节点设备在恢复多种区块链数据时的性能开销。附图说明[0065]图1是一示例性实施例提供的一种区块链数据恢复方法的流程图;[0066]图2是一示例性实施例提供的一种电子设备的结构示意图;[0067]图3是一示例性实施例提供的一种区块链数据恢复装置的框图。具体实施方式[0068]这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。[0069]需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。9[0070]区块链一般被划分为三种类型:公有链(PublicBlockchain),私有链(PrivateBlockchain)和联盟链(ConsortiumBlockchain)。此外,还可以有上述多种类型的结合,比如私有链+联盟链、联盟链+公有链等。[0071]其中,去中心化程度最高的是公有链。加入公有链的参与者(也可称为区块链中的节点)可以读取链上的数据记录、参与交易、以及竞争新区块的记账权等。而且,各节点可自由加入或者退出网络,并进行相关操作。[0072]私有链则相反,该网络的写入权限由某个组织或者机构控制,数据读取权限受组织规定。简单来说,私有链可以为一个弱中心化系统,其对节点具有严格限制且节点数量较少。这种类型的区块链更适合于特定机构内部使用。[0073]联盟链则是介于公有链以及私有链之间的区块链,可实现“部分去中心化”。联盟链中各个节点通常有与之相对应的实体机构或者组织;节点通过授权加入网络并组成利益相关联盟,共同维护区块链运行。[0074]基于区块链的基本特性,区块链通常是由若干个区块构成。在这些区块中分别记录有与该区块的创建时刻对应的时间戳,所有的区块严格按照区块中记录的时间戳,构成一条在时间上有序的数据链条。[0075]对于物理世界产生的真实数据,可以将其构建成区块链所支持的标准的交易(transaction)格式,然后发布至区块链,由区块链中的节点设备对收到的交易进行共识处理,并在达成共识后,由区块链中作为记账节点的节点设备,将这笔交易打包进区块,在区块链中进行持久化存证。[0077]第一类共识算法,即节点设备需要争夺每一轮的记账周期的记账权的共识算法;(DelegatedProofofStake,DPOS)等共识算法;[0078]第二类共识算法,即预先为每一轮记账周期选举记账节点(不需要争夺记账权)的共识算法;例如,实用拜占庭容错(PracticalByzantineFaultTolerance,PBFT)等共识[0079]在采用第一类共识算法的区块链网络中,争夺记账权的节点设备,都可以在接收到交易后执行该笔交易。争夺记账权的节点设备中可能有一个节点设备在本轮争夺记账权的过程中胜出,成为记账节点。记账节点可以将收到的交易与其它交易一起打包以生成最新区块,并将生成的最新区块或者该最新区块的区块头发送至其它节点设备进行共识。[0080]在采用第二类共识算法的区块链网络中,具有记账权的节点设备在本轮记账前已经商定好。因此,节点设备在接收到交易后,如果自身不是本轮的记账节点,则可以将该交易发送至记账节点。对于本轮的记账节点,在将该交易与其它交易一起打包以生成最新区块的过程中或者之前,可以执行该交易。记账节点在生成最新区块后,可以将该最新区块或者该最新区块的区块头发送至其它节点设备进行共识。[0081]如上所述,无论区块链采用以上示出的哪种共识算法,本轮的记账节点都可以将接收到的交易打包以生成最新区块,并将生成的最新区块或者该最新区块的区块头发送至其它节点设备进行共识验证。如果其它节点设备接收到最新区块或者该最新区块的区块头后,经验证没有问题,可以将该最新区块追加到原有的区块链末尾,从而完成区块链的记账过程。其它节点验证记账节点发来的新的区块或区块头的过程中,也可以执行该区块中的包含的交易。[0082]在区块链领域,有一个重要的概念就是账户(Account);以以太坊为例,以太坊通常将账户划分为外部账户和合约账户两类;外部账户就是由用户直接控制的账户,也称之为用户账户;而合约账户则是由用户通过外部账户创建的,包含合约代码的账户(即智能合约)。[0083]当然,对于一些基于以太坊的架构而衍生出的区块链模型(比如蚂蚁区块链),还可以对区块链支持的账户类型,进行进一步的扩展,在本说明书中不进行特别限定。[0084]对于区块链中的账户而言,通常会通过一个结构体,来维护账户的账户状态。当区块中的交易被执行后,区块链中与该交易相关的账户的状态通常也会发生变化。[0085]以以太坊为例,账户的结构体通常包括Balance,Nonce,Code和Storage等字段。其[0086]Balance字段,用于维护账户目前的账户余额;[0087]Nonce字段,用于维护该账户的交易次数;它是用于保障每笔交易能且只能被处理一次的计数器,有效避免重放攻击;[0088]Code字段,用于维护该账户的合约代码;在实际应用中,Code字段中通常仅维护合[0089]Storage字段,用于维护该账户的存储内容(默认字段值为空);对于合约账户而言,通常会分配一个独立的存储空间,用以存储该合约账户的存储内容;该独立的存储空间通常称之为该合约账户的账户存储。合约账户的存储内容通常会构建成MPT(MerklePatriciaTrie)树的数据结构存储在上述独立的存储空间之中;其中,基于合约账户的存外部账户而言,以上示出的Code字段和Storage字段的字段值均为空值。[0090]对于大多数区块链模型,通常都会使用Merkle树的数据结构;或者,基于Merkle树的数据结构,来存储和维护区块链数据。[0091]其中,对于节点设备来说,需要存储和维护的区块链数据,通常包括区块数据、区块链中的区块链账户对应的账户状态数据;而区块数据又进一步包括区块头数据、区块中的区块交易数据、以及与区块中的区块交易数据对应的交易收据,等等。需要说明的是,在实际应用中,节点设备除了需要存储和维护区块链数据以外,也需要存储和维护与区块链数据对应的索引数据。户状态、交易信息等重要数据。其中,MPT树是一种融合了Trie树变种。[0093]以太坊针对区块链中需要存储和维护的区块链数据,设计了三棵MPT树,分别是于合约账户的存储内容构建的Storage树。11交易在执行完毕后生成的与每笔交易对应的交易(receipt)收据组织成的MPT树。以上示的区块头中。涵盖了区块链中所有账户的账户状态数据。[0097]区块链每产生一个最新区块,则在该最新区块中的交易被执行之后,区块链中这些被执行交易的相关账户(可以是外部账户也可以是合约账户)的账户状态,通常也会随之发生变化;户和转入方账户的余额(即这些账户的Balance字段的字段值),通常也会随之发生变化。[0099]而节点设备在区块链产生的最新区块中的交易执行完毕后,由于当前区块链中的账户状态发生了变化,因此节点设备需要根据区块链中所有账户当前的账户状态数据,来构建MPT状态树,用于维护区块链中所有账户的[0100]也即,每当区块链中产生一个最新区块,并且该最新区块中的交易执行完毕后,导致区块链中的账户状态发生了变化,节点设备都需要基于区块链中所有账户最新的账户状维护了在该区块中的交易在执行完毕后,区块链中所有账户最新的账户状态。[0102]在实际应用中,由于区块链通常会与链外的各种业务系进行对接,来进行多方的数据和工作流协作(跟业务无关);例如,一个与区块链对接的业务系统A,可以将相关的业务数据发布到区块链上,来驱动另一个与区块链对接的业务系统B,基于该业务数据执行进一步的业务处理;[0103]而不同类型的区块链数据,在多方的数据和工作流协作的过程中,实际起到的作用可能互不相同;节点设备在存储和维护区块链数据时,通常会搭载多个存储系统,并将不同类型的区块链数据分别存储到不同的存储系统中。[0104]例如,在一个例子中,节点设备可以搭载3个不同的存储系统,将区块数据、state数据(即上述账户状态数据)、以及上述2种数据对应的索引数据(比如以上两种数据的hash值),分别存储在不同的存储系统中。(5份WAL分别举例)[0105]在另一个例子中,节点设备可以将区块头数据、区块交易数据、与区块交易数据对应的交易收据、state数据(即上述账户状态数据)、以及上述4种数据对应的索引数据(比如以上4种数据的hash值),分别存储在不同的存储系统中;在这种情况下,节点设备可以搭载5个不同的存储系统,分别将区块头数据、区块交易数据、与区块交易数据对应的交易收据、state数据、以及上述4种数据对应的索引数据,分别存储在这5个不同的存储系统中。[0106]节点设备在将不同类型的区块链数据,分别存储到在搭载的不同的存储系统中时,为了防止由于数据未写入造成的数据丢失,各个存储系统可以开启WAL(writeaheadlogging,预写日志)模式。存储系统的数据修改,在提交到存储系统中之前,都会先写入WAL日志文件中;然后,再通入到存储系统中。[0108]通过为节点设备搭载的存储系统开启WAL模式,虽然可以防止由于数据未写入造成的数据丢失,但对于节点设备存储的区块链账本中,往往包含多种不同类型的区块链数据,需要存储在不同的存储系统中;因此,存储多分多份WAL日志文件会增加节点设备的存储开销;而且,节点设备在将多份WAL日志文件中存储的数据修改恢复到存储系统时,需要多次执行相关的恢复流程,也会增加节点设备的性能开销。[0109]有鉴于此,本说明书提出一种利用节点设备存储的一份与区块链交易数据对应的WAL日志文件,对多种区块链数据进行恢复的技术方案。[0110]在实现时,区块链的节点设备可以搭载用于存储区块链数据的多个存储系统;其中,上述区块链数据可以包括区块交易数据和至少一种与其它类型的区块链数据;上述多个存储系统中用于存储该区块交易数据的目标存储系统可以支持预写日志WAL模式;[0111]当节点设备响应于针对上述其它类型的区块链数据进行恢复的第一事件时,可以读取与该目标存储系统中存储的区块交易数据对应的WAL日志文件;再基于读取到的WAL日志文件恢复上述区块交易数据,当上述区块交易数据恢复完成后,再进一步执行恢复出的该区块交易数据,以生成上述其它类型的区块链数据;然后,再将生成的上述其它类型的区块链数据,分别写入上述多个存储系统中用于存储上述其它类型的区块链数据的各存储系统。[0112]在以上技术方案中,以上技术方案中,一方面,由于区块链搭载的多个存储系统中,可以只有用于存储区块交易数据的目标存储系统支持预写日志WAL模式,而用于存储与该区块交易数据对应的其它类型的区块链数据的存储系统则可以不必重复启用WAL模式;因此,对于搭载多个存储系统的节点设备而言,可以只存储和维护一份与区块交易数据对应的WAL日志文件即可,不再需要在存储和维护多份WAL日志文件,可以显著降低节点设备在存储多种区块链数据时的存储开销;[0113]另一方面,由于节点设备存储的与该区块交易数据对应的其它类型的区块链数据,是基于与区块交易数据对应的WAL日志文件来进行统一恢复;对于搭载多个存储系统的节点设备而言,可以不再需要基于各个存储系统对应的WAL日志文件来分别进行数据恢复;因此,可以显著降低节点设备在恢复多种区块链数据时的性能开销。[0114]请参见图1,图1是一示例性实施例提供的一种区块链数据恢复方法的流程图。所述方法应用于区块链节点设备;其中,所述区块链数据包括区块交易数据和至少一种与所述区块交易数据对应的其它类型的区块链数据;所述多个存储系统中用于存储所述区块交易数据的目标存储系统支持预写日志WAL模式;所述方法包括以下步骤:[0115]步骤102,响应于针对所述其它类型的区块链数据进行恢复的第一事件,读取与所述目标存储系统中存储的区块交易数据对应的WAL日志文件;[0116]步骤104,基于所述WAL日志文件恢复所述区块交易数据,并执行恢复出的所述区块交易数据以生成所述其它类型的区块链数据;[0117]步骤106,将生成的所述其它类型的区块链数据,分别写入所述多个存储系统中用于存储所述其它类型的区块链数据的各存储系统。[0118]在本说明书中,节点设备存储的区块链账本中,通常会包括多种不同类型的区块链数据。而上述多种不同类型的区块链数据,通常可以包括区块数据、区块链中的区块链账户对应的账户状态数据,等等;其中,区块数据通常包括区块头数据和区块体数据;上述区块体数据,又进一步包括区块中的区块交易数据、以及与区块中的区块交易数据对应的[0119]在实际应用中,为便于对存储的区块链数据进行查询检索,除了以上列举的区块链数据以外,节点设备通常还需要存储和维护与上述各种区块链数据对应的索引数据。其[0120]例如,对于支持对区块链账本中存储的区块链数据进行内容寻址的区块链系统,具体可以将上述区块链数据的内容摘要(比如hash值),作为该区块链数据的索引数据,从而使得用户可以将上述区块链数据的内容摘要作为查询索引,来查询和访问区块链账本中相关的区块链数据;[0121]对于不支持对区块链账户中存储的区块链数据进行内容寻址的区块链系统,则具体可以将由区块链系统为存储的区块链数据设置的数据标识(比如数据编号),作为该区块链数据的索引数据,从而使得用户可以将上述区块链数据的数据标识作为查询索引,来查询和访问区块链账本中相关的区块链数据。[0122]节点设备在存储和维护以上列举的各种区块链数据时,可以搭载多个存储系统,并将不同类型的区块链数据分别存储到不同的存储系统中。其中,上述存储系统,具体可以包括任意形式的,用于对区块链账本中的区块链数据进行持久化存储的存储系统;例说明书中不进行特别限定。[0123]需要说明的是,由于区块头数据、与区块交易数据对应的交易收据、state数据(即上述账户状态数据)等数据;通常都可以通过重新执行区块中的区块交易(即交易重放)数据恢复出来;因此,上述区块交易数据可以作为其它类型的区块链数据的“根数据”;节点设备在存储以上示出的各种类型的区块链数据时,可以将上述区块交易数据与其它类型的区块链数据分别存储在不同的存储系统中。[0124]例如,在一个例子中,节点设备可以搭载5个不同的存储系统,分别将区块交易数据、以及与区块交易数据对应的区块的区块头数据、与区块交易数据对应的交易收据、state数据、以及上述4种数据对应的索引数据,分别存储在这5个不同的存储系统中。储系统中用于存储“根数据”(即区块交易数据)的目标存储系统,可以开启WAL模式。在开启WAL模式后,所有针对该目标存储系统的数据修改(比如写入新的区块交易数据),在提交到该目标存储系统中之前,都会以WAL日志文件的形式先写入到与该目标存储系统对应的WAL日志缓冲区;其中,日志缓冲区具体也可以是一个持久化存储;然后,当区块链系统触发了与上述目标存储系统对应的checkpoint事件时,节点设备可以响应该checkpoint事件,再将WAL日志文件中存储的对上述“根数据”数据修改,[0126]其中,上述checkpoint事件是指基于WAL日志文件对存储系统中存储的区块链数据进行数据恢复的事件。[0127]而对于各个存储系统中用于存储“根数据”以外的其它类型的区块链数据的其它[0128]在这种情况下,区块链系统也可以对未开启WAL模式的上述其它各存储系统的checkpoint事件;而当区块链系统触发了与上述其它各存储系统对应的checkpoint事件行数据恢复计算,再基于数据恢复计算的计算结果,对上述其它各存储系统中存储的其它类型的区块链数据进行跨存储系统的数据恢复。[0129]在本说明书中,节点设备对上述目标存储系统中存储的区块交易数据进行恢复的流程,和对上述其它各存储系统中存储的其它类型的区块链数据进行恢复的流程,可以是两个互相独立的流程,在本说明书中不对二者的执行顺序进行特别的限定。[0130]也即,在实际应用中,节点设备可以先执行对上述目标存储系统中存储的区块交易数据进行恢复的流程,再执行对上述其它各存储系统中存储的其它类型的区块链数据进行恢复的流程;也可以先执行对上述其它各存储系统中存储的其它类型的区块链数据进行恢复的流程,再执行对上述目标存储系统中存储的区块交易数据进行恢复的流程定;[0131]需要说明的是,由于对上述目标存储系统中存储的区块交易数据进行恢复的流程,也是基于与上述区块交易数据对应的WAL日志文件来完成的;因此,如果节点设备先执行对上述目标存储系统中存储的区块交易数据进行恢复的流程,则需要在上述区块交易数据恢复完毕后,暂时不删除日志缓冲区存储的与上述区块交易数据对应的WAL日志文件;当节点设备开始执行对上述其它各存储系统中存储的其它类型的区块链数据进行恢复的流程,可以继续基于上述WAL日志文件对上述其它各存储系统中存储的其它类型的区块链数据进行恢复,并在恢复完成后再将该WAL日志文件从日志缓冲区删除。[0132]其中,还需要说明的是,由于节点设备对上述目标存储系统中存储的区块交易数据进行恢复的流程,和对上述其它各存储系统中存储的其它类型的区块链数据进行恢复的流程,是两个互相独立的流程;因此,区块链系统触发的与上述目标存储系统对应的checkpoint事件,和区块链系统触发的与上述其它各存储系统对应的checkpoint事件对应[0133]其中,为了便于描述,对于区块链系统触发的与上述其它各存储系统对应的checkpoint事件,将称之为“第一事件”;对于区块链系统触发的与上述目标存储系统对应[0134]在示出的一种实施方式中,基于WAL的数据恢复机制,上述第一事件的触发条件,通常可以包括与上述目标存储系统中存储的区块交易数据对应的WAL日志文件的文件数量达到阈值;或者,与上述目标存储系统中存储的区块交易数据对应的WAL日志文件的存储容量达到阈值。[0135]也即,当与上述目标存储系统中存储的区块交易数据对应的WAL日志文件的文件数量达到阈值;或者,与上述目标存储系统中存储的区块交易数据对应的WAL日志文件的存储容量达到阈值,可以触发区块链系统生成上述第一事件。[0136]在示出的另一种实施方式中,由于对上述其它各存储系统中存储的其它类型的区块链数据的数据恢复,是基于与上述目标存储系统对应的WAL日志文件进行的跨存储系统恢复有所不同;因此,上述第二事件的触发条件,可以与基于WAL的数据恢复机制的各存储系统存储的上述其它类型的区块链数据对应的区块号中的的最新区块号C,小于上述目标存储系统存储的区块交易数据对应的区块号中的最新区块系统触发的上述第二事件,对上述目标存储系统中存储的区块交易数据进行恢复的流程,的区块链数据进行恢复时,可以周期性确定上述其它各存储系统存储的上述其它类型的区块链数据对应的最新区块号C,是否小于上述目标存储系统存储的区块交易数据对应的基于该周期T,定时检查上述其它各存储系统是否满足上述checkpiont事件的触发条件。型的区块链数据进行恢复时,也可以响应于用户手动触发的针对上述其它类型的区块链数据进行恢复的指令,来确定上述其它各存储系统存储的上述其它类型的区块链数据对应的最新区块号C,是否小于上述目标存储系统存储的区块交易数据对应的最新区块号N;一些恢复场景中,用户可能需要对上述其它各存储系统存储的上述其它类型的区块链数一个历史区块对应的数据版本;在这种场景中,用户可以通过手动输入恢复指令的方式,来触发节点设备检查上述其它各存储系统是否满足上述checkpiont事件的触发条件。C,具体可以是上述其它各存储系统存储的上述其它类型的区块链数据对应的最新区块号它类型的区块链数据对应的最新区块号的最小值,得到上述最新区块号C,再进一步确定上述最新区块号C,是否小于所述目标存储系统存储的区块交易数据对应的最新区块号N。号的信息。[0145]在一种实现方式中,节点设备搭载的各个存储系统存储的区块链数据的数据标识,具体可以采用统一的数据格式,并在采用的统一的数据格式中,携带该区块链数据对应的区块号;或者指示该区块链数据对应的区块号的信息。[0146]其中,上述数据格式,在本说明书中不进行特别限定;例如,在一个例子中,节点设备搭载的各个存储系统存储的区块链数据的数据标识,可以统一采用WAL日志文件的LSN(LogSequenceNumber,日志序列编号)的数据格式,并通过在WAL日志文件的LSN该区块链数据对应的区块号;或者指示该区块链数据对应的区块号的信息。[0147]在本说明书中,当触发生成了上述第一事件,节点设备可以响应于该第一事件,从与上述目标存储系统对应的日志缓冲区,分别读取由上述最新区块号C和上述最新区块号N构成的区块号区间(C,N)中的各区块号所表示的区块中的区块交易数据对应的WAL日志文件;然后,基于读取到的WAL日志文件,恢复与上述区块号区间(C,N)中的各区块号所表示的区块中的区块交易数据。[0148]当上述区块号区间(C,N)中的各区块号所表示的区块中的区块交易数据恢复出来后,可以进一步执行恢复出的区块交易数据,通过重新执行交易的方式,生成与上述区块号区间(C,N)中的各区块号所表示的区块中的区块交易数据对应的上述其它类型的区块链数据。[0149]例如,在一个例子中,假设节点设备搭载5个不同的存储系统,分别将区块交易数据、以及与区块交易数据对应的区块的区块头数据、与区块交易数据对应的交易收据、state数据、以及上述4种数据对应的索引数据,存储在这5个不同的存储系统中;其中,存储上述区块交易数据的目标存储系统开启了WAL模式;则在对上述其它类型的区块链数据进行恢复时,则可以在读取到上述区块号区间[C,N]中的各区块号所表示的区块中的区块交易数据对应的WAL日志文件后,基于该WAL日志文件先对上述区块交易数据进行恢复,并在上述区块交易数据恢复完成后,通过重新执行上述区块交易数据的方式,对与上述区块交易数据对应的区块头数据、对应的交易收据、对应的state数据以及对应的索引数据分别进行恢复。[0150]其中,通过重新执行区块中的交易数据,生成该区块的区块头数据、与上述交易数据对应的交易数据、对应的state数据、以及对应的索引数据的具体方式,为区块链领域的公知常识,在本说明书中不再进行详述,本领域技术人员在将本说明书的技术方案辅助实现时,可以参考相关技术中的记载。[0151]在示出的一种实施方式中,节点设备在对上述目标存储系统中存储的区块交易数据进行恢复时,可以周期性确定上述目标存储系统中存储的区块交易数据对应的WAL日志文件的文件数量或者存储容量是否达到阈值;如果是,可以触发生成上述第二事件。[0152]在示出的另一种实施方式中,节点设备在对目标存储系统中存储的区块交易数据进行恢复时,也可以响应于用户手动触发的针对上述区块交易数据进行恢复的指令,来确定上述目标存储系统中存储的区块交易数据对应的WAL日志文件的文件数量或者存储容量[0153]例如,在实际应用中,节点设备除了可以周期性检查上述目标存储系统是否满足上述checkpiont事件的触发条件以外,用户也可以通过手动输入恢复指令的方式,来触发节点设备检查上述目标存储系统是否满足上述checkpiont事件的触发条件;比如,在一些恢复场景中,用户可能需要对上述目标存储系统存储的区块链交易数据进行数据回滚操作,将上述目标存储系统存储的区块交易数据恢复到某一个历史区块对应的数据版本。在这种场景中,用户可以通过手动输入恢复指令的方式,来触发节点设备检查上述目标存储系统是否满足上述checkpiont事件的触发条件。[0154]当触发生成了上述第二事件,节点设备可以响应于该第二事件,从与上述目标存储系统对应的日志缓冲区,读取日志缓冲区中存储的区块交易数据对应的WAL日志文件;然后,基于读取到的WAL日志文件,恢复出与区块交易数据,再将恢复出的区块交易数据,写入上述目标存储系统。[0155]以上技术方案中,一方面,由于区块链搭载的多个存储系统中,可以只有用于存储区块交易数据的目标存储系统支持预写日志WAL模式,而用于存储与该区块交易数据对应的其它类型的区块链数据的存储系统则可以不必重复启用WAL模式;因此,对于搭载多个存储系统的节点设备而言,可以只存储和维护一份与区块交易数据对应的WAL日志文件即可,不再需要在存储和维护多份WAL日志文件,可以显著降低节点设备在存储多种区块链数据时的存储开销;[0156]另一方面,由于节点设备存储的与该区块交易数据对应的其它类型的区块链数据,是基于与区块交易数据对应的WAL日志文件来进行统一恢复;对于搭载多个存储系统的节点设备而言,可以不再需要基于各个存储系统对应的WAL日志文件来分别进行数据恢复;因此,可以显著降低节点设备在恢复多种区块链数据时的性能开销。[0157]与上述方法实施例相对应,本申请还提供了装置的实施例。[0158]与上述方法实施例相对应,本说明书还提供了一种区块链数据恢复装置的实施例。[0159]本说明书的区块链数据恢复装置的实施例可以应用在电子设备上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在电子设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。[0160]从硬件层面而言,如图2所示,为本说明书的区块链数据恢复装置所在电子设备的一种硬件结构图,除了图2所示的处理器、内存、网络接口、例中装置所在的电子设备通常根据该电子设备的实际功能,还可以包括其他硬件,对此不再赘述。[0161]图3是本说明书一示例性实施例示出的一种区块链数据恢复装置的框图。[0162]请参考图3,所述区块链数据恢复装置30可以应用在前述图2所示的电子设备中,所述节点设备搭载了用于存储区块链数据的多个存储系统;其中,所述区块链数据包括区块交易数据和至少一种其它类型的区块链数据;所述多个存储系统中用于存储所述区块交易数据的目标存储系统支持预写日志WAL模式;所述装置30包括:[0163]读取模块301,响应于针对所述其它类型的区块链数据进行恢复的第一事件,读取与所述目标存储系统中存储的区块交易数据对应的WAL日志文件;[0164]恢复模块302,基于所述WAL日志文件恢复所述区块交易数据,并执行恢复出的所述区块交易数据以生成所述其它类型的区块链数据;[0165]写入模块303,将生成的所述其它类型的区块链数据,分别写入所述多个存储系统中用于存储所述其它类型的区块链数据的各存储系统。[0167]第一确定模块304(图3中未示出),确定所述各存储系统存储的所述其它类型的区块链数据对应的区块号中的最新区块号C,是否小于所述目标存储系统存储的区块交易数据对应的区块号中的最新区块号N;如果是,生成所述第一事件。[0168]在本实施例中,所述最新区块号C为所述各存储系统中存储的所述其它类型的区块链数据对应的最新区块号的最小值;[0169]所述第一确定模块304进一步:[0170]在确定所述各存储系统存储的所述其它类型的区块链数据对应的最新区块号C,是否小于所述目标存储系统存储的区块交易数据对应的最新区块号N之前,计算所述各存储系统中存储的所述其它类型的区块链数据对应的最新区块号的最小值,得到所述最新[0171]在本实施例中,所述多个存储系统存储的区块链数据的数据标识,包括所述区块链数据对应的区块号。[0172]在本实施例中,所述多个存储系统存储的区块链数据的数据标识,采用了统一的数据格式。[0173]在本实施例中,所述数据标识采用了WAL日志文件的LSN日志序列编号的数据格[0175]分别读取由所述最新区块号C和所述最新区块号N构成的区块号区间(C,N)中的各区块号所表示的区块中的区块交易数据对应的WAL日志文件;[0176]所述恢复模块302:[0177]基于读取到的所述区块号区间(C,N)中的各区块号表示的区块中的区块交易数据对应的WAL日志文件,恢复与所述各区块号所表示的区块中的区块交易数据,并执行恢复出的所述区块交易数据,以生成与所述各区块号所表示的区块中的区块交易数据对应的所述其它类型的区块链数据。[0178]在本实施例中,所述第一确定模块304(图3中未示出):

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论