区块链数据缩容方法、装置及存储介质与流程

文档序号:16845493发布日期:2019-02-12 22:09阅读:288来源:国知局
区块链数据缩容方法、装置及存储介质与流程

本发明涉及区块链技术领域,尤其涉及一种区块链数据缩容方法、装置及计算机可读存储介质。



背景技术:

随着区块链交易的增长、新区块的不断添加,带来了区块链状态的快速膨胀。这给区块链节点带来了存储压力和增加了存储成本。因此需要对区块链数据进行缩容,以使得区块链节点可以在保证可靠性的前提下,降低存储成本及存储压力,达到无间断持续运行的目的。

现有技术通常采用主动丢弃历史数据的方式进行缩容,不保留任何历史数据及与历史数据的任何关联,通过对当前区块进行快照,将所有状态导出重组为新区块链的创始区块,并开启新的区块链网络。即使区块链网络快速膨胀,该方法可以视数据膨胀的程度选择进行周期性的执行,达到缩容数据对目的。但该方法的缺点是:每次快照的导出及新区块链网络的启用都会导致历史数据状态的丢失,带来了交易历史的丢失与失效,且随着旧网络的弃用,需要暂停业务暂停节点重新进行调整以适配新网络的启用,因而导致业务历史数据不可查询,对业务不友好且不能自动执行,操作复杂,运维成本较高,区块链网络可用率下降。



技术实现要素:

本发明的主要目的在于提供一种区块链数据缩容方法、装置及计算机可读存储介质,旨在解决如何在区块链节点不中断运行的前提下实现数据动态缩容的技术问题。

为实现上述目的,本发明提供一种区块链数据缩容方法,所述区块链数据缩容方法包括以下步骤:

当本区块链节点生成新区块或从区块链网络中同步到新区块时,执行新区块中的交易;

将新区块以及执行交易过程中产生的数据空间保存到本地;

若本区块链节点为存档节点类型,则不进行数据缩容;

若本区块链节点为快照节点类型,则对当前新区块的数据空间进行状态快照后,删除本次快照的数据空间,以进行数据缩容;

若本区块链节点为热节点类型,则将当前新区块的上一区块的数据空间删除,以进行数据缩容。

可选地,在所述将新区块以及执行交易过程中产生的数据空间保存到本地的步骤之后,还包括:

将新区块加入本区块链节点的热点数据缓存池,并将新区块的数据空间添加到热点数据缓存池中;

删除当前热点缓存池中最旧区块的数据空间。

可选地,区块链节点本地保存有节点参数配置信息以及节点历史数据存储信息;

所述节点参数配置信息包括:节点类型、节点快照周期、节点热数据块区间,其中,存档节点的等级高于快照节点,快照节点的等级高于热节点;所述节点历史数据存储信息包括:历史数据存储类型、快照点列表、当前最新区块字段。

可选地,所述若本区块链节点为快照节点类型,则对当前新区块的数据空间进行状态快照后,删除本次快照的数据空间,以进行数据缩容包括:

若本区块链节点为快照节点类型,则读取所述快照点列表中的当前最新快照点和当前最新区块字段;

判断当前最新区块高度与当前最新快照点之间是否间隔一个所述节点快照周期;

若是,则从当前最新快照点对应区块开始,递增区块高度并依次执行各区块中的交易直到当前最新区块;

对执行过程中产生的各区块的数据空间进行状态快照,并生成新的快照点;

将新的快照点添加到所述快照点列表中,删除本次快照的数据空间,以进行数据缩容。

可选地,所述区块链数据缩容方法还包括:

当本区块链节点接收到交易数据查询请求时,读取所述查询请求中指定的区块高度;

从热点数据缓存池中查找该区块的数据空间;

若热点数据缓存池中存在该区块的数据空间,则执行所述查询请求并返回查询结果。

可选地,在所述从热点数据缓存池中查找该区块的数据空间的步骤之后,还包括:

若热点数据缓存池中不存在该区块的数据空间,则判断本区块链节点的节点类型;

若本区块链节点为存档节点类型,则从本地读取该区块的数据空间,执行所述查询请求并返回查询结果;

若本区块链节点为热节点类型,则返回查询错误。

可选地,在所述若热点数据缓存池中不存在该区块的数据空间,则判断本区块链节点的节点类型的步骤之后,还包括:

若本区块链节点为快照节点类型,则判断快照点列表中是否存在该区块的快照点;

若存在,则从本地读取该快照点相关的数据空间,执行所述查询请求并返回查询结果;

若不存在,则基于快照点列表中小于该区块高度且距离最近的快照点,向存档节点请求缺失部分的区块数据,并逐个区块执行构造出所请求区块的数据空间,执行所述查询请求并返回查询结果。

进一步地,为实现上述目的,本发明还提供一种区块链数据缩容装置,所述区块链数据缩容装置包括:

新区块执行模块,用于当本区块链节点生成新区块或从区块链网络中同步到新区块时,执行新区块中的交易;将新区块以及执行交易过程中产生的数据空间保存到本地;

新区块缩容模块,用于若本区块链节点为存档节点类型,则不进行数据缩容;若本区块链节点为快照节点类型,则对当前新区块的数据空间进行状态快照后,删除本次快照的数据空间,以进行数据缩容;若本区块链节点为热节点类型,则将当前新区块的上一区块的数据空间删除,以进行数据缩容。

可选地,所述区块链数据缩容装置还包括:

热数据更新模块,用于将新区块加入本区块链节点的热点数据缓存池,并将新区块的数据空间添加到热点数据缓存池中;删除当前热点缓存池中最旧区块的数据空间。

可选地,区块链节点本地保存有节点参数配置信息以及节点历史数据存储信息;

所述节点参数配置信息包括:节点类型、节点快照周期、节点热数据块区间,其中,存档节点的等级高于快照节点,快照节点的等级高于热节点;所述节点历史数据存储信息包括:历史数据存储类型、快照点列表、当前最新区块字段。

可选地,所述新区块缩容模块具体用于:

若本区块链节点为快照节点类型,则读取所述快照点列表中的当前最新快照点和当前最新区块字段;判断当前最新区块高度与当前最新快照点之间是否间隔一个所述节点快照周期;若是,则从当前最新快照点对应区块开始,递增区块高度并依次执行各区块中的交易直到当前最新区块;对执行过程中产生的各区块的数据空间进行状态快照,并生成新的快照点;将新的快照点添加到所述快照点列表中,删除本次快照的数据空间,以进行数据缩容。

可选地,所述区块链数据缩容装置还包括:

查询模块,用于当本区块链节点接收到交易数据查询请求时,读取所述查询请求中指定的区块高度;从热点数据缓存池中查找该区块的数据空间;若热点数据缓存池中存在该区块的数据空间,则执行所述查询请求并返回查询结果。

可选地,所述区块链数据缩容装置还包括:

查询异常处理模块,用于若热点数据缓存池中不存在该区块的数据空间,则判断本区块链节点的节点类型;若本区块链节点为存档节点类型,则从本地读取该区块的数据空间,执行所述查询请求并返回查询结果;若本区块链节点为热节点类型,则返回查询错误。

可选地,所述查询异常处理模块还用于:

若本区块链节点为快照节点类型,则判断快照点列表中是否存在该区块的快照点;若存在,则从本地读取该快照点相关的数据空间,执行所述查询请求并返回查询结果;若不存在,则基于快照点列表中小于该区块高度且距离最近的快照点,向存档节点请求缺失部分的区块数据,并逐个区块执行构造出所请求区块的数据空间,执行所述查询请求并返回查询结果。

进一步地,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有区块链数据缩容程序,所述区块链数据缩容程序被处理器执行时实现如上任一项所述的区块链数据缩容方法的步骤。

本发明中,将区块链网络中节点进行功能组合区分,定义了存档节点、快照节点、热节点。其中,存档节点存储区块链所有数据并永久保存不做任何缩容,而快照节点、热节点只同步保存区块链网络中的最新区块信息和最新状态而不保存历史状态数据,进而可在区块链节点不中断运行的前提下实现数据动态缩容。本发明通过对区块链数据进行周期性快照,对历史数据进行间隔式删减,自动进行滑动式数据缩容,因而数据缩容过程无需重启或停止网络,简化了操作复杂性,降低了运维成本,保证了区块链网络的利用率。

附图说明

图1为本发明区块链数据缩容方法第一实施例的流程示意图;

图2为本发明区块链数据缩容方法第二实施例的流程示意图;

图3为本发明区块链数据缩容装置第一实施例的功能模块示意图;

图4为本发明区块链数据缩容装置第二实施例的功能模块示意图;

图5为本发明区块链数据缩容装置第三实施例的功能模块示意图;

图6为本发明区块链数据缩容装置第四实施例的功能模块示意图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

为便于更好地理解本发明,下面对本发明中涉及的技术术语进行说明。

(一)区块链

区块链即去中心化的分布式账本数据库。区块链本身其实是一串使用密码学算法所产生的数据块,每一个数据块中包含了多次区块链网络交易有效确认的信息。

(二)区块链交易

区块链中的基础概念和核心结构,它能被区块链的记账节点识别和执行,并在全网达成共识之后,永久记录于区块链账本中。它是区块链账本的重要组成部分。交易结构中主要包含交易发起方、交易接收方、交易数据内容等。下文简称交易。

(三)区块链节点

在计算机设备上运行特定区块链软件的进程,统称逻辑上的区块链节点。节点根据提供的功能组合不同,存在不同的节点类型。但不同类型的节点都可以通过点对点网络与区块链中其他节点建立联系,并与区块链网络同步最新的区块头信息。

(四)区块链状态

指区块链在某个特定时刻的所有数据状态的集合。该集合随着区块高度的增长不断发生变更,集合的表现形式一般为key-value结构。根据不同的实现方式,该集合的存储介质可以是硬盘也可以是闪存或分布式存储或其他介质。本发明将保存每个块高度下的区块链状态称为状态快照。连续的状态快照之间的差异主要由区块中交易执行所带来。

(五)数据空间

指某个区块及其所关联的智能合约的所有数据内容及状态的集合空间。该集合空间会随着智能合约的运行不断发生变更。区块链中每个区块都有一个独立存在的数据空间,但数据空间中的部分数据允许在不同的数据空间之间互相引用。该集合空间的组织方式可以有多种实现方式。最为常见的是使用merletree的数据结构来组织。

(六)区块头

区块链中区块的重要组成部分。主要作用是声明当前区块与上一个区块的联系及描述自身的相关信息,如区块高度、区块哈希等等。

(七)区块高度

区块高度是区块的标示符,指该区块在区块链中的位置。区块有两个标示符,一是区块头的哈希值,二是区块高度。区块哈希值可以唯一、明确地标识一个区块,并且任何节点通过简单地对区块头进行哈希计算都可以独立地获取该区块哈希值。

(八)节点类型及节点相关信息

为保证区块链网络运行的安全性和可靠性的前提下进行缩容,并降低区块链数据的存储成本,因此,本发明引入了基于节点功能组合的分压与缩容方式,具体将区块链网络中的节点划分为以下类型:

(1)存档节点

存档节点在区块链网络中承担不可或缺的功能角色,是区块链网络中的必选节点类型。它同步并保存最新的状态数据及所有的历史数据,拥有区块链网络的数据全集合,且不进行任何缩容。它不仅可以参与网络共识,同时还可以对其他节点提供数据查询服务。存档节点的主要功能集合包括以下:

1、交易接收;

2、交易广播;

3、交易执行;

4、参与共识;

5、最新交易及状态数据存储;

6、最新交易及状态数据查询;

7、历史交易及状态数据存储;

8、历史交易及状态数据查询。

(2)快照节点

快照节点是区块链网络中的可选节点类型。它根据节点自身参数配置,对区块状态进行周期性快照,且对历史数据进行间隔周期式的进行缩容。它自动根据区块的增长,不断的将快照点往前滑动。对于命中快照点的数据查询请求直接从本地快照数据中读取,若是没有命中本地快照点数据,则从距离最近的快照点开始向存档节点请求缺失部分数据,再重新执行查询请求。快照节点的主要功能集合包括以下:

1、交易接收;

2、交易广播;

3、交易执行;

4、参与共识;

5、最新交易及状态数据存储;

6、最新交易及状态数据查询;

7、历史交易及状态数据查询。

(3)热节点

热节点是区块链网络中的可选节点类型。它根据节点自身参数配置,只保存最新一段区块高度内的区块数据及相应的状态数据。它自动根据区块的增长不断对历史数据进行缩容淘汰。它支持对于当前热数据的查询请求,若是没有命中当前热数据的查询请求,则返回错误。热节点的主要功能集合包括以下:

1、交易接收;

2、交易广播;

3、交易执行;

4、参与共识;

5、最新交易及状态数据存储;

6、最新交易及状态数据查询。

在本发明的区块链网络中,至少拥有一个或以上的存档节点。快照节点和热点均为可选节点。存储节点可以通过变更节点参数配置信息降级为快照节点或热节点。快照节点可以通过变更节点参数配置信息降级为热节点。热节点不支持升级为快照节点,也不支持升级为存档节点。快照节点不支持升级为存档节点。

(4)节点参数配置信息

节点参与到区块链网络之初时,可以根据网络模型、业务场景、机器资源等因素综合考虑来选择节点类型。节点类型通过节点自身配置来描述确定。节点参数配置信息包括以下关键字段:

1、节点类型,包括存档节点、快照节点和热节点三种类型;

2、节点快照周期,指一次状态快照对应的区块数,例如,节点快照周期为3,则指每隔3个区块进行一次状态快照。

3、节点热数据块区间,指用于存储节点热数据的区块长度,比如节点热数据块区间为100,则指存储节点热数据的起点块高到终点块高之间的块高差值为100。

(5)节点历史数据存储信息

所有类型的节点都具有节点历史数据存储信息,存储于本地存储介质中,包含以下信息结构:

1、历史数据存储类型,指节点存储历史数据时的节点类型,由于节点可通过参数配置进行节点类型更改,因此,通过历史数据存储类型可描述节点的历史节点类型,具体包括存档节点、快照节点和热节点三种类型。

2、快照点列表,包含有节点每一次状态快照所生成的快照点,快照点的位置具体通过区块高度进行标记。例如,假设从区块高度为3的区块开始进行状态快照,且节点快照周期为2,则本次状态快照生成的快照点的位置为区块高度5。

3、当前最新区块字段,区块字段具体指区块高度,简称块高。最新区块对应为节点生成的新区块或同步到的新区块。

下面基于上述本发明的基本概念,对本发明区块链数据缩容方法的实现过程进行详细说明。

实施例一:节点运行时进行数据动态缩容

在区块链节点运行过程中,节点不仅自身会生成新区块,同时还会从区块链网络中同步其他节点产生的新区块。由于新区块不断动态产生,进而加大了节点的数据存储压力,因而需要在节点运行时进行数据动态缩容。

参照图1,图1为本发明区块链数据缩容方法第一实施例的流程示意图。本实施例中,节点数据动态缩容的实现流程包括以下步骤:

步骤s110,当本区块链节点生成新区块或从区块链网络中同步到新区块时,执行新区块中的交易;

步骤s120,将新区块以及执行交易过程中产生的数据空间保存到本地;

当节点生成新区块或从其他节点同步到新区块时,先对该新区块进行合法性检查,合法性检查包括:区块结构合法性检查、区块父哈希合法性检查、区块签名合法性检查。当合法性检查通过后再执行新区块中的交易。

节点启用区块链计算单元对新区块中的交易列表顺序执行,并对执行过程中产生的数据空间进行收集。在执行结束之后,检查收集的数据空间是否与区块头中所声明的相匹配,若匹配,则落盘新区块的数据内容。

节点将新区块存储到节点本地存储介质中,并将执行新区块中交易的过程中产生的数据空间也存储到节点本地存储介质中。此外,节点还进一步更新节点历史数据存储信息中的当前最新区块字段。

步骤s130,若本区块链节点为存档节点类型,则不进行数据缩容;

步骤s140,若本区块链节点为快照节点类型,则对当前新区块的数据空间进行状态快照后,删除本次快照的数据空间,以进行数据缩容;

步骤s150,若本区块链节点为热节点类型,则将当前新区块的上一区块的数据空间删除,以进行数据缩容。

本实施例中,具体基于本区块链节点的节点类型,确定节点数据的动态缩容策略,具体包括:

(1)若本区块链节点为存档节点类型,则不进行数据缩容;

由前述说明可知,存档节点同步并保存最新的状态数据及所有的历史数据,因而不进行数据缩容。

(2)若本区块链节点为快照节点类型,则对当前新区块的数据空间进行状态快照后,删除本次快照的数据空间,以进行数据缩容;

由前述说明可知,快照节点是对区块状态进行周期性快照,且对历史数据进行间隔周期式的进行缩容,因此,快照节点需要对当前新区块的数据空间进行状态快照,然后再删除本次快照的数据空间。

进一步可选的,为降低快照频率,进而减少快照对节点性能的影响,因此,可设置节点快照周期(大于1个区块),进而对历史数据进行间隔周期式的进行缩容。

进一步可选的,若本区块链节点为快照节点类型,则具体采用以下处理流程进行数据缩容:

1、若本区块链节点为快照节点类型,则读取所述快照点列表中的当前最新快照点和当前最新区块字段;

2、判断当前最新区块高度与当前最新快照点之间是否间隔一个所述节点快照周期;

3、若是,则从当前最新快照点对应区块开始,递增区块高度并依次执行各区块中的交易直到当前最新区块;

4、对执行过程中产生的各区块的数据空间进行状态快照,并生成新的快照点;

5、将新的快照点添加到所述快照点列表中,删除本次快照的数据空间,以进行数据缩容。

若本区块链节点为快照节点类型,则读取本地节点历史数据存储信息,检查最新区块高度与上一个快照点(也即快照列表中最近生成的快照点)之间是否间隔一个节点快照周期,若是,则认定当前新区块为新快照点,需要对该节点快照周期内对应区块的数据空间进行状态快照,然后对新快照点与旧快照点的数据空间做差集运算,并将该差集对应的数据空间(也即本次快照的数据空间)从本地存储介质中删除。此外,还进一步将新快照点设为上一个快照点,同时将新快照点加入到快照点列表中。

(3)若本区块链节点为热节点类型,则将当前新区块的上一区块的数据空间删除,以进行数据缩容;

由前述说明可知,热节点只保存最新一段区块高度内的区块数据及相应的状态数据,并自动根据区块的增长而不断对历史数据进行缩容淘汰。因此,若本区块链节点为热节点类型,则直接将当前新区块的上一区块的数据空间从本地存储介质中删除。

本实施例中,将区块链网络中节点进行功能组合区分,定义了存档节点、快照节点、热节点。其中,存档节点存储区块链所有数据并永久保存不做任何缩容,而快照节点、热节点只同步保存区块链网络中的最新区块信息和最新状态而不保存历史状态数据,进而在保证安全性和可靠性的前提下,可有效降低网络的平均存储压力和存储成本。本实施例通过对区块链数据进行周期性快照,对历史数据进行间隔式删减,自动进行滑动式数据缩容,数据缩容过程无需重启或停止网络,进而简化了操作复杂性,降低了运维成本,并保证了区块链网络的利用率。

实施例二:对节点热数据进行动态更新

参照图2,图2为本发明区块链数据缩容方法第二实施例的流程示意图。基于上述实施例一,本实施例中,在执行新区块中的交易并将新区块以及执行交易过程中产生的数据空间保存到本地之后,还包括:

步骤s160,将新区块加入本区块链节点的热点数据缓存池,并将新区块的数据空间添加到热点数据缓存池中;

步骤s170,删除当前热点缓存池中最旧区块的数据空间。

本实施例进一步对节点数据进行冷热区分,将新区块以及新区块的数据空间作为热数据保存到热点数据缓存池,进而快照节点、热节点只需访问热点数据缓存池即可处理大部分查询请求,而无需请求存档节点,因而可降低系统延迟。

此外,为避免热点数据缓存池容量的无限增加,同时保证热点缓存池中数据始终为热数据,因此,热点数据缓存池具有容量限制(比如区块数量限制),当新区块加入时,需要删除当前热点缓存池中最旧区块的数据空间,以进行热数据缩容淘汰。

需要说明的是,本实施例对于热点数据缓存池的构建方式不限,比如通过配置或者动态生成等方式进行构建,具体构建方式可参考实施例四。

本实施例实现了冷热数据的分离,同时实现了热数据的动态更新,以保证热点缓存池中数据始终为热数据。

实施例三:交易数据查询处理

由于本发明对区块链数据进行了缩容处理,因此,为保证数据查询的效率以及正常运行,本实施例中,交易数据查询处理流程包括:

1、当本区块链节点接收到交易数据查询请求时,读取所述查询请求中指定的区块高度;

2、从热点数据缓存池中查找该区块的数据空间;

3、若热点数据缓存池中存在该区块的数据空间,则执行所述查询请求并返回查询结果;

本实施例中,热点数据缓存池存储有整个区块链网络上的热点数据,因此,当接收到交易数据查询请求时,优先从热点数据缓存池中查找查询请求中指定区块的数据空间,如果存在查询请求中指定区块的数据空间,则启用区块链计算单元对该数据空间执行该请求,获得查询结果并返回给客户端。

4、若热点数据缓存池中不存在该区块的数据空间,则判断本区块链节点的节点类型;

4.1、若为存档节点类型,则从本地读取该区块的数据空间,执行所述查询请求并返回查询结果;

由于存档节点存储有最新的状态数据及所有的历史数据,拥有区块链网络的数据全集合,且不进行任何缩容,因此,如果热点数据缓存池中不存在该区块的数据空间,则从本地读取该区块的数据空间,并启用区块链计算单元对该数据空间执行该请求,获得查询结果并返回给客户端。

4.2、若为快照节点类型,则判断快照点列表中是否存在该区块的快照点;

情形一:快照点列表中存在该区块的快照点

本情形下可执行从本地读取该快照点相关的数据空间,执行所述查询请求并返回查询结果;

情形二:快照点列表中不存在该区块的快照点

本情形下,如果没有对查询请求中指定区块的数据空间进行状态快照,则向存档节点请求缺失部分的区块数据。缺失部分的区块数据具体可基于快照点列表中小于该区块高度且距离最近的快照点与该区块高度进行确。在获得缺失部分的区块数据后,逐个区块执行,继而构造出所请求区块的数据空间,然后再执行查询请求并返回查询结果。

4.3、若为热节点类型,则返回查询错误。

本实施例的上述交易数据查询处理流程,保证了数据查询的效率以及正常运行,避免了大量查询请求访问存档节点所形成的系统瓶颈。

参照图3,图3为本发明区块链数据缩容装置第一实施例的功能模块示意图。本实施例中,所述区块链数据缩容装置包括:

新区块执行模块10,用于当本区块链节点生成新区块或从区块链网络中同步到新区块时,执行新区块中的交易,将新区块以及执行交易过程中产生的数据空间保存到本地;

新区块缩容模块20,用于若本区块链节点为存档节点类型,则不进行数据缩容;若本区块链节点为快照节点类型,则对当前新区块的数据空间进行状态快照后,删除本次快照的数据空间,以进行数据缩容;若本区块链节点为热节点类型,则将当前新区块的上一区块的数据空间删除,以进行数据缩容。

在区块链节点运行过程中,节点不仅自身会生成新区块,同时还会从区块链网络中同步其他节点产生的新区块。由于新区块不断动态产生,进而加大了节点的数据存储压力,因而需要在节点运行时进行数据动态缩容。

当节点生成新区块或从其他节点同步到新区块时,先对该新区块进行合法性检查,合法性检查包括:区块结构合法性检查、区块父哈希合法性检查、区块签名合法性检查。当合法性检查通过后再执行新区块中的交易。

节点启用区块链计算单元对新区块中的交易列表顺序执行,并对执行过程中产生的数据空间进行收集。在执行结束之后,检查收集的数据空间是否与区块头中所声明的相匹配,若匹配,则落盘新区块的数据内容。

节点将新区块存储到节点本地存储介质中,并将执行新区块中交易的过程中产生的数据空间也存储到节点本地存储介质中。此外,节点还进一步更新节点历史数据存储信息中的当前最新区块字段。

本实施例中,具体基于本区块链节点的节点类型,确定节点数据的动态缩容策略,具体包括:

(1)若本区块链节点为存档节点类型,则不进行数据缩容;

由前述说明可知,存档节点同步并保存最新的状态数据及所有的历史数据,因而不进行数据缩容。

(2)若本区块链节点为快照节点类型,则对当前新区块的数据空间进行状态快照后,删除本次快照的数据空间,以进行数据缩容;

由前述说明可知,快照节点是对区块状态进行周期性快照,且对历史数据进行间隔周期式的进行缩容,因此,快照节点需要对当前新区块的数据空间进行状态快照,然后再删除本次快照的数据空间。

进一步可选的,为降低快照频率,进而减少快照对节点性能的影响,因此,可设置节点快照周期(大于1个区块),进而对历史数据进行间隔周期式的进行缩容。

进一步可选的,若本区块链节点为快照节点类型,则新区块缩容模块20具体采用以下处理流程进行数据缩容:

1、若本区块链节点为快照节点类型,则读取所述快照点列表中的当前最新快照点和当前最新区块字段;

2、判断当前最新区块高度与当前最新快照点之间是否间隔一个所述节点快照周期;

3、若是,则从当前最新快照点对应区块开始,递增区块高度并依次执行各区块中的交易直到当前最新区块;

4、对执行过程中产生的各区块的数据空间进行状态快照,并生成新的快照点;

5、将新的快照点添加到所述快照点列表中,删除本次快照的数据空间,以进行数据缩容。

若本区块链节点为快照节点类型,则读取本地节点历史数据存储信息,检查最新区块高度与上一个快照点(也即快照列表中最近生成的快照点)之间是否间隔一个节点快照周期,若是,则认定当前新区块为新快照点,需要对该节点快照周期内对应区块的数据空间进行状态快照,然后对新快照点与旧快照点的数据空间做差集运算,并将该差集对应的数据空间(也即本次快照的数据空间)从本地存储介质中删除。此外,还进一步将新快照点设为上一个快照点,同时将新快照点加入到快照点列表中。

(3)若本区块链节点为热节点类型,则将当前新区块的上一区块的数据空间删除,以进行数据缩容;

由前述说明可知,热节点只保存最新一段区块高度内的区块数据及相应的状态数据,并自动根据区块的增长而不断对历史数据进行缩容淘汰。因此,若本区块链节点为热节点类型,则直接将当前新区块的上一区块的数据空间从本地存储介质中删除。

本实施例中,将区块链网络中节点进行功能组合区分,定义了存档节点、快照节点、热节点。其中,存档节点存储区块链所有数据并永久保存不做任何缩容,而快照节点、热节点只同步保存区块链网络中的最新区块信息和最新状态而不保存历史状态数据,进而在保证安全性和可靠性的前提下,可有效降低网络的平均存储压力和存储成本。本实施例通过对区块链数据进行周期性快照,对历史数据进行间隔式删减,自动进行滑动式数据缩容,数据缩容过程无需重启或停止网络,进而简化了操作复杂性,降低了运维成本,并保证了区块链网络的利用率。

参照图4,图4为本发明区块链数据缩容装置第二实施例的功能模块示意图。基于上述实施例,本实施例中,所述区块链数据缩容装置还包括:

热数据更新模块30,用于将新区块加入本区块链节点的热点数据缓存池,并将新区块的数据空间添加到热点数据缓存池中;删除当前热点缓存池中最旧区块的数据空间。

本实施例进一步对节点数据进行冷热区分,将新区块以及新区块的数据空间作为热数据保存到热点数据缓存池,进而快照节点、热节点只需访问热点数据缓存池即可处理大部分查询请求,而无需请求存档节点,因而可降低系统延迟。

此外,为避免热点数据缓存池容量的无限增加,同时保证热点缓存池中数据始终为热数据,因此,热点数据缓存池具有容量限制(比如区块数量限制),当新区块加入时,需要删除当前热点缓存池中最旧区块的数据空间,以进行热数据缩容淘汰。

需要说明的是,本实施例对于热点数据缓存池的构建方式不限,比如通过配置或者动态生成等方式进行构建,具体构建方式可参考实施例四。

本实施例实现了冷热数据的分离,同时实现了热数据的动态更新,以保证热点缓存池中数据始终为热数据。

参照图5,图5为本发明区块链数据缩容装置第三实施例的功能模块示意图。基于上述实施例,本实施例中,区块链数据缩容装置还包括:

查询模块40,用于当本区块链节点接收到交易数据查询请求时,读取所述查询请求中指定的区块高度;从热点数据缓存池中查找该区块的数据空间;若热点数据缓存池中存在该区块的数据空间,则执行所述查询请求并返回查询结果。

本实施例中,热点数据缓存池存储有整个区块链网络上的热点数据,因此,当接收到交易数据查询请求时,优先从热点数据缓存池中查找查询请求中指定区块的数据空间,如果存在查询请求中指定区块的数据空间,则启用区块链计算单元对该数据空间执行该请求,获得查询结果并返回给客户端。

参照图6,图6为本发明区块链数据缩容装置第四实施例的功能模块示意图。基于上述实施例,本实施例中,区块链数据缩容装置还包括:

查询异常处理模块50,用于若热点数据缓存池中不存在该区块的数据空间,则判断本区块链节点的节点类型;

(1)若为存档节点类型,则从本地读取该区块的数据空间,执行所述查询请求并返回查询结果;

由于存档节点存储有最新的状态数据及所有的历史数据,拥有区块链网络的数据全集合,且不进行任何缩容,因此,如果热点数据缓存池中不存在该区块的数据空间,则从本地读取该区块的数据空间,并启用区块链计算单元对该数据空间执行该请求,获得查询结果并返回给客户端。

(2)若为快照节点类型,则判断快照点列表中是否存在该区块的快照点;若存在,则从本地读取该快照点相关的数据空间,执行所述查询请求并返回查询结果;

本情形下可执行从本地读取该快照点相关的数据空间,执行所述查询请求并返回查询结果;

若不存在,则基于快照点列表中小于该区块高度且距离最近的快照点,向存档节点请求缺失部分的区块数据,并逐个区块执行构造出所请求区块的数据空间,执行所述查询请求并返回查询结果;

本情形下,如果没有对查询请求中指定区块的数据空间进行状态快照,则向存档节点请求缺失部分的区块数据。缺失部分的区块数据具体可基于快照点列表中小于该区块高度且距离最近的快照点与该区块高度进行确。在获得缺失部分的区块数据后,逐个区块执行,继而构造出所请求区块的数据空间,然后再执行查询请求并返回查询结果。

(3)若为热节点类型,则返回查询错误。

本实施例的上述交易数据查询处理流程,保证了数据查询的效率以及正常运行,避免了大量查询请求访问存档节点所形成的系统瓶颈。

本发明还提供一种计算机可读存储介质。

本发明计算机可读存储介质上存储有区块链数据缩容程序,所述区块链数据缩容程序被处理器执行时实现如上述任一项实施例中所述的区块链数据缩容方法的步骤。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器或者网络设备等)执行本发明各个实施例所述的方法。

上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,这些均属于本发明的保护之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1