CN109871366B - 一种基于纠删码的区块链分片存储与查询方法 - Google Patents
一种基于纠删码的区块链分片存储与查询方法 Download PDFInfo
- Publication number
- CN109871366B CN109871366B CN201910042476.4A CN201910042476A CN109871366B CN 109871366 B CN109871366 B CN 109871366B CN 201910042476 A CN201910042476 A CN 201910042476A CN 109871366 B CN109871366 B CN 109871366B
- Authority
- CN
- China
- Prior art keywords
- block
- data
- file
- check
- blocks
- 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
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于纠删码的区块链分片存储与查询方法,当区块存储到达一定阈值时,将区块进行分片存储。首先将区块文件分片的元信息进行共识,达成共识后利用纠删码将阈值内的区块文件进行分片形成数据块和校验块,每个节点存储其中的一部分,从而减小了存储代价,同时也实现了拜占庭容错下的数据的容错。此外,在区块文件分片时,建立对应的索引,利用索引,可以从各个节点查询出对应的数据块或者校验块,保证了在节省存储空间的情况下,还能对区块数据进行高效的查询。
Description
技术领域
本发明属于区块链领域,涉及一种面向区块链的基于纠删码解决全副本存储的问题,将区块文件进行分片存储,不需要全副本存储并保证数据的容错,方便的将数据进行查询。
背景技术
区块链作为一种分布式账本技术,已被各种应用程序采用,以实现多个参与者之间的信任连接,它能够以可验证的,永久的方式有效记录双方之间的交易,如国际结算、安全交易结算、食品配料的可追溯性等。为了确保不变性,每个块都与前一个块的哈希、时间戳和该块的Merkle哈希根的信息相关联。共识协议用于确保每个参与者记录的数据的一致性。
但是目前区块链系统存在两个比较严重的问题:
目前大多数区块链系统将区块数据存储在文件中,但由于区块链数据是全副本的属性,区块存储面临很大的压力。
随着区块数量的不断增长积累,数据也会呈现出访问热度不同的巨大差异。例如一个区块链系统不断地写入最新的区块,但通常情况下最近写入的区块访问频率会比很久之前的区块高很多。如果无论数据冷热情况,都采用同样的存储策略,是对存储资源的一种浪费。如何根据区块冷热程度对区块链存储系统进行优化是一个亟待解决的问题。
对此,用到了纠删码技术。纠删码技术(Erasure coding)简称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:fileID
3.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)。
存在一个线程一直监听当前的区块高度M,并保存着上一次分片存储的区块高度N,则认为M-N>T(T为设置的阈值)时,N到M之前的区块即为冷数据将其进行分片存储。proposer向区块链中网络发送pre-prepare元数据消息,元数据包括需要分片的blockfileID,每个节点存储的分片和对应的hash。达成共识后,每个节点根据metadata信息,将blockfile分片,存储对应的部分,并将原始的blockfile文件删除。同时需要保存两种索引信息,第一种索引是元数据metadata,其保存在以blockfileID为key,value为metadata的hashmap中。
第二种索引的建立步骤如下:
1:在区块文件分片时设置fileInfo。
·设置fileInfo中blockID的范围。
·设置fileID。
·设置filePosInfo。
2:从存储fileInfo的vector中二分查找出当前存储区块文件id在有序的vector中的位置pos。
3:将fileInfo的指针插入vector中,位置为pos。
4:hashmap中保存key为文件ID,value为fileInfo的指针。
如图3所示,是查询的过程:
需要查询的节点根据blockID,首先读取区块缓存,如果存在于缓存中则返回区块数据,如果不存在则读取第一种索引,获取区块号对应的数据块,从其他节点获取所有的数据块并做hash校验,如果可以匹配上,恢复原始数据。如果匹配不上,从其他节点获取校验块,恢复原始数据。至此查询成功。
具体查询如下所示:
查询第二种索引的步骤如下:
1:通过区块ID查询到其所在文件。传入blockID在vector<fileInfo>中利用二分查找找到ID所在的位置pos。从而获取所在的文件ID。
2;利用区块文件ID去查找hashmap获取fileInfo。通过fileInfo读取文件。
本发明的保护内容不局限于以上实施例。在不背离发明构思的精神和范围下,本领域技术人员能够想到的变化和优点都被包括在本发明中,并且以所附的权利要求书为保护范围。
Claims (1)
1.一种基于纠删码的区块链分片存储与查询方法,其特征在于,该方法包括以下具体步骤:
步骤1:由主节点将冷数据的文件编号和分片元数据信息进行广播,来达成PBFT共识;所述冷数据为:当区块高度M与上一次分片区块文件的最后一个区块的高度N的差值大于阈值T时,即N到M之间的区块文件视为冷数据;所述步骤1具体包括:
步骤A1:主节点识别N到M之间数据为冷数据;
步骤A2:主节点将冷数据分片成数据块和校验块,保存每一块的Hash值;
步骤A3:设置分片元数据信息:分片文件编号、每个节点保存的数据块或校验块和对应的hash值;
步骤A4:主节点向区块链网络广播分片的元信息;
步骤A5:区块链网络执行PBFT,达成共识;
步骤2:每个节点将区块文件分片生成的(n-f)份数据块和f份校验块,依照共识内容保存一份对应的数据块或者校验块,并且持久化到磁盘,删除在先保存的区块文件;所述步骤2具体包括:
步骤B1:达成共识后,根据PBFT共识协议,存在n个节点,恶意节点不超过f个,且n>3f,至少有(n-f)个诚实节点提供正确的数据,每个节点将区块N到M之间的区块文件切分成(n-f)份大小相同的数据块;
步骤B2:由数据块计算得出f份校验块;
步骤B3:每个节点根据元数据metadata信息保存对应的共识元信息所分配的数据块或者校验块,存储到文件中;
步骤B4:删除N到M之间的区块文件;
步骤3:建立索引;所述步骤3具体包括:
步骤C1:在区块文件分片时设置fileInfo,并将其维护在有序的向量中;
步骤C2:从存储fileInfo的vector中二分查找出当前存储区块文件ID在有序的向量中的位置pos;
步骤C3:将fileInfo的指针插入向量中,位置为pos;
步骤C4:在hashmap中保存key为文件ID,value为fileInfo的指针的索引信息;
步骤4:查询区块时,通过传入的区块ID,查询索引,读取出区块对应的数据块和校验块;所述步骤4具体包括:
步骤D1:读取区块缓存,如果区块缓存中存在,返回查询结果,否则执行步骤D2;
步骤D2:读取文件索引,判断区块是否存在,如果存在执行步骤D3;
步骤D3:根据索引,请求原始区块的(n-f)数据块,根据区块hash是否匹配验证数据块正确性,若匹配,则节点返回数据块或校验块;
步骤D4:将返回的数据块和校验块解码恢复出区块文件;
步骤D5:若区块hash不匹配,则从其他节点获取校验块,根据校验块和数据块进行解码;
步骤D6:从区块文件中读取区块,返回区块数据,恢复原始数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910042476.4A CN109871366B (zh) | 2019-01-17 | 2019-01-17 | 一种基于纠删码的区块链分片存储与查询方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910042476.4A CN109871366B (zh) | 2019-01-17 | 2019-01-17 | 一种基于纠删码的区块链分片存储与查询方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109871366A CN109871366A (zh) | 2019-06-11 |
CN109871366B true CN109871366B (zh) | 2021-09-10 |
Family
ID=66917791
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910042476.4A Active CN109871366B (zh) | 2019-01-17 | 2019-01-17 | 一种基于纠删码的区块链分片存储与查询方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109871366B (zh) |
Families Citing this family (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110399373B (zh) * | 2019-06-26 | 2024-02-02 | 杭州慧牧科技有限公司 | 一种区块链账本存储系统、存储查询方法及删除方法 |
CN110442644A (zh) * | 2019-07-08 | 2019-11-12 | 深圳壹账通智能科技有限公司 | 区块链数据归档存储方法、装置、计算机设备和存储介质 |
EP3791538B1 (en) | 2019-08-01 | 2023-04-12 | Advanced New Technologies Co., Ltd. | Shared blockchain data storage based on error correction code |
WO2019228550A2 (en) | 2019-08-20 | 2019-12-05 | Alibaba Group Holding Limited | Blockchain data storage based on shared nodes and error correction code |
EP3682342B1 (en) | 2019-09-11 | 2021-08-18 | Advanced New Technologies Co., Ltd. | Shared blockchain data storage based on error correction coding in trusted execution environments |
WO2019228562A2 (en) | 2019-09-11 | 2019-12-05 | Alibaba Group Holding Limited | Shared blockchain data storage based on error correction coding in trusted execution environments |
SG11202010203QA (en) | 2019-10-15 | 2020-11-27 | Alipay Hangzhou Inf Tech Co Ltd | Indexing and recovering encoded blockchain data |
KR102363271B1 (ko) * | 2019-11-06 | 2022-02-14 | 알리페이 (항저우) 인포메이션 테크놀로지 씨오., 엘티디. | 에러 정정 코드에 기초한 공유 블록체인 데이터 저장의 데이터 보안 |
CN111406252B (zh) * | 2019-11-06 | 2022-04-15 | 支付宝(杭州)信息技术有限公司 | 基于纠错码的共享区块链数据存储的共识 |
AU2019321745B2 (en) * | 2019-11-06 | 2022-01-27 | Alipay (Hangzhou) Information Technology Co., Ltd. | Prioritizing shared blockchain data storage |
CN113826354A (zh) | 2019-11-13 | 2021-12-21 | 支付宝(杭州)信息技术有限公司 | 基于纠错码的区块链数据存储 |
WO2020035093A2 (en) | 2019-11-13 | 2020-02-20 | Alipay (Hangzhou) Information Technology Co., Ltd. | Dynamic blockchain data storage based on error correction code |
CN111428275B (zh) * | 2020-03-13 | 2021-03-26 | 华东师范大学 | 一种面向联盟链的服务不停机分片增加方法 |
CN111444042B (zh) * | 2020-03-24 | 2023-10-27 | 哈尔滨工程大学 | 一种基于纠删码的区块链数据存储方法 |
CN111818124B (zh) * | 2020-05-29 | 2022-09-02 | 平安科技(深圳)有限公司 | 数据存储方法、装置、电子设备及介质 |
CN111858771A (zh) * | 2020-07-30 | 2020-10-30 | 杭州复杂美科技有限公司 | 分布式数据存储方法、设备和存储介质 |
CN112231394B (zh) * | 2020-09-11 | 2022-10-14 | 南京邮电大学 | 一种面向区块链分片存储策略的区块数据分配方法 |
CN112835743B (zh) * | 2021-01-25 | 2023-12-19 | 中央财经大学 | 分布式账本数据存储优化方法、装置、电子设备及介质 |
CN113518113B (zh) * | 2021-05-11 | 2022-10-28 | 深圳前海移联科技有限公司 | 一种基于区块链和里德-所罗门码的文件存储方法、计算机设备及存储介质 |
CN113608670B (zh) * | 2021-05-25 | 2023-10-27 | 武汉理工大学 | 基于公平性和访问热度的区块链数据存储方法 |
CN113761071B (zh) * | 2021-10-09 | 2023-07-11 | 支付宝(杭州)信息技术有限公司 | 一种共识方法、区块链系统和共识节点 |
CN114331395A (zh) * | 2021-12-22 | 2022-04-12 | 南京航空航天大学 | 一种基于纠删码的区块链数据分组存储优化结构及方法 |
CN114780987B (zh) * | 2021-12-29 | 2023-08-29 | 张海滨 | 数据分发、存储、读取、传输方法及分布式系统 |
CN114723444A (zh) * | 2022-01-21 | 2022-07-08 | 佛山赛思禅科技有限公司 | 一种用于并行投票共识的数据分片方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103561057A (zh) * | 2013-10-15 | 2014-02-05 | 深圳清华大学研究院 | 基于分布式哈希表和纠删码的数据存储方法 |
CN104965845A (zh) * | 2014-12-30 | 2015-10-07 | 浙江大华技术股份有限公司 | 一种小文件的定位方法及系统 |
US20180139278A1 (en) * | 2016-11-14 | 2018-05-17 | International Business Machines Corporation | Decentralized immutable storage blockchain configuration |
CN109194466A (zh) * | 2018-10-29 | 2019-01-11 | 南开大学 | 一种基于区块链的云端数据完整性检测方法及系统 |
-
2019
- 2019-01-17 CN CN201910042476.4A patent/CN109871366B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103561057A (zh) * | 2013-10-15 | 2014-02-05 | 深圳清华大学研究院 | 基于分布式哈希表和纠删码的数据存储方法 |
CN104965845A (zh) * | 2014-12-30 | 2015-10-07 | 浙江大华技术股份有限公司 | 一种小文件的定位方法及系统 |
US20180139278A1 (en) * | 2016-11-14 | 2018-05-17 | International Business Machines Corporation | Decentralized immutable storage blockchain configuration |
CN109194466A (zh) * | 2018-10-29 | 2019-01-11 | 南开大学 | 一种基于区块链的云端数据完整性检测方法及系统 |
Non-Patent Citations (1)
Title |
---|
Erasure code-based low storage blockchain node;Doriane Perard 等;《arXiv:Cryptography and Security》;20180523;第2页-第9页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109871366A (zh) | 2019-06-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109871366B (zh) | 一种基于纠删码的区块链分片存储与查询方法 | |
US11016859B2 (en) | De-duplication systems and methods for application-specific data | |
CN101989929B (zh) | 容灾数据备份的方法及系统 | |
US7805416B1 (en) | File system query and method of use | |
US9344112B2 (en) | Sampling based elimination of duplicate data | |
US7457800B2 (en) | Storage system for randomly named blocks of data | |
KR20190067158A (ko) | 블록체인 블록 데이터의 아카이빙 방법, 장치 및 조회 방법, 장치 | |
CN106202173B (zh) | 一种文件仓库存储的智能排重方法及系统 | |
US11385830B2 (en) | Data storage method, apparatus and system, and server, control node and medium | |
CN102629247B (zh) | 一种数据处理方法、装置和系统 | |
EP3847602A1 (en) | Secure and transparent pruning for blockchains | |
US20070124415A1 (en) | Method and apparatus for reducing network traffic over low bandwidth links | |
US8135763B1 (en) | Apparatus and method for maintaining a file system index | |
AU2005284737A1 (en) | Systems and methods for searching and storage of data | |
US9002800B1 (en) | Archive and backup virtualization | |
CN105069111A (zh) | 云存储中基于相似性的数据块级数据去重方法 | |
CN111373693A (zh) | 索引和恢复编码的区块链数据 | |
CN105447168A (zh) | Mp4格式的碎片文件恢复与重组的方法 | |
US9940069B1 (en) | Paging cache for storage system | |
US7949630B1 (en) | Storage of data addresses with hashes in backup systems | |
US20160139996A1 (en) | Methods for providing unified storage for backup and disaster recovery and devices thereof | |
CN103841144A (zh) | 云存储系统、方法、用户端及云存储服务器 | |
CN101174294B (zh) | 一种基于版本增量备份的软件保护方法 | |
CN113806803B (zh) | 一种数据存储方法、系统、终端设备及存储介质 | |
CN114723444A (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 |