CN109992624B - 一种区块链Block chain的同步存储方法、装置及计算机设备 - Google Patents
一种区块链Block chain的同步存储方法、装置及计算机设备 Download PDFInfo
- Publication number
- CN109992624B CN109992624B CN201910199930.7A CN201910199930A CN109992624B CN 109992624 B CN109992624 B CN 109992624B CN 201910199930 A CN201910199930 A CN 201910199930A CN 109992624 B CN109992624 B CN 109992624B
- Authority
- CN
- China
- Prior art keywords
- block
- database
- node
- total
- height
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 47
- 230000001360 synchronised effect Effects 0.000 title claims abstract description 35
- 230000002427 irreversible effect Effects 0.000 claims abstract description 32
- 230000005856 abnormality Effects 0.000 claims description 17
- 238000012545 processing Methods 0.000 claims description 9
- 238000012795 verification Methods 0.000 claims description 9
- 238000012986 modification Methods 0.000 claims description 5
- 230000004048 modification Effects 0.000 claims description 5
- 230000002159 abnormal effect Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 3
- 238000004590 computer program Methods 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000001186 cumulative effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0793—Remedial or corrective actions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/80—Database-specific techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种区块链Block chain的同步存储方法、装置及计算机设备,该方法为:将节点中区块链生成的新区块数据存储至所述节点对应的数据库;所述新区块数据存储至所述数据库之后,所述节点中的总块高与所述数据库中的总块高一致;若存储后的所述数据库中的总块高与所述数据库中已校验区块的块高的差值大于区块不可逆阈值,则校验所述数据库中的第一区块与所述节点中的第二区块是否一致;若不一致,则将所述第一区块替换为所述第二区块;其中,所述第一区块为所述数据库中未校验区块中的任一个区块,且所述第一区块的区块编号与所述第二区块的区块编号相同。
Description
技术领域
本发明涉及科技金融领域,尤其涉及一种区块链(Block chain)的同步存储方法、装置及计算机设备。
背景技术
区块链(Block chain)是一种分布式基础架构与计算方式。一个节点中部署的区块链会生成很多区块,这里的节点可以为一个服务器、一台主机等,这些区块需要同步存储到数据库中。区块链的一个特性是,在一个区块之后生成的区块未到达一定数量时,这个区块的数据有可能由于分叉等原因发生变化,在达到一定数量后,这个区块的数据才不能被篡改。
现有技术中,对区块链进行同步存储的方法是,待一个区块之后生成了一定数量区块后,即这个区块的数据不能被篡改之后,才将这个区块存储到数据库中。由此可见,现有技术中数据库中存储的区块总是滞后于区块链中的区块,不能保证数据库中存储的区块与区块链的区块实时一致,当节点发生异常造成区块数据丢失时,由于区块链始终有一部分区块未存储在数据库中,因此这部分区块无法恢复。
因此,现有技术中,不能保证数据库中存储的区块与区块链的区块实时一致,且节点发生异常造成区块数据丢失时,一部分区块无法恢复,是一个亟待解决的问题。
发明内容
本申请实施例提供一种区块链(Block chain)的同步存储方法、装置及计算机设备,解决了现有技术中不能保证数据库中存储的区块与区块链的区块实时一致,且区块链发生异常造成区块数据丢失时,一部分区块无法恢复的问题。
本申请实施例提供了一种区块链Block chain的同步存储方法,包括:
将节点中区块链生成的新区块数据存储至所述节点对应的数据库;所述新区块数据存储至所述数据库之后,所述节点中的总块高与所述数据库中的总块高一致;
若存储后的所述数据库中的总块高与所述数据库中已校验区块的块高的差值大于区块不可逆阈值,则校验所述数据库中的第一区块与所述节点中的第二区块是否一致;若不一致,则将所述第一区块替换为所述第二区块;其中,所述第一区块为所述数据库中未校验区块中的任一个区块,且所述第一区块的区块编号与所述第二区块的区块编号相同。
本申请实施例中,若节点有生成的新区块,则将新区块数据存储至节点对应的数据库,因此所述新区块数据存储至所述数据库之后,所述节点中的总块高与所述数据库中的总块高一致;由于在一个区块之后生成的区块大于或等于区块不可逆阈值之前,该区块仍然有可能发生变化,因此若存储后的所述数据库中的总块高与所述数据库中已校验区块的块高的差值大于区块不可逆阈值,节点中区块编号小于节点中总块高区块减去区块不可逆阈值的区块不会再变化,校验第一区块和第二区块是否一致,若不一致,则说明第一区块在节点中发生了变化,将第一区块替换为第二区块,可以保证节点中的区块与节点对应的数据库中的区块实时一致。
可选的,所述校验所述数据库中第一区块与所述节点中第二区块是否一致,包括:
获取所述第一区块的哈希值,以及所述第二区块的哈希值;
若所述第一区块的哈希值与所述第二区块的哈希值一致,则确定所述第一区块与所述第二区块一致;否则,确定所述第一区块与所述第二区块不一致。
通过上述可选方法,只需要获取第一区块的哈希值与所述第二区块的哈希值,不必对第一区块和第二区块中的数据进行一一对比,即可确定第一区块和第二区块是否一致。
可选的,所述将节点生成的新区块数据存储至所述节点对应的数据库之前,还包括:
获取所述节点中的总块高和所述数据库中的总块高;
若所述节点中的总块高和所述数据库中的总块高的差值大于或等于区块存储阈值,则启动至少两个线程;
将节点生成的新区块数据存储至所述节点对应的数据库,包括:
使用所述至少两个线程按批次将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库;
其中,所述区块存储阈值为预设的每一批次从所述区块链存储至所述数据库的区块个数。
通过上述可选方法,当一个线程不足以在第一预设周期内将需要同步的区块同步完毕时,通过至少两个线程的方式,增加同步存储的效率,保证节点再次获取所述节点中的总块高和所述数据库中的总块高之前,将存储区块数目同步完毕。
可选的,所述将节点生成的新区块数据存储至所述节点对应的数据库之前,还包括:
获取所述节点中的总块高和所述数据库中的总块高;
若所述节点中的总块高和所述数据库中的总块高的差值小于区块存储阈值,则启动一个线程;
将节点生成的新区块数据存储至所述节点对应的数据库,包括:
使用所述一个线程按批次将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库;
其中,所述区块存储阈值为预设的每一批次从所述区块链存储至所述数据库的区块个数。
通过上述可选方法,如果需要校验的区块数目小于区块存储阈值,通过一个线程,其同步存储的效率已足够使得节点在再次获取所述节点中的总块高和所述数据库中的总块高之前,将存储区块数目同步完毕,从而节省节点的资源。
可选的,若所述新区块数据存储至所述数据库的过程中发生了异常,则在所述异常恢复后,启动至少两个线程,按批次将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库。
通过上述可选方法,由于异常时同步存储的区块可能采用了多线程,难以确定哪部分区块已同步至数据库,哪部分区块未同步至数据库。因此,在恢复时采用多线程分批次同步的方式,保证异常后恢复同步的区块可以完全包括异常时同步存储的区块,从而确保节点中区块链的区块和数据库的区块最终一致。
可选的,所述区块不可逆阈值为6。
本申请实施例提供了一种区块链Block chain的同步存储装置,包括:
区块处理模块,用于将节点中区块链生成的新区块数据存储至所述节点对应的数据库;所述新区块数据存储至所述数据库之后,所述节点中的总块高与所述数据库中的总块高一致;
区块校验模块,用于若存储后的所述数据库中的总块高与所述数据库中已校验区块的块高的差值大于区块不可逆阈值,则校验所述数据库中的第一区块与所述节点中的第二区块是否一致;若不一致,则将所述第一区块替换为所述第二区块;其中,所述第一区块为所述数据库中未校验区块中的任一个区块,且所述第一区块的区块编号与所述第二区块的区块编号相同。
可选的,所述区块校验模块,具体用于:
获取所述第一区块的哈希值,以及所述第二区块的哈希值;
若所述第一区块的哈希值与所述第二区块的哈希值一致,则确定所述第一区块与所述第二区块一致;否则,确定所述第一区块与所述第二区块不一致。
可选的,区块获取模块,用于获取所述节点中的总块高和所述数据库中的总块高;若所述节点中的总块高和所述数据库中的总块高的差值大于或等于区块存储阈值,则启动至少两个线程;
所述区块处理模块,具体用于:
使用所述至少两个线程按批次将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库;
其中,所述区块存储阈值为预设的每一批次从所述区块链存储至所述数据库的区块个数。
可选的,所述区块处理模块,具体用于:
获取所述节点中的总块高和所述数据库中的总块高;
若所述节点中的总块高和所述数据库中的总块高的差值小于区块存储阈值,则启动一个线程;
将节点生成的新区块数据存储至所述节点对应的数据库,包括:
使用所述一个线程按批次将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库;
其中,所述区块存储阈值为预设的每一批次从所述区块链存储至所述数据库的区块个数。
可选的,所述区块校验模块,还用于:
若所述新区块数据存储至所述数据库的过程中发生了异常,则在所述异常恢复后,启动至少两个线程,按批次将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库。
可选的,所述区块不可逆阈值为6。
本申请实施例提供了一种计算机设备,包括程序或指令,当所述程序或指令被执行时,执行上述区块链Block chain的同步存储的方法及可选方法。
本申请实施例提供了一种存储介质,包括程序或指令,当所述程序或指令被执行时,执行上述区块链Block chain的同步存储的方法及可选方法。
附图说明
图1为本申请实施例中一种区块链的同步存储方法的步骤流程图;
图2为本申请实施例中区块链中的区块存储至数据库中的示意图;
图3为本申请实施例中区块链中的区块存储至数据库中的流程图;
图4为本申请实施例中校验第一区块和第二区块哈希值的流程图;
图5为本申请实施例中一种区块链的同步存储装置的结构示意图。
具体实施方式
为了更好的理解上述技术方案,下面将结合说明书附图及具体的实施方式对上述技术方案进行详细的说明,应当理解本申请实施例以及实施例中的具体特征是对本申请技术方案的详细的说明,而不是对本申请技术方案的限定,在不冲突的情况下,本申请实施例以及实施例中的技术特征可以相互结合。
区块链(Block chain)是一种利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算方式。
区块链的载体通常是一个节点,这里的节点可以为一个服务器、一台主机等,一个节点中的区块链会生成很多区块,这些区块需要同步存储到数据库中。区块链的一个特性是,在一个区块之后生成的区块未到达一定数量时,这个区块的数据有可能由于分叉等原因发生变化,在达到一定数量后,这个区块的数据才不能被篡改。
现有技术中,对区块链进行同步存储的方法是基于以太坊的数据同步解决方案,即通过以太坊查询层(Query Layer for Ethereum,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个区块至所述数据库,上述两种情形下,具体过程如下:
第一种情形:若H>h0且H-h0≥m,则启动n个线程按批次同步所述区块链中第h0+1个至第H个区块至所述数据库;其中,m为预设的每一批次同步区块的个数,且为正整数;n为大于1的整数。
第二种情形:若H>h0且H-h0<m,则启动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所示,为本申请实施例中一种区块链的同步存储装置的结构示意图。
本申请实施例提供了一种区块链Block chain的同步存储的装置,包括:
区块处理模块501,用于将节点中区块链生成的新区块数据存储至所述节点对应的数据库;所述新区块数据存储至所述数据库之后,所述节点中的总块高与所述数据库中的总块高一致;
区块校验模块502,用于若存储后的所述数据库中的总块高与所述数据库中已校验区块的块高的差值大于区块不可逆阈值,则校验所述数据库中的第一区块与所述节点中的第二区块是否一致;若不一致,则将所述第一区块替换为所述第二区块;其中,所述第一区块为所述数据库中未校验区块中的任一个区块,且所述第一区块的区块编号与所述第二区块的区块编号相同。
可选的,所述区块校验模块502,具体用于:
获取所述第一区块的哈希值,以及所述第二区块的哈希值;
若所述第一区块的哈希值与所述第二区块的哈希值一致,则确定所述第一区块与所述第二区块一致;否则,确定所述第一区块与所述第二区块不一致。
可选的,所述装置还包括区块获取模块503,用于获取所述节点中的总块高和所述数据库中的总块高;若所述节点中的总块高和所述数据库中的总块高的差值大于或等于区块存储阈值,则启动至少两个线程;
所述区块处理模块501,具体用于:
使用所述至少两个线程按批次将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库;
其中,所述区块存储阈值为预设的每一批次从所述区块链存储至所述数据库的区块个数。
可选的,所述区块处理模块501,具体用于:
获取所述节点中的总块高和所述数据库中的总块高;
若所述节点中的总块高和所述数据库中的总块高的差值小于区块存储阈值,则启动一个线程;
将节点生成的新区块数据存储至所述节点对应的数据库,包括:
使用所述一个线程按批次将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库;
其中,所述区块存储阈值为预设的每一批次从所述区块链存储至所述数据库的区块个数。
可选的,所述区块校验模块502,还用于:
若所述新区块数据存储至所述数据库的过程中发生了异常,则在所述异常恢复后,启动至少两个线程,按批次将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库。
可选的,所述区块不可逆阈值为6。
最后应说明的是:本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、光学存储器等)上实施的计算机程序产品的形式。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (14)
1.一种区块链Block chain的同步存储方法,其特征在于,包括:
将节点中区块链生成的新区块数据存储至所述节点对应的数据库;所述新区块数据存储至所述数据库之后,所述节点中的总块高与所述数据库中的总块高一致;
若存储后的所述数据库中的总块高与所述数据库中已校验区块的块高的差值大于区块不可逆阈值,则校验所述数据库中的第一区块与所述节点中的第二区块是否一致;若不一致,则将所述第一区块替换为所述第二区块;其中,所述区块不可逆阈值为确定所述区块链中一个区块更改不可逆,预设的至少需要在该区块之后生成的区块个数;所述第一区块为所述数据库中区块编号大于同步之前数据库中的总块高,且小于同步之后数据库中的总块高与所述区块不可逆阈值差值的任一区块;所述第一区块的区块编号与所述第二区块的区块编号相同。
2.如权利要求1所述的方法,其特征在于,所述校验所述数据库中第一区块与所述节点中第二区块是否一致,包括:
获取所述第一区块的哈希值,以及所述第二区块的哈希值;
若所述第一区块的哈希值与所述第二区块的哈希值一致,则确定所述第一区块与所述第二区块一致;否则,确定所述第一区块与所述第二区块不一致。
3.如权利要求1所述的方法,其特征在于,所述将节点生成的新区块数据存储至所述节点对应的数据库之前,还包括:
获取所述节点中的总块高和所述数据库中的总块高;
若所述节点中的总块高和所述数据库中的总块高的差值大于或等于区块存储阈值,则启动至少两个线程;
将节点生成的新区块数据存储至所述节点对应的数据库,包括:
使用所述至少两个线程按批次将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库;
其中,所述区块存储阈值为预设的每一批次从所述区块链存储至所述数据库的区块个数。
4.如权利要求1所述的方法,其特征在于,所述将节点生成的新区块数据存储至所述节点对应的数据库之前,还包括:
获取所述节点中的总块高和所述数据库中的总块高;
若所述节点中的总块高和所述数据库中的总块高的差值小于区块存储阈值,则启动一个线程;
将节点生成的新区块数据存储至所述节点对应的数据库,包括:
使用所述一个线程按批次将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库;
其中,所述区块存储阈值为预设的每一批次从所述区块链存储至所述数据库的区块个数。
5.如权利要求3所述的方法,其特征在于,还包括:
若所述新区块数据存储至所述数据库的过程中发生了异常,则在所述异常恢复后,启动至少两个线程,按批次将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库。
6.如权利要求1-5任一所述的方法,其特征在于,所述区块不可逆阈值为6。
7.一种区块链Block chain的同步存储装置,其特征在于,包括:
区块处理模块,用于将节点中区块链生成的新区块数据存储至所述节点对应的数据库;所述新区块数据存储至所述数据库之后,所述节点中的总块高与所述数据库中的总块高一致;
区块校验模块,用于若存储后的所述数据库中的总块高与所述数据库中已校验区块的块高的差值大于区块不可逆阈值,则校验所述数据库中的第一区块与所述节点中的第二区块是否一致;若不一致,则将所述第一区块替换为所述第二区块;其中,所述区块不可逆阈值为确定所述区块链中一个区块更改不可逆,预设的至少需要在该区块之后生成的区块个数;所述第一区块为所述数据库中区块编号大于同步之前数据库中的总块高,且小于同步之后数据库中的总块高与所述区块不可逆阈值差值的任一区块;所述第一区块的区块编号与所述第二区块的区块编号相同。
8.如权利要求7所述的装置,其特征在于,所述区块校验模块,具体用于:
获取所述第一区块的哈希值,以及所述第二区块的哈希值;
若所述第一区块的哈希值与所述第二区块的哈希值一致,则确定所述第一区块与所述第二区块一致;否则,确定所述第一区块与所述第二区块不一致。
9.如权利要求7所述的装置,其特征在于,还包括:
区块获取模块,用于获取所述节点中的总块高和所述数据库中的总块高;若所述节点中的总块高和所述数据库中的总块高的差值大于或等于区块存储阈值,则启动至少两个线程;
所述区块处理模块,具体用于:
使用所述至少两个线程按批次将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库;
其中,所述区块存储阈值为预设的每一批次从所述区块链存储至所述数据库的区块个数。
10.如权利要求7所述的装置,其特征在于,所述区块处理模块,具体用于:
获取所述节点中的总块高和所述数据库中的总块高;
若所述节点中的总块高和所述数据库中的总块高的差值小于区块存储阈值,则启动一个线程;
将节点生成的新区块数据存储至所述节点对应的数据库,包括:
使用所述一个线程按批次将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库;
其中,所述区块存储阈值为预设的每一批次从所述区块链存储至所述数据库的区块个数。
11.如权利要求9所述的装置,其特征在于,所述区块校验模块,还用于:
若所述新区块数据存储至所述数据库的过程中发生了异常,则在所述异常恢复后,启动至少两个线程,按批次将所述节点中区块编号大于所述数据库中的总块高,且小于或等于所述节点中的总块高的区块,存储至所述数据库。
12.如权利要求7-11任一所述的装置,其特征在于,所述区块不可逆阈值为6。
13.一种计算机设备,其特征在于,包括程序或指令,当所述程序或指令被执行时,如权利要求1至6中任意一项所述的方法被执行。
14.一种存储介质,其特征在于,包括程序或指令,当所述程序或指令被执行时,如权利要求1至6中任意一项所述的方法被执行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910199930.7A CN109992624B (zh) | 2019-03-15 | 2019-03-15 | 一种区块链Block chain的同步存储方法、装置及计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910199930.7A CN109992624B (zh) | 2019-03-15 | 2019-03-15 | 一种区块链Block chain的同步存储方法、装置及计算机设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109992624A CN109992624A (zh) | 2019-07-09 |
CN109992624B true CN109992624B (zh) | 2024-03-22 |
Family
ID=67130480
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910199930.7A Active CN109992624B (zh) | 2019-03-15 | 2019-03-15 | 一种区块链Block chain的同步存储方法、装置及计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109992624B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112527825B (zh) * | 2019-09-19 | 2022-12-06 | 上海哔哩哔哩科技有限公司 | 数据存储方法、装置及计算机设备 |
CN111026770B (zh) * | 2019-10-29 | 2023-08-04 | 京东科技信息技术有限公司 | 区块链节点的账本处理方法、装置、服务器及存储介质 |
CN111078790B (zh) * | 2019-12-04 | 2022-05-24 | 福州博泉网络科技有限公司 | 区块链中孤块数据的同步方法、系统及存储介质 |
CN111555860B (zh) * | 2020-04-09 | 2023-04-21 | 中信梧桐港供应链管理有限公司 | 一种区块链节点共识方法、装置、电子设备及存储介质 |
CN112650735B (zh) * | 2020-12-28 | 2022-05-24 | 杭州趣链科技有限公司 | 联盟链的丢失区块确定方法、装置、设备及存储介质 |
CN115687527B (zh) * | 2022-11-09 | 2023-10-10 | 北京北纬三十度网络科技有限公司 | 一种基于区块链大数据的存储系统 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107507006A (zh) * | 2017-08-11 | 2017-12-22 | 杭州秘猿科技有限公司 | 一种基于许可链的共识分叉处理方法 |
CN107729383A (zh) * | 2017-09-18 | 2018-02-23 | 联动优势科技有限公司 | 一种索引库生成方法、数据验证方法、装置及平台 |
CN108600353A (zh) * | 2018-04-12 | 2018-09-28 | 北京天德科技有限公司 | 一种区块链节点的并行块同步方法 |
US10102265B1 (en) * | 2017-04-12 | 2018-10-16 | Vijay K. Madisetti | Method and system for tuning blockchain scalability for fast and low-cost payment and transaction processing |
CN108734453A (zh) * | 2018-05-21 | 2018-11-02 | 腾讯科技(深圳)有限公司 | 区块链数据处理方法、装置、计算机设备和存储介质 |
CN108924223A (zh) * | 2018-06-29 | 2018-11-30 | 北京金山安全软件有限公司 | 一种区块链的节点同步方法及装置 |
CN109165229A (zh) * | 2018-08-23 | 2019-01-08 | 北京京东金融科技控股有限公司 | 本地区块同步的检验方法、装置、设备及存储介质 |
CN109274754A (zh) * | 2018-10-11 | 2019-01-25 | 上海保险交易所股份有限公司 | 用于在区块链网络中同步数据的方法、设备和存储介质 |
-
2019
- 2019-03-15 CN CN201910199930.7A patent/CN109992624B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10102265B1 (en) * | 2017-04-12 | 2018-10-16 | Vijay K. Madisetti | Method and system for tuning blockchain scalability for fast and low-cost payment and transaction processing |
CN107507006A (zh) * | 2017-08-11 | 2017-12-22 | 杭州秘猿科技有限公司 | 一种基于许可链的共识分叉处理方法 |
CN107729383A (zh) * | 2017-09-18 | 2018-02-23 | 联动优势科技有限公司 | 一种索引库生成方法、数据验证方法、装置及平台 |
CN108600353A (zh) * | 2018-04-12 | 2018-09-28 | 北京天德科技有限公司 | 一种区块链节点的并行块同步方法 |
CN108734453A (zh) * | 2018-05-21 | 2018-11-02 | 腾讯科技(深圳)有限公司 | 区块链数据处理方法、装置、计算机设备和存储介质 |
CN108924223A (zh) * | 2018-06-29 | 2018-11-30 | 北京金山安全软件有限公司 | 一种区块链的节点同步方法及装置 |
CN109165229A (zh) * | 2018-08-23 | 2019-01-08 | 北京京东金融科技控股有限公司 | 本地区块同步的检验方法、装置、设备及存储介质 |
CN109274754A (zh) * | 2018-10-11 | 2019-01-25 | 上海保险交易所股份有限公司 | 用于在区块链网络中同步数据的方法、设备和存储介质 |
Non-Patent Citations (1)
Title |
---|
区块链共识机制研究与分析;刘童桐;;信息通信技术与政策;20180715(第07期);第33-40页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109992624A (zh) | 2019-07-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109992624B (zh) | 一种区块链Block chain的同步存储方法、装置及计算机设备 | |
CN109274754B (zh) | 用于在区块链网络中同步数据的方法、设备和存储介质 | |
CN107679863B (zh) | 一种区块链系统及快速验证区块的方法 | |
CN109165229B (zh) | 本地区块同步的检验方法、装置、设备及存储介质 | |
CN112383610B (zh) | 区块链状态数据的同步处理方法及系统 | |
CN105354108B (zh) | 一种数据备份方法及节点 | |
US20120311593A1 (en) | Asynchronous checkpoint acquisition and recovery from the checkpoint in parallel computer calculation in iteration method | |
CN108614876B (zh) | 一种基于Redis数据库的系统和数据处理方法 | |
CN112035144B (zh) | 区块链系统的升级方法、装置、计算机设备及存储介质 | |
CN107832169B (zh) | 内存数据迁移方法、装置、终端设备和存储介质 | |
CN112118128B (zh) | 在线执行体故障的快速识别方法及恢复方法 | |
CN106940671B (zh) | 一种集群中任务线程运行的监控方法、装置及系统 | |
CN112612850A (zh) | 数据同步方法及装置 | |
CN109299116B (zh) | 一种数据同步方法、装置、设备及可读存储介质 | |
CN116069866A (zh) | 数据同步方法、装置、存储介质及计算机设备 | |
CN113934547B (zh) | 一种集群环境下告警日志的记录方法、装置、设备及产品 | |
CN112114750B (zh) | 一种元数据卷位图数据冲突处理方法及相关组件 | |
CN113467365A (zh) | 一种基于can总线的plc监控系统及方法 | |
CN113515291A (zh) | 设备在线升级方法和装置 | |
CN110825758B (zh) | 一种交易处理的方法及装置 | |
CN113934573B (zh) | 一种内存数据库的数据恢复方法及装置 | |
CN116319766A (zh) | 分布式id生成方法、装置、电子设备及存储介质 | |
CN115328931A (zh) | 数据库集群数据校验方法、装置、存储介质及电子设备 | |
CN117149728B (zh) | 可信分散控制系统上位机多节点数据在线同步方法及系统 | |
CN115048207B (zh) | 一种基于固定时间间隔的任务执行方法、设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |