一种区块存储方法及装置与流程

文档序号:19471990发布日期:2019-12-21 02:24阅读:333来源:国知局
一种区块存储方法及装置与流程

本发明实施例涉及金融科技(fintech)领域,尤其涉及一种区块存储方法及装置。



背景技术:

随着计算机技术的发展,越来越多的技术(例如:区块链、云计算或大数据)应用在金融领域,传统金融业正在逐步向金融科技转变,区块链(blockchain)技术也不例外,但由于金融、支付行业的安全性、实时性要求,也对区块链技术提出的更高的要求。

区块链节点默认将数据存储在节点本地硬盘,但本地存储方式受硬件存储能力限制,存储容量有限,无法满足不断膨胀的存储需求,同时存在存储成本较高、数据访问响应速度较慢的问题。



技术实现要素:

本发明实施例提供一种区块存储方法及装置,用以控制存储成本且提高数据访问速度。

本发明实施例提供的一种区块存储方法,适用于具有m个数据库实例的节点;每个数据库实例对应有各自的数据库;所述数据库用于存储区块链上的各区块;其中,m大于等于2;

所述方法包括:

所述节点确定待存储区块对应的第一逻辑分区;每个逻辑分区对应区块链上连续上链的多个区块;

所述节点在确定所述第一逻辑分区尚无对应的数据库实例且m个数据库实例均处于工作状态后,释放第二逻辑分区对应的数据库实例并删除第二数据库;所述第二数据库用于通过所述第二逻辑分区对应的数据库实例存储所述第二逻辑分区对应的区块;所述第二逻辑分区为对应的区块中区块高度最低的;

所述节点为所述第一逻辑分区配置对应的数据库实例并将所述待存储区块存储至第一数据库,所述第一数据库用于通过所述第一逻辑分区对应的数据库实例存储所述第一逻辑分区对应的区块。

上述技术方案中,节点最多启动预设数量的数据库实例,节点经该数据库实例将区块写入数据库中,每个数据库实例对应一个逻辑分区,当有新的区块对应新的逻辑分区,且需要启动新的数据库实例时,可以先确定节点包括的所有数据库实例是否都已经被占用,若是,则需要先释放最先逻辑分区(对应的区块中区块高度最低的逻辑分区)对应的数据库实例,同时删除该最先逻辑分区对应的数据库,再新建与该新的逻辑分区对应的数据库实例,可以理解为,当新的逻辑分区产生时,根据先进先出策略更新原有的逻辑分区与数据库实例的关联关系,更新过程中涉及整个数据库的删除,而非单个区块数据的删除,通过该方式,可以有效控制本地节点中的数据的存储量,相比于现有技术中只删除一个数据库中的部分数据,本方案直接删除整个数据库,可以有效控制数据的存储量。且该实现方式中,删除的是最先逻辑分区对应的数据库,并不影响节点通过最新逻辑分区对应的数据库实例将待存储区块存储至最新逻辑分区对应的数据库中,也就是说,本实现方式中,可以实现节点同时删除区块数据和存储区块数据,在删除区块数据时做到用户无感知,提高用户体验。

可选的,所述节点存储有逻辑分区与区块高度的对应关系;

所述节点确定待存储区块对应的第一逻辑分区,包括:

所述节点确定待存储区块的区块高度;

所述节点根据所述对应关系确定所述待存储区块的区块高度对应的所述第一逻辑分区。

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

所述节点接收查询请求;

所述节点根据各逻辑分区对应的区块中区块高度,从高到低依次查询各逻辑分区对应的数据库,确定首次查询到的所述查询请求中查询标识对应的区块数据。

上述技术方案中,由于节点中有多个数据库,每个数据库中存储预设数量的区块数据,相比于现有技术中节点只有一个数据库(现有技术中,该一个数据库中存储全量区块数据),本方案中每个数据库中记录数据量小,且数据层级相对较低,查询数据的速度相比于现有技术快很多。

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

所述节点接收查询请求;

所述节点根据所述查询请求中的查询标识和对应关系记录,确定所述查询标识对应的多个逻辑分区中对应区块高度最高的逻辑分区;

所述节点从所述区块高度最高的逻辑分区中确定所述查询标识对应的区块数据;

其中,所述对应关系记录中包括区块链上各查询标识和各查询标识对应的逻辑分区,所述查询标识对应的逻辑分区是指所述查询标识对应的区块数据所属区块对应的逻辑分区。

上述技术方案中,根据对应关系记录,可以直接确定出查询标识对应的逻辑分区,从而可以直接定位到逻辑分区对应的数据库,进一步提高了查询速度。

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

所述节点在确定所述第一逻辑分区具有对应的数据库实例后,则将所述待存储区块存储至所述第一数据库。

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

所述节点在确定所述第一逻辑分区尚无对应的数据库实例且至少一个数据库实例未处于工作状态后,则为所述第一逻辑分区配置对应的数据库实例并将所述待存储区块存储至所述第一数据库。

相应的,本发明实施例还提供了一种区块存储装置,适用于具有m个数据库实例的节点;每个数据库实例对应有各自的数据库;所述数据库用于存储区块链上的各区块;其中,m大于等于2;

所述装置包括:

确定单元,用于确定待存储区块对应的第一逻辑分区;每个逻辑分区对应区块链上连续上链的多个区块;

处理单元,用于在所述确定单元确定所述第一逻辑分区尚无对应的数据库实例且m个数据库实例均处于工作状态后,释放第二逻辑分区对应的数据库实例并删除第二数据库;所述第二数据库用于通过所述第二逻辑分区对应的数据库实例存储所述第二逻辑分区对应的区块;所述第二逻辑分区为对应的区块中区块高度最低的;

所述处理单元,还用于为所述第一逻辑分区配置对应的数据库实例并将所述待存储区块存储至第一数据库,所述第一数据库用于通过所述第一逻辑分区对应的数据库实例存储所述第一逻辑分区对应的区块。

可选的,所述节点存储有逻辑分区与区块高度的对应关系;

所述确定单元具体用于:

确定待存储区块的区块高度;

根据所述对应关系确定所述待存储区块的区块高度对应的所述第一逻辑分区。

可选的,所述处理单元还用于:

接收查询请求;

根据各逻辑分区对应的区块中区块高度,从高到低依次查询各逻辑分区对应的数据库,确定首次查询到的所述查询请求中查询标识对应的区块数据。

可选的,所述处理单元还用于:

接收查询请求;

根据所述查询请求中的查询标识和对应关系记录,确定所述查询标识对应的多个逻辑分区中对应区块高度最高的逻辑分区;

从所述区块高度最高的逻辑分区中确定所述查询标识对应的区块数据;

其中,所述对应关系记录中包括区块链上各查询标识和各查询标识对应的逻辑分区,所述查询标识对应的逻辑分区是指所述查询标识对应的区块数据所属区块对应的逻辑分区。

可选的,所述处理单元还用于:

在所述确定单元确定所述第一逻辑分区具有对应的数据库实例后,则将所述待存储区块存储至所述第一数据库。

可选的,所述处理单元还用于:

在所述确定单元确定所述第一逻辑分区尚无对应的数据库实例且至少一个数据库实例未处于工作状态后,则为所述第一逻辑分区配置对应的数据库实例并将所述待存储区块存储至所述第一数据库。

相应的,本发明实施例还提供了一种计算设备,包括:

存储器,用于存储程序指令;

处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行上述区块存储方法。

相应的,本发明实施例还提供了一种计算机可读非易失性存储介质,包括计算机可读指令,当计算机读取并执行所述计算机可读指令时,使得计算机执行上述区块存储方法。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种系统架构的示意图;

图2为本发明实施例提供的一种区块存储方法的流程示意图;

图3为本发明实施例提供的另一种系统架构的示意图;

图4为本发明实施例提供的一种区块存储装置的结构示意图。

具体实施方式

为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

图1示例性的示出了本发明实施例提供区块存储方法所适用的系统架构,该系统架构可以包括区块链节点(节点)和节点本地的数据库实例集,数据库实例集中最多可以有m个数据库实例,每个数据库实例对应有各自的数据库,节点通过数据库实例将区块写入对应的数据库中。其中,m大于等于2。

本发明实施例中,每个数据库实例对应区块链上的一个逻辑分区(section),每个逻辑分区对应区块链上连续上链的多个区块。逻辑分区是根据预设的分段策略对区块链在逻辑上进行划分的,可以根据区块高度分区,也可以根据固定交易数、固定时间或其他用户自定义条件进行分区。

以区块高度分区为例说明,一种情况下,是在区块链节点生成新区块时,新区块的区块高度满足预设条件,则新建一个逻辑分区,并将该新区块对应至该新建的逻辑分区中,举例来说,设置每400个区块创建一个新的逻辑分区,即在区块链节点生成新区块时,在新区块的区块高度满足blockheight%400==1条件下新建一个逻辑分区;另一种情况下,可以预先设置多个逻辑分区,且设置该多个逻辑分区分别对应的区块高度的区间,相当于直接设置区块高度和逻辑分区的对应关系,在区块链节点生成新区块时,根据新生成区块的块高,确定对应至哪一个逻辑分区。如图1示出的例子中,区块链在逻辑上有6个逻辑分区,分别为逻辑分区0、逻辑分区1、逻辑分区2、逻辑分区3、逻辑分区4、逻辑分区5,对应区块高度分别为0至400,401至800,801至1200,1201至1600,1601至2000,2001至2040(2019指的是区块链上的当前区块高度)。

本例子中,多个逻辑分区具有先后顺序,可以根据各逻辑分区对应的区块的区块高度确定顺序关系,此处,区块的区块高度可以是逻辑分区对应的连续区块中最低区块的区块高度,也可以是最高区块或者某个特定的中间区块的区块高度等,如图1中,可以根据逻辑分区对应的连续区块中最低区块的区块高度确定顺序,其中,逻辑分区0对应的最低区块的区块高度是0,逻辑分区1对应的最低区块的区块高度是401,逻辑分区2对应的最低区块的区块高度是801,……,逻辑分区5对应的最低区块的区块高度是2001等,逻辑分区的顺序是逻辑分区0、逻辑分区1、逻辑分区2、……、逻辑分区5。

需要说明的是,本发明实施例中,区块链上逻辑分区是具有先后顺序的,先后顺序可以是根据区块高度确定的,比如区块高度高的逻辑分区在区块高度低的逻辑分区的顺序后面。也可以直接给逻辑分区编号,比如每新建一个逻辑分区则编号加1,即编号大的逻辑分区在编号小的逻辑分区的顺序后面。为了方便描述,顺序在前的逻辑分区又可以叫做在先顺序的逻辑分区,或者叫做区块高度低的逻辑分区;顺序在后的逻辑分区又可以叫做在后顺序的逻辑分区,或者叫做区块高度高的逻辑分区;顺序最前的逻辑分区又可以叫做最先顺序的逻辑分区,或者叫做区块高度最低的逻辑分区,或者叫做最旧(最先)的逻辑分区;顺序最后的逻辑分区又可以叫做最后顺序的逻辑分区,或者叫做区块高度最高的逻辑分区,或者叫做最新(最后)的逻辑分区。

节点中设置路由规则,节点基于各逻辑分区的先后顺序,执行相应的查询、写入等操作,具体的,节点可以将区块数据写入该最后顺序的逻辑分区对应的数据库中,同时可以读取该最后顺序的逻辑分区对应的数据库中的区块数据;节点不可以将区块数据写入最后顺序之前的逻辑分区对应的数据库中,仅可以读取最后顺序之前的逻辑分区对应的数据库中的区块数据。如图1中,节点可以将区块数据写入逻辑分区5对应的数据库中或者从逻辑分区5对应的数据库中读取区块数据;节点仅可以从逻辑分区4对应的数据库中读取区块数据,但不能写入区块数据;逻辑分区3、逻辑分区2、逻辑分区1、逻辑分区0同理如逻辑分区4。

基于上述描述,图2示例性的示出了本发明实施例提供的一种区块存储方法的流程,该流程可以由区块存储装置执行,该装置可以位于区块链节点(节点)中,可以是该区块链节点(节点)。

如图2所示,该流程具体包括:

步骤201,节点确定待存储区块对应的第一逻辑分区。

一种实现方式中,节点存储有逻辑分区与区块高度的对应关系,节点可以确定待存储区块的区块高度,并根据对应关系确定待存储区块的区块高度对应的第一逻辑分区。进而节点通过第一逻辑分区对应的数据库实例将待存储区块存储至第一数据库中,其中,第一数据库指的是通过第一逻辑分区对应的数据库实例存储第一逻辑分区对应的区块的数据库。如图1示出的例子中,若节点生成区块的区块高度是2020,则可以确定将该区块对应的第一逻辑分区为逻辑分区5,且可以将该区块通过该逻辑分区5对应的数据库实例5存储至第一数据库中。

上述例子适用于第一逻辑分区已经对应数据库实例,即在节点生成区块后,根据区块高度确定的第一逻辑分区已经对应有数据库实例,节点可以直接将该区块通过该数据库实例存储至对应数据库中。本发明实施例中,还存在另外两种情况,情况一,第一逻辑分区尚未对应数据库实例,且当前没有空闲数据库实例或者不能新建数据库实例以对应该第一逻辑分区;情况二,第一逻辑分区尚未对应数据库实例,且当前存在空闲数据库实例或者可以新建数据库实例以对应该第一逻辑分区。

针对情况一,可以如下步骤202和步骤203。

步骤202,节点在确定第一逻辑分区尚无对应的数据库实例且m个数据库实例均处于工作状态后,释放第二逻辑分区对应的数据库实例并删除第二数据库。

本发明实施例中,节点最多可同时启动m个数据库实例,则节点本地可以同时支持m个数据库的访问,也就是节点上的区块链最多可以有m个逻辑分区。当节点上的区块链已经存在m个逻辑分区,节点新生成的区块需要对应第m+1个逻辑分区时,此时节点中没有与该第m+1个逻辑分区对应的数据库实例,且当前节点中的m个数据库实例都处于启动状态,则节点需要将m个逻辑分区中第二逻辑分区对应的数据库实例释放,且将该第二逻辑分区对应的第二数据库删除。其中,第二逻辑分区指的是m个逻辑分区中对应的区块中区块高度最低的逻辑分区,也就是m个逻辑分区中最先顺序的逻辑分区,如图1中的例子,第二逻辑分区指的是逻辑分区0;第二数据库指的是用于通过第二逻辑分区对应的数据库实例存储第二逻辑分区对应的区块的数据库,如图1中的例子,第二数据库指的是经数据库实例0存储区块的数据库。

举个例子,如图1中,假设m=6,则此时节点已经启动了6个数据库实例(数据库实例0至数据库实例5),且分别对应6个逻辑分区(逻辑分区0至逻辑分区5),若确定新生成的区块的区块高度是2041,则可以确定该新生成的区块对应新的逻辑分区(逻辑分区6),则确定第二逻辑分区是逻辑分区0,将逻辑分区0对应的数据库实例0释放,以及将逻辑分区0对应的第二数据库删除。

步骤203,节点为第一逻辑分区配置对应的数据库实例并将待存储区块存储至第一数据库。

在释放第二逻辑分区对应的数据库实例并删除第二数据库之后,节点中可以新建新的数据库实例(也可以说,节点中有空闲的数据库实例),节点为该第一逻辑分区配置该数据库实例,从而节点可以经该数据库实例将待存储区块存储至第一数据库中。上述例子中,节点新生成的区块的区块高度是2041,节点新建逻辑分区6对应的数据库实例6,并将该新生成的区块经数据库实例6存储至该逻辑分区6对应的数据库中。

上述例子中,当区块高度达到3000时,节点本地硬盘的数据库实例集可以如图3所示,其中,逻辑分区0对应的数据库实例0和逻辑分区1对应的数据库实例1已被释放,且逻辑分区0对应的数据库和逻辑分区1对应的数据库已被删除。

针对情况二,可以如下步骤204。

步骤204,节点在确定第一逻辑分区尚无对应的数据库实例且至少一个数据库实例未处于工作状态后,则为第一逻辑分区配置对应的数据库实例并将待存储区块存储至第一数据库。

举个例子,如图1中,假设m=7,则此时节点已经启动了6个数据库实例(数据库实例0至数据库实例5),且分别对应6个逻辑分区(逻辑分区0至逻辑分区5),若确定新生成的区块的区块高度是2041,则可以确定该新生成的区块对应新的逻辑分区(逻辑分区6),此时节点还可以启动第7个数据库实例(数据库实例6)用于对应逻辑分区6,节点可以将该待存储区块经数据库实例6存储至逻辑分区6对应的数据库中。

上述实施例详细描述了区块链中区块数据上链的实现方式,上述实现方式中,节点最多启动预设数量的数据库实例,节点经该数据库实例将区块写入数据库中,每个数据库实例对应一个逻辑分区,当有新的区块对应新的逻辑分区,且需要启动新的数据库实例时,可以先确定节点包括的所有数据库实例是否都已经被占用,若是,则需要先释放最先逻辑分区(对应的区块中区块高度最低的逻辑分区)对应的数据库实例,同时删除该最先逻辑分区对应的数据库,再新建与该新的逻辑分区对应的数据库实例,可以理解为,当新的逻辑分区产生时,根据先进先出策略更新原有的逻辑分区与数据库实例的关联关系,更新过程中涉及整个数据库的删除,而非单个区块数据的删除,通过该方式,可以有效控制本地节点中的数据的存储量,相比于现有技术中只删除一个数据库中的部分数据,本方案直接删除整个数据库,可以有效控制数据的存储量。且该实现方式中,删除的是最先逻辑分区对应的数据库,并不影响节点通过最新逻辑分区对应的数据库实例将待存储区块存储至最新逻辑分区对应的数据库中,也就是说,本实现方式中,可以实现节点同时删除区块数据和存储区块数据,在删除区块数据时做到用户无感知,提高用户体验。

此外,本发明实施例还提供区块数据的查询方式,一种实现方式中,可以是节点接收查询请求,并根据各逻辑分区对应的区块中区块高度,从高到低依次查询各逻辑分区对应的数据库,确定首次查询到的查询标识对应的账户数据。也就是说,节点在接收到查询请求时,逐一查询区块链上的各逻辑分区对应的数据库,具体的,是根据各逻辑分区对应的区块的区块高度从高到低逐一查询对应的数据库,并确定出第一次查询到的查询标识对应的账户数据。

如图1中,节点接收查询请求,若该查询请求用于查询某账户标识对应的账户数据,则节点从区块高度最高的逻辑分区对应的数据库开始查询,即从逻辑分区5对应的数据库开始查询,若在逻辑分区5对应的数据库中查询到该账户标识,则确定出该账户标识对应的账户数据;若逻辑分区5对应的数据库中不存在该账户标识,则节点再从逻辑分区4对应的数据库中查询,若在逻辑分区4对应的数据库中查询到该账户标识,则确定出该账户标识对应的账户数据;若逻辑分区4对应的数据库中不存在该账户标识,则节点再从逻辑分区3对应的数据库中查询,……,直至第一次查询到该账户标识,并确定出该账户标识对应的账户数据。

本发明实施例中,只会查询到查询标识对应的最新区块数据,即节点在查询到该查询标识对应的最新区块数据后,会停止查询。上述例子中,若节点在逻辑分区4对应的数据库中查询到该账户标识对应的账户数据,则不会再从逻辑分区3或者更之前的逻辑分区对应的数据库中查询。

当然,节点也可以根据区块高度进行查询,比如查询某区快高度之前的区块数据,则可以是节点接收到的查询请求中包括查询标识和区块高度,节点从该区块高度之前的逻辑分区中查询该查询标识对应的区块数据。

本发明实施例中,还可能存在节点根据各逻辑分区对应的区块的区块高度从高到低逐一查询至最先的逻辑分区后,仍未查询到该查询标识对应的区块数据,则可以认为该查询标识对应的区块数据已经被删除,或者尚未存储。对于上述已经被删除的区块数据,本发明实施例可以在删除该区块数据之前,将该区块数据备份至备份数据库中,如远端数据库中,再将上述区块数据删除。

本发明实施例中,逻辑分区对应的数据库可以是高效的kv数据库,如leveldb、rocksdb。示例性的,rocksdb中记录有账户标识和对应的账户数据,如账户a对应的账户数据是300元,则key为账户a,value为300元。举例来说,如图1中,节点接收到查询请求,查询请求用于指示查询账户a当前的账户数据,则区块链节点以账户a为key,确定账户a对应的账户数据,节点从逻辑分区5对应的数据库中进行查询,如果查询不到账户a,则继续查询逻辑分区4对应的数据库,如果查询不到账户a,则继续查询逻辑分区3对应的数据库,……,直至查询到账户a,并确定账户a对应的账户数据,本例子中,虽然账户a的账户数据可以在多个数据库中存储,如在逻辑分区0对应的数据库、逻辑分区1对应的数据库和逻辑分区3对应的数据库中均有存储,但是在查到逻辑分区3对应的数据库中存储有该账户数据后,则返回该账户数据,不会再向前查询。当然,如果一直查询不到,则表示该账户对应的账户数据已经被删除,或者尚未存储。

为了提高查询效率,可以在节点内存中配置对应关系记录,该对应关系记录中包括区块链上各查询标识和各查询标识对应的逻辑分区,查询标识对应的逻辑分区是指查询标识对应的区块数据所属区块对应的逻辑分区。

一种实现方式中,对应关系记录可以是节点启动时,节点遍历已有区块链中各区块,确定各区块中查询标识对应区块数据所属区块对应的逻辑分区,从而建立对应关系记录;另一种实现方式中,节点在区块上链之前,可以生成该区块中查询标识与区块对应逻辑分区的对应关系,且将该对应关系更新至对应关系记录中。

节点接收查询请求,可以根据查询请求中的查询标识和对应关系记录,确定查询标识对应的多个逻辑分区中区块高度最高的逻辑分区,从区块高度最高的逻辑分区中确定查询标识对应的账户数据。

如图1中,节点接收查询请求,若该查询请求用于查询某账户标识对应的账户数据,则节点可以先根据该账户标识确定对应的逻辑分区中区块高度最高的逻辑分区,比如确定出该账户标识对应逻辑分区0、逻辑分区1、逻辑分区3,则可以确定区块高度最高的逻辑分区是逻辑分区3,则可以直接从逻辑分区3对应的数据库中确定该账户标识对应的账户数据。本例子中,只需要查询逻辑分区3对应的数据库,无需查询其他逻辑分区对应的数据库,提高了节点的查询速度。

本发明实施例中,节点可以配置布隆过滤器,每个逻辑分区对应一个布隆过滤器,如图1中,当节点接收到查询请求时,可以先根据逻辑分区5对应的布隆过滤器,确定该逻辑分区5对应的数据库中是否有可能存在该查询请求中的查询标识,若是,则查询该逻辑分区对应的数据库,否则,节点根据逻辑分区4对应的布隆过滤器,确定该逻辑分区4对应的数据库中是否有可能存在该查询请求中的查询标识,直至确定出查询标识以及查询标识对应的区块数据。

上述实现方式中,由于节点中有多个数据库,每个数据库中存储预设数量的区块数据,相比于现有技术中节点只有一个数据库(现有技术中,该一个数据库中存储全量区块数据),本方案中每个数据库中记录数据量小,且数据层级相对较低,查询数据的速度相比于现有技术快很多。而且本方案仅需要查询特定数据库,进一步提高了查询速度。

本发明实施例不仅适用于对区块数据的查询,同时还可以适用于对区块数据的操作,在对区块数据操作前,先查询该待操作的区块数据。仍结合图1中示出的数据库实例集,以业务转账为例描述数据查询和数据提交操作。最后一次更新账户a和账户b的账户数据的交易发生区块高度1500。在当前区块高度2019进行“账户a转账给账户b”的交易。交易过程中对数据库实例集的读写操作如下:

查询逻辑分区5对应的数据库,查询不到账户a和账户b;

查询逻辑分区4对应的数据库,查询不到账户a和账户b;

查询逻辑分区3对应的数据库,确定出账户a的账户数据和账户b的账户数据;

更新账户a的账户数据和账户b的账户数据,并写入逻辑分区5对应的数据库中。

需要说明的是,本例子中,若再查询账户a当前的账户数据,则不再是从逻辑分区3对应的数据库中确定,而是从逻辑分区5对应的数据库中确定。

本实现方式中,节点最多启动预设数量的数据库实例,节点经该数据库实例将区块写入数据库中,每个数据库实例对应一个逻辑分区,当有新的区块对应新的逻辑分区,且需要启动新的数据库实例时,可以先确定节点包括的所有数据库实例是否都已经被占用,若是,则需要先释放最先逻辑分区(对应的区块中区块高度最低的逻辑分区)对应的数据库实例,同时删除该最先逻辑分区对应的数据库,再新建与该新的逻辑分区对应的数据库实例,可以理解为,当新的逻辑分区产生时,根据先进先出策略更新原有的逻辑分区与数据库实例的关联关系,更新过程中涉及整个数据库的删除,而非单个区块数据的删除,通过该方式,可以有效控制本地节点中的数据的存储量,相比于现有技术中只删除一个数据库中的部分数据,本方案直接删除整个数据库,可以有效控制数据的存储量。且该实现方式中,删除的是最先逻辑分区对应的数据库,并不影响节点通过最新逻辑分区对应的数据库实例将待存储区块存储至最新逻辑分区对应的数据库中,也就是说,本实现方式中,可以实现节点同时删除区块数据和存储区块数据,在删除区块数据时做到用户无感知,提高用户体验。

基于同一发明构思,图4示例性的示出了本发明实施例提供的一种区块存储装置的结构,该装置适用于具有m个数据库实例的节点;每个数据库实例对应有各自的数据库;该数据库用于存储区块链上的各区块;其中,m大于等于2;该装置可以执行区块存储方法的流程。

该装置包括:

确定单元401,用于确定待存储区块对应的第一逻辑分区;每个逻辑分区对应区块链上连续上链的多个区块;

处理单元402,用于在所述确定单元401确定所述第一逻辑分区尚无对应的数据库实例且m个数据库实例均处于工作状态后,释放第二逻辑分区对应的数据库实例并删除第二数据库;所述第二数据库用于通过所述第二逻辑分区对应的数据库实例存储所述第二逻辑分区对应的区块;所述第二逻辑分区为对应的区块中区块高度最低的;

所述处理单元402,还用于为所述第一逻辑分区配置对应的数据库实例并将所述待存储区块存储至第一数据库,所述第一数据库用于通过所述第一逻辑分区对应的数据库实例存储所述第一逻辑分区对应的区块。

可选的,所述节点存储有逻辑分区与区块高度的对应关系;

所述确定单元401具体用于:

确定待存储区块的区块高度;

根据所述对应关系确定所述待存储区块的区块高度对应的所述第一逻辑分区。

可选的,所述处理单元402还用于:

接收查询请求;

根据各逻辑分区对应的区块中区块高度,从高到低依次查询各逻辑分区对应的数据库,确定首次查询到的所述查询请求中查询标识对应的区块数据。

可选的,所述处理单元402还用于:

接收查询请求;

根据所述查询请求中的查询标识和对应关系记录,确定所述查询标识对应的多个逻辑分区中对应区块高度最高的逻辑分区;

从所述区块高度最高的逻辑分区中确定所述查询标识对应的区块数据;

其中,所述对应关系记录中包括区块链上各查询标识和各查询标识对应的逻辑分区,所述查询标识对应的逻辑分区是指所述查询标识对应的区块数据所属区块对应的逻辑分区。

可选的,所述处理单元402还用于:

在所述确定单元401确定所述第一逻辑分区具有对应的数据库实例后,则将所述待存储区块存储至所述第一数据库。

可选的,所述处理单元402还用于:

在所述确定单元401确定所述第一逻辑分区尚无对应的数据库实例且至少一个数据库实例未处于工作状态后,则为所述第一逻辑分区配置对应的数据库实例并将所述待存储区块存储至所述第一数据库。

基于同一发明构思,本发明实施例还提供了一种计算设备,包括:

存储器,用于存储程序指令;

处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行上述区块存储方法。

基于同一发明构思,本发明实施例还提供了一种计算机可读非易失性存储介质,包括计算机可读指令,当计算机读取并执行所述计算机可读指令时,使得计算机执行上述区块存储方法。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

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