一种基于纠删码的区块链分片存储与查询方法技术

技术编号:21343363 阅读:34 留言:0更新日期:2019-06-13 22:24
本发明专利技术公开了一种基于纠删码的区块链分片存储与查询方法,当区块存储到达一定阈值时,将区块进行分片存储。首先将区块文件分片的元信息进行共识,达成共识后利用纠删码将阈值内的区块文件进行分片形成数据块和校验块,每个节点存储其中的一部分,从而减小了存储代价,同时也实现了拜占庭容错下的数据的容错。此外,在区块文件分片时,建立对应的索引,利用索引,可以从各个节点查询出对应的数据块或者校验块,保证了在节省存储空间的情况下,还能对区块数据进行高效的查询。

A Block Chain Partitioned Storage and Query Method Based on Error Correction Code

The invention discloses a block chain piecewise storage and query method based on erasure code. When the block storage reaches a certain threshold, the block is stored piecewise. Firstly, the meta-information of block file fragmentation is agreed. After the consensus is reached, block files within the threshold are fragmented by erasure codes to form data blocks and check blocks. Each node stores a part of them, which reduces the storage cost and achieves data fault tolerance under Byzantine fault tolerance. In addition, when partitioning block files, the corresponding index is established. By using the index, the corresponding data blocks or check blocks can be queried from each node, which ensures that the block data can be efficiently queried under the condition of saving storage space.

【技术实现步骤摘要】
一种基于纠删码的区块链分片存储与查询方法
本专利技术属于区块链领域,涉及一种面向区块链的基于纠删码解决全副本存储的问题,将区块文件进行分片存储,不需要全副本存储并保证数据的容错,方便的将数据进行查询。
技术介绍
区块链作为一种分布式账本技术,已被各种应用程序采用,以实现多个参与者之间的信任连接,它能够以可验证的,永久的方式有效记录双方之间的交易,如国际结算、安全交易结算、食品配料的可追溯性等。为了确保不变性,每个块都与前一个块的哈希、时间戳和该块的Merkle哈希根的信息相关联。共识协议用于确保每个参与者记录的数据的一致性。但是目前区块链系统存在两个比较严重的问题:目前大多数区块链系统将区块数据存储在文件中,但由于区块链数据是全副本的属性,区块存储面临很大的压力。随着区块数量的不断增长积累,数据也会呈现出访问热度不同的巨大差异。例如一个区块链系统不断地写入最新的区块,但通常情况下最近写入的区块访问频率会比很久之前的区块高很多。如果无论数据冷热情况,都采用同样的存储策略,是对存储资源的一种浪费。如何根据区块冷热程度对区块链存储系统进行优化是一个亟待解决的问题。对此,用到了纠删码技术。纠删码技术(Erasurecoding)简称EC,是一种编码容错技术。最早用于通信行业,数据传输中的数据恢复。它通过对数据进行分块等到数据块,然后计算出校验块,使得各个部分的数据产生关联性。当一部分数据块丢失时,可以通过剩余的数据块和校验块计算出丢失的数据块。
技术实现思路
本专利技术的目的是提供了一种基于纠删码的区块链分片存储与查询方法,随着区块的不断增长,区块存储面临很大压力。该方法将区块文件切片、编码然后存储在不同节点。读取区块时,可以基于索引,实现区块的恢复与读取。本专利技术是基于纠删码把区块进行分片存储,在拜占庭容错PBFT下,只要保证不超过三分之一的恶意节点就能达成共识。所以假设区块链系统中有n(n>3f)个节点,其中f个恶意节点。只需要把区块B分为(n-f)份和f份校验块。把这n份块平均分发到n个节点。在拜占庭容错下。假设最坏情况下,有f个恶意节点。所以在读区块时会收到恶意的块或者不发送的块,其总数目是f。根据纠删码特性。能从n-f个正确的块中恢复出正确的区块。假设区块文件大小为m,对于区块链全副本的存储,存储代价是m*n。对于利用纠删码存储,存储代价为1.5*m(f=(1/3)*n)。可见,利用纠删码节省了很大的存储开销。实现本专利技术目的的具体技术方案是:一种基于纠删码的区块链分片存储与查询方法,该方法包括以下具体步骤:步骤1:由主节点将冷数据的文件编号和分片元数据信息进行广播,来达成共识;具体包括:A1:主节点识别N到M之间数据为冷数据;A2:主节点将冷数据分片成数据块和校验块,保存每一块的Hash值;A3:设置分片元数据信息:分片文件编号、每个节点保存的数据块或校验块和对应的hash值;A4:主节点向区块链网络广播分片的元信息;A5:区块链网络执行PBFT,达成共识。步骤2:每个节点将区块文件分片生成数据块和校验块,依照共识内容保存一份对应的数据块或者校验块,并且持久化到磁盘,删除在先保存的区块文件;具体包括:B1:达成共识后,每个节点将区块N到M之间的区块文件切分成大小相同的数据块;B2:由数据块计算得出校验块;B3:每个节点保存共识元信息所分配的数据块或者校验块,存储到文件中;B4:删除N到M之间的区块文件。步骤3:建立索引;具体包括:C1:在区块文件分片时设置fileInfo,并将其维护在有序的向量中;C2:从存储fileInfo的vector中二分查找出当前存储区块文件id在有序的向量中的位置pos;C3:将fileInfo的指针插入向量中,位置为pos;C4:在hashmap中保存key为文件ID,value为fileInfo的指针的索引信息。步骤4:查询区块时,通过传入的blockID,查询索引,读取出区块对应的数据块和校验块;具体包括:D1:读取区块缓存,如果区块存在,返回查询结果,否则执行步骤D2;D2:读取文件索引,判断区块是否存在,如果存在执行步骤D3;D3:根据索引,节点返回数据块或校验块;D4:将返回的数据块和校验块解码恢复出区块文件;D5:更新区块缓存;D6:从区块文件中读取区块,返回区块数据。所述冷数据为:当区块高度M与上一次分片区块文件的最后一个区块的高度N的差值大于阈值T时,即N到M之间的区块文件视为冷数据。本专利技术的有益效果:区块热数据存储到冷数据的存储过程,都在基于纠删码的区块链上实现,保证了全流程完整追溯、信息不可篡改等特性,避免了传统存储方式存在的篡改、伪造、丢失及隐私泄露等诸多问题。同时,基于冷数据的分片存储,解决了当前区块链系统的痛点问题,即数据全副本存储给存储系统带来的巨大压力。对区块数据冷热情况,采用不同的存储策略,是对存储资源的一种节约。同时对于分片数据的查询,通过索引的实现,实现更快速的查询,保证了在节省存储空间的情况下,还能对区块数据高效的查询。附图说明图1为本专利技术实施例的流程图;图2为本专利技术实施例的区块分片存储流程图;图3为本专利技术实施例的分片区块的查询流程图。具体实施方式结合以下具体实施例和附图,对本专利技术作进一步的详细说明。实施本专利技术的过程、条件、实验方法等,除以下专门提及的内容之外,均为本领域的普遍知识和公知常识,本专利技术没有特别限制内容。实施例本实施例为一种基于纠删码的区块链分片存储与查询方法,对于纠删码模式下的文件,构成它的基本单位为块组。块组由一定数目的数据块加上生成的校验块放一起构成。以RS(6,3)为例,每一个块组包含1-6个数据块,以及3个校验块。进行编码的前提是每个块的长度一致。如果不一致,则应填充0。基于上面的块组类型,设计了如下索引:为每个存储节点维护一个索引fileInfo。由三部分组成,分别为range,fileID,filePosInfo。1:range:为一个结构体,当前分片file文件中blockID的起始值和结束值。2:fileID:为一个int型整数,当前分片file文件的ID。3:filePosInfo:为一个结构体,由三个部分组成,为int类型的block_file_id,file_offset,data_length;3.1:block_file_id:fileID3.2:file_offset:当前文件开始位置相对于文件开始位置的偏移。3.3:data_length:写人文件数据的长度。fileInfo维护在一个排序的vector中,以便于二分查找。并且在内存中维护一个hashmap,hashmap由fileID和指向fileInfo的指针组成。本实施例是在联盟链系统实施,如图1所示,系统中存在四个节点并且基于PBFT共识。在PBFT下,假定每两个节点之间都有可靠的通信管道连接,消息的最终投递状态完全取决于敌方(adversary),但是诚实节点之间的消息最终一定会被投递。在整个网络中的总节点数必须大于三分之一的敌方节点,也就是N≥3F+1。所以对于四个节点,最多容忍存在一个恶意节点,三个正常节点。如图2所示的流程,把一个区块文件分成三份(B1,B2,B3),和一个校验码(C1)。存在一个线程一直监听当前的区块本文档来自技高网...

【技术保护点】
1.一种基于纠删码的区块链分片存储与查询方法,其特征在于,该方法包括以下具体步骤:步骤1:由主节点将冷数据的文件编号和分片元数据信息进行广播,来达成共识;步骤2:每个节点将区块文件分片生成数据块和校验块,依照共识内容保存一份对应的数据块或者校验块,并且持久化到磁盘,删除在先保存的区块文件;步骤3:建立索引;步骤4:查询区块时,通过传入的blockID,查询索引,读取出区块对应的数据块和校验块。

【技术特征摘要】
1.一种基于纠删码的区块链分片存储与查询方法,其特征在于,该方法包括以下具体步骤:步骤1:由主节点将冷数据的文件编号和分片元数据信息进行广播,来达成共识;步骤2:每个节点将区块文件分片生成数据块和校验块,依照共识内容保存一份对应的数据块或者校验块,并且持久化到磁盘,删除在先保存的区块文件;步骤3:建立索引;步骤4:查询区块时,通过传入的blockID,查询索引,读取出区块对应的数据块和校验块。2.根据权利要求1所述的区块链分片存储与查询方法,其特征在于,步骤1所述冷数据为:当区块高度M与上一次分片区块文件的最后一个区块的高度N的差值大于阈值T时,即N到M之间的区块文件视为冷数据。3.根据权利要求1所述的区块链分片存储与查询方法,其特征在于,所述步骤1具体包括:步骤A1:主节点识别N到M之间数据为冷数据;步骤A2:主节点将冷数据分片成数据块和校验块,保存每一块的Hash值;步骤A3:设置分片元数据信息:分片文件编号、每个节点保存的数据块或校验块和对应的hash值;步骤A4:主节点向区块链网络广播分片的元信息;步骤A5:区块链网络执行PBFT,达成共识。4.根据权利要求1所述的区块链分片存储与查询方法,所述步骤2具体...

【专利技术属性】
技术研发人员:王润朱燕超张召金澈清
申请(专利权)人:华东师范大学
类型:发明
国别省市:上海,31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1