买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】一种区块链Block chain的同步存储方法、装置及计算机设备_深圳前海微众银行股份有限公司_201910199930.7 

申请/专利权人:深圳前海微众银行股份有限公司

申请日:2019-03-15

公开(公告)日:2024-03-22

公开(公告)号:CN109992624B

主分类号:G06F16/27

分类号:G06F16/27;G06F11/07;G06F9/50

优先权:

专利状态码:有效-授权

法律状态:2024.03.22#授权;2022.01.04#实质审查的生效;2019.07.09#公开

摘要:本申请公开了一种区块链Blockchain的同步存储方法、装置及计算机设备,该方法为:将节点中区块链生成的新区块数据存储至所述节点对应的数据库;所述新区块数据存储至所述数据库之后,所述节点中的总块高与所述数据库中的总块高一致;若存储后的所述数据库中的总块高与所述数据库中已校验区块的块高的差值大于区块不可逆阈值,则校验所述数据库中的第一区块与所述节点中的第二区块是否一致;若不一致,则将所述第一区块替换为所述第二区块;其中,所述第一区块为所述数据库中未校验区块中的任一个区块,且所述第一区块的区块编号与所述第二区块的区块编号相同。

主权项:1.一种区块链Blockchain的同步存储方法,其特征在于,包括:将节点中区块链生成的新区块数据存储至所述节点对应的数据库;所述新区块数据存储至所述数据库之后,所述节点中的总块高与所述数据库中的总块高一致;若存储后的所述数据库中的总块高与所述数据库中已校验区块的块高的差值大于区块不可逆阈值,则校验所述数据库中的第一区块与所述节点中的第二区块是否一致;若不一致,则将所述第一区块替换为所述第二区块;其中,所述区块不可逆阈值为确定所述区块链中一个区块更改不可逆,预设的至少需要在该区块之后生成的区块个数;所述第一区块为所述数据库中区块编号大于同步之前数据库中的总块高,且小于同步之后数据库中的总块高与所述区块不可逆阈值差值的任一区块;所述第一区块的区块编号与所述第二区块的区块编号相同。

全文数据:一种区块链Blockchain的同步存储方法、装置及计算机设备技术领域本发明涉及科技金融领域,尤其涉及一种区块链Blockchain的同步存储方法、装置及计算机设备。背景技术区块链Blockchain是一种分布式基础架构与计算方式。一个节点中部署的区块链会生成很多区块,这里的节点可以为一个服务器、一台主机等,这些区块需要同步存储到数据库中。区块链的一个特性是,在一个区块之后生成的区块未到达一定数量时,这个区块的数据有可能由于分叉等原因发生变化,在达到一定数量后,这个区块的数据才不能被篡改。现有技术中,对区块链进行同步存储的方法是,待一个区块之后生成了一定数量区块后,即这个区块的数据不能被篡改之后,才将这个区块存储到数据库中。由此可见,现有技术中数据库中存储的区块总是滞后于区块链中的区块,不能保证数据库中存储的区块与区块链的区块实时一致,当节点发生异常造成区块数据丢失时,由于区块链始终有一部分区块未存储在数据库中,因此这部分区块无法恢复。因此,现有技术中,不能保证数据库中存储的区块与区块链的区块实时一致,且节点发生异常造成区块数据丢失时,一部分区块无法恢复,是一个亟待解决的问题。发明内容本申请实施例提供一种区块链Blockchain的同步存储方法、装置及计算机设备,解决了现有技术中不能保证数据库中存储的区块与区块链的区块实时一致,且区块链发生异常造成区块数据丢失时,一部分区块无法恢复的问题。本申请实施例提供了一种区块链Blockchain的同步存储方法,包括:将节点中区块链生成的新区块数据存储至所述节点对应的数据库;所述新区块数据存储至所述数据库之后,所述节点中的总块高与所述数据库中的总块高一致;若存储后的所述数据库中的总块高与所述数据库中已校验区块的块高的差值大于区块不可逆阈值,则校验所述数据库中的第一区块与所述节点中的第二区块是否一致;若不一致,则将所述第一区块替换为所述第二区块;其中,所述第一区块为所述数据库中未校验区块中的任一个区块,且所述第一区块的区块编号与所述第二区块的区块编号相同。本申请实施例中,若节点有生成的新区块,则将新区块数据存储至节点对应的数据库,因此所述新区块数据存储至所述数据库之后,所述节点中的总块高与所述数据库中的总块高一致;由于在一个区块之后生成的区块大于或等于区块不可逆阈值之前,该区块仍然有可能发生变化,因此若存储后的所述数据库中的总块高与所述数据库中已校验区块的块高的差值大于区块不可逆阈值,节点中区块编号小于节点中总块高区块减去区块不可逆阈值的区块不会再变化,校验第一区块和第二区块是否一致,若不一致,则说明第一区块在节点中发生了变化,将第一区块替换为第二区块,可以保证节点中的区块与节点对应的数据库中的区块实时一致。可选的,所述校验所述数据库中第一区块与所述节点中第二区块是否一致,包括:获取所述第一区块的哈希值,以及所述第二区块的哈希值;若所述第一区块的哈希值与所述第二区块的哈希值一致,则确定所述第一区块与所述第二区块一致;否则,确定所述第一区块与所述第二区块不一致。通过上述可选方法,只需要获取第一区块的哈希值与所述第二区块的哈希值,不必对第一区块和第二区块中的数据进行一一对比,即可确定第一区块和第二区块是否一致。可选的,所述将节点生成的新区块数据存储至所述节点对应的数据库之前,还包括:获取所述节点中的总块高和所述数据库中的总块高;若所述节点中的总块高和所述数据库中的总块高的差值大于或等于区块存储阈值,则启动至少两个线程;将节点生成的新区块数据存储至所述节点对应的数据库,包括:使用所述至少两个线程按批次将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库;其中,所述区块存储阈值为预设的每一批次从所述区块链存储至所述数据库的区块个数。通过上述可选方法,当一个线程不足以在第一预设周期内将需要同步的区块同步完毕时,通过至少两个线程的方式,增加同步存储的效率,保证节点再次获取所述节点中的总块高和所述数据库中的总块高之前,将存储区块数目同步完毕。可选的,所述将节点生成的新区块数据存储至所述节点对应的数据库之前,还包括:获取所述节点中的总块高和所述数据库中的总块高;若所述节点中的总块高和所述数据库中的总块高的差值小于区块存储阈值,则启动一个线程;将节点生成的新区块数据存储至所述节点对应的数据库,包括:使用所述一个线程按批次将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库;其中,所述区块存储阈值为预设的每一批次从所述区块链存储至所述数据库的区块个数。通过上述可选方法,如果需要校验的区块数目小于区块存储阈值,通过一个线程,其同步存储的效率已足够使得节点在再次获取所述节点中的总块高和所述数据库中的总块高之前,将存储区块数目同步完毕,从而节省节点的资源。可选的,若所述新区块数据存储至所述数据库的过程中发生了异常,则在所述异常恢复后,启动至少两个线程,按批次将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库。通过上述可选方法,由于异常时同步存储的区块可能采用了多线程,难以确定哪部分区块已同步至数据库,哪部分区块未同步至数据库。因此,在恢复时采用多线程分批次同步的方式,保证异常后恢复同步的区块可以完全包括异常时同步存储的区块,从而确保节点中区块链的区块和数据库的区块最终一致。可选的,所述区块不可逆阈值为6。本申请实施例提供了一种区块链Blockchain的同步存储装置,包括:区块处理模块,用于将节点中区块链生成的新区块数据存储至所述节点对应的数据库;所述新区块数据存储至所述数据库之后,所述节点中的总块高与所述数据库中的总块高一致;区块校验模块,用于若存储后的所述数据库中的总块高与所述数据库中已校验区块的块高的差值大于区块不可逆阈值,则校验所述数据库中的第一区块与所述节点中的第二区块是否一致;若不一致,则将所述第一区块替换为所述第二区块;其中,所述第一区块为所述数据库中未校验区块中的任一个区块,且所述第一区块的区块编号与所述第二区块的区块编号相同。可选的,所述区块校验模块,具体用于:获取所述第一区块的哈希值,以及所述第二区块的哈希值;若所述第一区块的哈希值与所述第二区块的哈希值一致,则确定所述第一区块与所述第二区块一致;否则,确定所述第一区块与所述第二区块不一致。可选的,区块获取模块,用于获取所述节点中的总块高和所述数据库中的总块高;若所述节点中的总块高和所述数据库中的总块高的差值大于或等于区块存储阈值,则启动至少两个线程;所述区块处理模块,具体用于:使用所述至少两个线程按批次将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库;其中,所述区块存储阈值为预设的每一批次从所述区块链存储至所述数据库的区块个数。可选的,所述区块处理模块,具体用于:获取所述节点中的总块高和所述数据库中的总块高;若所述节点中的总块高和所述数据库中的总块高的差值小于区块存储阈值,则启动一个线程;将节点生成的新区块数据存储至所述节点对应的数据库,包括:使用所述一个线程按批次将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库;其中,所述区块存储阈值为预设的每一批次从所述区块链存储至所述数据库的区块个数。可选的,所述区块校验模块,还用于:若所述新区块数据存储至所述数据库的过程中发生了异常,则在所述异常恢复后,启动至少两个线程,按批次将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库。可选的,所述区块不可逆阈值为6。本申请实施例提供了一种计算机设备,包括程序或指令,当所述程序或指令被执行时,执行上述区块链Blockchain的同步存储的方法及可选方法。本申请实施例提供了一种存储介质,包括程序或指令,当所述程序或指令被执行时,执行上述区块链Blockchain的同步存储的方法及可选方法。附图说明图1为本申请实施例中一种区块链的同步存储方法的步骤流程图;图2为本申请实施例中区块链中的区块存储至数据库中的示意图;图3为本申请实施例中区块链中的区块存储至数据库中的流程图;图4为本申请实施例中校验第一区块和第二区块哈希值的流程图;图5为本申请实施例中一种区块链的同步存储装置的结构示意图。具体实施方式为了更好的理解上述技术方案,下面将结合说明书附图及具体的实施方式对上述技术方案进行详细的说明,应当理解本申请实施例以及实施例中的具体特征是对本申请技术方案的详细的说明,而不是对本申请技术方案的限定,在不冲突的情况下,本申请实施例以及实施例中的技术特征可以相互结合。区块链Blockchain是一种利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算方式。区块链的载体通常是一个节点,这里的节点可以为一个服务器、一台主机等,一个节点中的区块链会生成很多区块,这些区块需要同步存储到数据库中。区块链的一个特性是,在一个区块之后生成的区块未到达一定数量时,这个区块的数据有可能由于分叉等原因发生变化,在达到一定数量后,这个区块的数据才不能被篡改。现有技术中,对区块链进行同步存储的方法是基于以太坊的数据同步解决方案,即通过以太坊查询层QueryLayerforEthereum,EtherQL进行同步存储。节点中的区块链生成了最新区块后,先存到了缓存,再将缓存中的最新区块推送给监听器,再通过监听器监听的方式对节点的最新区块进行同步存储,如果链上生成了新的区块,则将新的区块进行数据同步。由于区块链有出现分叉的可能,所以EtherQL在同步数据到存储介质如一种数据库MySql之前,会先对区块放入节点的缓存中,等到所有节点对一笔交易达成共识并不可逆时一般为6个区块后不可逆,再进行同步存储。可以看出,现有技术中,由于待一个区块之后生成了一定数量区块后,即这个区块的数据不能被篡改之后,才将这个区块存储到数据库中。因此,现有技术中数据库中存储的区块总是滞后于区块链中的区块,不能保证数据库中存储的区块与区块链的区块实时一致,当节点发生异常造成区块数据丢失时,由于区块链始终有一部分区块未存储在数据库中,这部分区块无法恢复。为此,如图1所示,为本申请实施例提供了一种区块链的同步存储方法的步骤流程图。步骤101:将节点中区块链生成的新区块数据存储至所述节点对应的数据库。步骤102:若存储后的所述数据库中的总块高与所述数据库中已校验区块的块高的差值大于区块不可逆阈值,则校验所述数据库中的第一区块与所述节点中的第二区块是否一致;若不一致,则将所述第一区块替换为所述第二区块。步骤101之前,节点中部署着一个区块链,这个区块链的区块个数会根据交易信息的增加不断增长,也就是节点中的区块链会不断生成新的区块。由于节点中的区块数据有被查询、备份等需求,需要将节点中的区块数据存储到节点预先设置的对应数据库中。当节点中的区块链生成新区块后,先将新区块存在节点的缓存中,若缓存中有新的区块未存储,则将新区块推送给监听器,再由监听器存储至节点对应的数据库。步骤101之前,节点中区块的总块高为H,数据库中的总块高为h0。需要说明的是,节点中区块链从0开始对区块进行编号,也就是说,区块链中第一个生成的区块编号为0,第二个生成的区块编号为1,以此类推,节点中区块的总块高为区块链中最大的区块编号,即等于节点中的区块总数加1;节点对应的数据库中的总块高为,数据库中已存储的区块链中区块的最大编号,由于区块链是按区块的生成顺序存储到数据库的,也就是说,数据库中的总块高为h0,等价于数据库中存储的区块链的区块为区块链的第0个至第h0个区块。步骤101之前,将节点生成的新区块数据存储至所述节点对应的数据库之前,一种可选实施方式如下:获取所述节点中的总块高和所述数据库中的总块高;若所述节点中的总块高和所述数据库中的总块高的差值大于或等于区块存储阈值,则启动至少两个线程,用于将节点生成的新区块数据存储至节点对应的数据库。另外一种可选实施方式为,若所述节点中的总块高和所述数据库中的总块高的差值小于区块存储阈值,则启动一个线程,用于将节点生成的新区块数据存储至节点对应的数据库。需要说明的是,节点中区块的数据不能直接存储到数据库中,需要对区块的数据进行解析后,再存储到数据库。步骤101中,新区块数据存储至所述数据库之后,所述节点中的总块高与所述数据库中的总块高一致。将节点生成的新区块数据存储至所述节点对应的数据库,即将区块链中第h0+1个至第H个区块存储至所述数据库。如图2所示,为本申请实施例中区块链中的区块存储至数据库中的示意图,节点中区块链的区块是按顺序存储至数据库的。具体地,如图3所示,为本申请实施例中区块链中的区块存储至数据库中的流程图。步骤301:从节点获取区块链的总块高以及数据库中的总块高。需要说明的是,步骤301是按照第一预设周期定时执行的。步骤302:确定区块链的总块高是否大于数据库中的总块高。若大于,则执行步骤303,否则执行步骤306。步骤303:确定区块链的总块高与数据库中的总块高的差值,与预设区块存储阈值的大小关系。若该差值大于或等于预设区块存储阈值,则执行步骤305,否则执行步骤306。步骤304:启动至少两个线程,按批次将新区块数据存储至数据库。其中,每批次储存至数据库的区块个数等于预设区块存储阈值。步骤305:启动一个线程,将新区块数据存储至数据库。步骤306:确定步骤301的执行时刻的时长是否大于或等于第一预设周期。若是,执行步骤301,否则继续等待,直到步骤301的执行时刻的时长等于第一预设周期时,再执行步骤301。步骤101中,步骤304之后,包括以下两种情形:第一种情形:该情形对应步骤305,若所述节点中的总块高和所述数据库中的总块高的差值大于或等于区块存储阈值,则将节点生成的新区块数据存储至所述节点对应的数据库的具体过程为:使用所述至少两个线程按批次将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库。其中,所述区块存储阈值为预设的每一批次从所述区块链存储至所述数据库的区块个数,具体值可根据节点的一个线程的存储至数据库的效率设置,举例来说,区块存储阈值设置值取节点在第一预设周期内一个线程能够同步存储的最大区块数目。这种情形下,当一个线程不足以在第一预设周期内将需要同步的区块同步完毕时,通过至少两个线程的方式,增加同步存储的效率,保证节点在下一个第一预设周期的开始时刻到达前,将存储区块数目同步完毕。第二种情形:该情形对应步骤306,若所述节点中的总块高和所述数据库中的总块高的差值小于区块存储阈值,则将节点生成的新区块数据存储至所述节点对应的数据库的具体过程为:使用一个线程将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库。这种情形下,如果需要校验的区块数目小于区块存储阈值,通过一个线程,其同步存储的效率已足够使得节点在下一个第一预设周期到达前,将存储区块数目同步完毕,从而能节省节点的资源。在上述方法下,基于所述节点中的总块高和所述数据库中的总块高的差值小于区块存储阈值的大小关系,自动切换多线程和单线程的同步存储方式,可以在更合理的机器资源范围内保证数据的同步的高效性,既能保证节点在要求的第一预设周期内将需要同步的区块同步完毕,又能在需要同步的区块小于区块存储阈值时,使用单线程节约了资源。举例来说,步骤101中,将区块链中第h0+1个至第H个区块至所述数据库,上述两种情形下,具体过程如下:第一种情形:若Hh0且H-h0≥m,则启动n个线程按批次同步所述区块链中第h0+1个至第H个区块至所述数据库;其中,m为预设的每一批次同步区块的个数,且为正整数;n为大于1的整数。第二种情形:若Hh0且H-h0m,则启动1个线程同步所述区块链中第h0+1个至第H个区块至所述数据库。所述新区块数据存储至所述数据库之后,所述节点中的总块高与所述数据库中的总块高一致,也就是说,此时数据库中的总块高为H。在步骤101中,所述新区块数据存储至所述数据库的过程中可能会发生异常,举例来说,节点中生成了新区块,存放在节点的缓存中,在推送至监听器的过程中,节点突然断电。那么,当重新通电时,缓存中的新区块已消失,新区块中的一部分区块又未推送到监听器,进而造成这部分区块未同步至数据库中,通电后也不会由缓存推送到监听器。对于这类情况,一种实施方式如下:若所述新区块数据存储至所述数据库的过程中发生了异常,则在所述异常恢复后,启动至少两个线程,按批次将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库。在上述过程中,由于异常时同步存储的区块可能采用了多线程,难以确定哪部分区块已同步至数据库,哪部分区块未同步至数据库。因此,在恢复时采用多线程分批次同步的方式,保证异常后恢复同步的区块可以完全包括异常时同步存储的区块。通过该异常恢复的方法,能修正因为同步存储异常导致的数据不一致问题,从而确保节点中区块链的区块数据和存储介质中数据库的区块数据最终一致。步骤102中,虽然在步骤101之后,数据库中存储的区块和节点中区块链的区块一致,但由于区块链还有可能由于分叉等原因,在短暂时间内,区块中的数据还不稳定,在一个区块之后生成了一定数量的区块后,这个一定数量称为区块不可逆阈值,该区块中的数据才不能被篡改。举例来说,区块不可逆阈值取6的情形下,数据库中存储了第0个至第9个区块,在第9个区块生成时,由于第3个区块之后生成了区块编号为4、5、6、7、8、9的区块,因此区块3的数据已经稳定了,不可篡改。由此可知,在一个区块之后生成的区块小于区块不可逆阈值时,该区块的数据仍然有可能发生变化,进行校验的意义不大,需要在一个区块的数据不可篡改后,再校验才能确保区块链中的区块和数据库中的相应区块是否一致。步骤102中,区块不可逆阈值为,确定所述区块链中一个区块更改不可逆,预设的至少需要在该区块之后生成的区块个数。所述第一区块为所述数据库中未校验区块中的任一个区块,且所述第一区块的区块编号与所述第二区块的区块编号相同。换言之,所述第一区块为所述数据库中区块编号大于步骤101同步之前数据库中的总块高,且小于步骤101同步之后数据库中的总块高与所述区块生成阈值差值的任一区块;所述第二区块为所述区块链中区块编号与所述第一区块的区块编号相同的区块。举例来说,h1为所述数据库中已校验区块的块高,即数据库中第0个至第h1个区块已被校验,所述第一区块为所述数据库中第h1+1个区块至第h-6个区块中任一区块,第二区块为区块链中与第一区块的区块编号相同的区块。对校验第一区块和第二区块是否一致的方式有多种,其中一种实施方式为,获取所述第一区块的哈希值,以及所述第二区块的哈希值;若所述第一区块的哈希值与所述第二区块的哈希值一致,则确定所述第一区块与所述第二区块一致;否则,确定所述第一区块与所述第二区块不一致。需要说明的是,每个区块都包括区块头和区块主体,区块头存放着该区块的哈希值,区块主体存放着区块的数据,该哈希值是根据区块主体存放的数据生成的,当区块的数据变化时,该区块的哈希值也会发生变化。如图4所示,为本申请实施例中校验第一区块和第二区块哈希值的流程图。步骤401:获取数据库中已校验的块高。步骤402:确定数据库中的总块高与数据库中已校验的块高的差值是否大于区块不可逆阈值。若是,则执行步骤404;否则,执行步骤403。步骤403:确定步骤402执行时刻开始后的累计时长是否大于或等于第二预设周期。若是,即当累计时长等于第二预设周期时,执行步骤401;否则,继续等待。步骤404:获取区块链中的第一区块的哈希值和数据库中的第二区块的哈希值。其中,第一区块为所述数据库中未校验区块中的任一个区块,且第一区块的区块编号与第二区块的区块编号相同。第一区块的初始值为数据库中已校验的块高加1。步骤405:确定第一区块的哈希值与第二区块的哈希值是否一致。若一致,则执行步骤401;若不一致,执行步骤406。步骤406:将第一区块替换为第二区块。步骤406之后,继续循环执行步骤401,即对第一区块之后的区块继续校验,直至确定数据库中的总块高与数据库中已校验的块高的差值小于或等于区块不可逆阈值。通过步骤401~步骤406的校验和替换过程,能修正因为区块链分叉造成的第一区块和第二区块不一致的问题,确保节点中区块链的区块数据和存储介质中数据库的区块数据最终一致。本申请实施例中,若节点有生成的新区块,则将区块数据存储至节点对应的数据库,因此所述区块数据存储至所述数据库之后,所述节点中的总块高与所述数据库中的总块高一致;由于在一个区块之后生成的区块大于或等于区块不可逆阈值之前,该区块仍然有可能发生变化,因此若存储后的所述数据库中的总块高与所述数据库中已校验区块的块高的差值大于区块不可逆阈值,节点中区块编号小于节点中总块高区块减去区块不可逆阈值的区块不会再变化,校验第一区块和第二区块是否一致,若不一致,则说明第一区块在节点中发生了变化,将第一区块替换为第二区块,可以保证节点中的区块与节点对应的数据库中的区块实时一致。如图5所示,为本申请实施例中一种区块链的同步存储装置的结构示意图。本申请实施例提供了一种区块链Blockchain的同步存储的装置,包括:区块处理模块501,用于将节点中区块链生成的新区块数据存储至所述节点对应的数据库;所述新区块数据存储至所述数据库之后,所述节点中的总块高与所述数据库中的总块高一致;区块校验模块502,用于若存储后的所述数据库中的总块高与所述数据库中已校验区块的块高的差值大于区块不可逆阈值,则校验所述数据库中的第一区块与所述节点中的第二区块是否一致;若不一致,则将所述第一区块替换为所述第二区块;其中,所述第一区块为所述数据库中未校验区块中的任一个区块,且所述第一区块的区块编号与所述第二区块的区块编号相同。可选的,所述区块校验模块502,具体用于:获取所述第一区块的哈希值,以及所述第二区块的哈希值;若所述第一区块的哈希值与所述第二区块的哈希值一致,则确定所述第一区块与所述第二区块一致;否则,确定所述第一区块与所述第二区块不一致。可选的,所述装置还包括区块获取模块503,用于获取所述节点中的总块高和所述数据库中的总块高;若所述节点中的总块高和所述数据库中的总块高的差值大于或等于区块存储阈值,则启动至少两个线程;所述区块处理模块501,具体用于:使用所述至少两个线程按批次将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库;其中,所述区块存储阈值为预设的每一批次从所述区块链存储至所述数据库的区块个数。可选的,所述区块处理模块501,具体用于:获取所述节点中的总块高和所述数据库中的总块高;若所述节点中的总块高和所述数据库中的总块高的差值小于区块存储阈值,则启动一个线程;将节点生成的新区块数据存储至所述节点对应的数据库,包括:使用所述一个线程按批次将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库;其中,所述区块存储阈值为预设的每一批次从所述区块链存储至所述数据库的区块个数。可选的,所述区块校验模块502,还用于:若所述新区块数据存储至所述数据库的过程中发生了异常,则在所述异常恢复后,启动至少两个线程,按批次将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库。可选的,所述区块不可逆阈值为6。最后应说明的是:本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质包括但不限于磁盘存储器、光学存储器等上实施的计算机程序产品的形式。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

权利要求:1.一种区块链Blockchain的同步存储方法,其特征在于,包括:将节点中区块链生成的新区块数据存储至所述节点对应的数据库;所述新区块数据存储至所述数据库之后,所述节点中的总块高与所述数据库中的总块高一致;若存储后的所述数据库中的总块高与所述数据库中已校验区块的块高的差值大于区块不可逆阈值,则校验所述数据库中的第一区块与所述节点中的第二区块是否一致;若不一致,则将所述第一区块替换为所述第二区块;其中,所述第一区块为所述数据库中未校验区块中的任一个区块,且所述第一区块的区块编号与所述第二区块的区块编号相同。2.如权利要求1所述的方法,其特征在于,所述校验所述数据库中第一区块与所述节点中第二区块是否一致,包括:获取所述第一区块的哈希值,以及所述第二区块的哈希值;若所述第一区块的哈希值与所述第二区块的哈希值一致,则确定所述第一区块与所述第二区块一致;否则,确定所述第一区块与所述第二区块不一致。3.如权利要求1所述的方法,其特征在于,所述将节点生成的新区块数据存储至所述节点对应的数据库之前,还包括:获取所述节点中的总块高和所述数据库中的总块高;若所述节点中的总块高和所述数据库中的总块高的差值大于或等于区块存储阈值,则启动至少两个线程;将节点生成的新区块数据存储至所述节点对应的数据库,包括:使用所述至少两个线程按批次将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库;其中,所述区块存储阈值为预设的每一批次从所述区块链存储至所述数据库的区块个数。4.如权利要求1所述的方法,其特征在于,所述将节点生成的新区块数据存储至所述节点对应的数据库之前,还包括:获取所述节点中的总块高和所述数据库中的总块高;若所述节点中的总块高和所述数据库中的总块高的差值小于区块存储阈值,则启动一个线程;将节点生成的新区块数据存储至所述节点对应的数据库,包括:使用所述一个线程按批次将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库;其中,所述区块存储阈值为预设的每一批次从所述区块链存储至所述数据库的区块个数。5.如权利要求3所述的方法,其特征在于,还包括:若所述新区块数据存储至所述数据库的过程中发生了异常,则在所述异常恢复后,启动至少两个线程,按批次将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库。6.如权利要求1-5任一所述的方法,其特征在于,所述区块不可逆阈值为6。7.一种区块链Blockchain的同步存储装置,其特征在于,包括:区块处理模块,用于将节点中区块链生成的新区块数据存储至所述节点对应的数据库;所述新区块数据存储至所述数据库之后,所述节点中的总块高与所述数据库中的总块高一致;区块校验模块,用于若存储后的所述数据库中的总块高与所述数据库中已校验区块的块高的差值大于区块不可逆阈值,则校验所述数据库中的第一区块与所述节点中的第二区块是否一致;若不一致,则将所述第一区块替换为所述第二区块;其中,所述第一区块为所述数据库中未校验区块中的任一个区块,且所述第一区块的区块编号与所述第二区块的区块编号相同。8.如权利要求7所述的装置,其特征在于,所述区块校验模块,具体用于:获取所述第一区块的哈希值,以及所述第二区块的哈希值;若所述第一区块的哈希值与所述第二区块的哈希值一致,则确定所述第一区块与所述第二区块一致;否则,确定所述第一区块与所述第二区块不一致。9.如权利要求7所述的装置,其特征在于,还包括:区块获取模块,用于获取所述节点中的总块高和所述数据库中的总块高;若所述节点中的总块高和所述数据库中的总块高的差值大于或等于区块存储阈值,则启动至少两个线程;所述区块处理模块,具体用于:使用所述至少两个线程按批次将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库;其中,所述区块存储阈值为预设的每一批次从所述区块链存储至所述数据库的区块个数。10.如权利要求7所述的装置,其特征在于,所述区块处理模块,具体用于:获取所述节点中的总块高和所述数据库中的总块高;若所述节点中的总块高和所述数据库中的总块高的差值小于区块存储阈值,则启动一个线程;将节点生成的新区块数据存储至所述节点对应的数据库,包括:使用所述一个线程按批次将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库;其中,所述区块存储阈值为预设的每一批次从所述区块链存储至所述数据库的区块个数。11.如权利要求9所述的装置,其特征在于,所述区块校验模块,还用于:若所述新区块数据存储至所述数据库的过程中发生了异常,则在所述异常恢复后,启动至少两个线程,按批次将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库。12.如权利要求7-11任一所述的装置,其特征在于,所述区块不可逆阈值为6。13.一种计算机设备,其特征在于,包括程序或指令,当所述程序或指令被执行时,如权利要求1至6中任意一项所述的方法被执行。14.一种存储介质,其特征在于,包括程序或指令,当所述程序或指令被执行时,如权利要求1至6中任意一项所述的方法被执行。

百度查询: 深圳前海微众银行股份有限公司 一种区块链Block chain的同步存储方法、装置及计算机设备

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。