区块链 存储可扩展方法 链上链下
Posted 软件工程小施同学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区块链 存储可扩展方法 链上链下相关的知识,希望对你有一定的参考价值。
区块链网络本质上是一个P2P网络,区块在矿工节点计算出正确的nonce值后,由矿工节点广播至整个区块链网络,其余节点收到区块验证通过后将新区块链接至自己存储的区块链之后。区块链系统通过高冗余存储机制保证区块链数据安全,现在或未来都将可能遇到存储可扩展性问题。
扩容方法
链下扩容
链下存储,如下图所示,区块体中数据内容从原区块体转移到链下存储系统,区块体中仅存储指向这些数据的“指针”和其他非数据信息,以解决区块链存储可扩展性问题。
1、基于DHT的链下存储
基于DHT的链下存储,如下图所示,原始数据经SHA-256计算后的散列值保存在区块链中,原始数据则保存在链下的DHT中,DHT由与区块链网络无关的节点维护,履行经区块链网络批准的读写操作,数据在DHT网络中的节点位置足够随机来确保高可用率。
2基于IPFS的链下存储
星际文件系统(inter planetary file system,IPFS)将所有计算设备与相同文件系统连接起来的点对点分布式文件系统,文件存储到IPFS会得到一个IPFS hash,IPFS hash可以作为访问文件的索引,同时检验文件内容是否被篡改,区块中只保存IPFS hash是目前链下存储中使用较多的一种方案。
3基于DHT和IPFS的链下存储
基于DHT和IPFS的链下存储,如下图所示,区块链中存储数据文件的元数据信息以管理身份和访问控制,数据文件的引用存储在链下的DHT中,而数据文件本身则存储在IPFS中。
4基于云的链下存储
基于云的链下存储方案一种是把实际数据存储到云端,数据的散列值保存在区块链中解决区块链的存储扩展性问题;另一种是将最近一段时期的数据存储在区块链中,历史数据存储到云上。存储在云上的历史数据中最新区块的散列值将被保存至区块链中实现数据一致性。
链上扩容
1协作式存储
节点协作指若干个不同的节点进行合作具有与“全节点”一样的功能,根据使用技术的不同可分为基于编码的协作式存储、基于集群的协作式存储和基于分片的协作式存储。
基于编码的协作式存储
(1)网络编码方式。网络编码将编码和路由信息交换,对接收的多个数据包进行编码信息融合提高单次传输的信息量。
网络编码存储有两种实现方式:
- 码率确定时,将大小为x的区块切分成k个包对其进行Reed-Solomn编码得到n个编码包存放至n个节点中,若仍有节点未保存重复上述操作直至区块链网络中所有节点均保存一个编码包,如下图所示;
- 码率非确定时,采用二进制域随机偏移编码将数据包右移随机位的比特然后按位的方式组合,以第一种方式发至区块链网络。
(2)纠删码方式。区块切分成k个片段,使用伪随机数生成器生成系数对原始片段进行线性组合生成编码片段并发送至节点。当节点需要恢复区块时,从其他节点下载超过k个编码片段进行逆线性变换,恢复原始区块。当有新节点加入区块链网络时,从全节点或者节点处下载完整区块链对每个区块进行验证生成编码片段,新节点将完整的区块删除,同时保留区块哈希和编码片段。
基于集群的协作式存储
一种方案是将区块链网络中的节点划分成若干个DHT集群,一个集群中若干个节点共同维护一份完整的区块链数据,DHT集群中的一个节点保存完整区块链副本中区块数据的一部分和区块链状态。
另外一种方案是将节点分类,在纯P2P网络中挖矿为挖矿节点,DHT网络中验证新交易和新区块以及保存区块链数据为数据节点。产生新交易后广播至节点所在DHT集群与其他集群,所有数据节点对交易验证有效后广播至P2P网络中,挖矿节点收集交易直至挖出新区块,将新生成的区块广播至该集群,集群节点对区块进行验证添加至区块链中。
基于分片的协作式存储
一种方案是将区块链网络划分为根链网络和分片网络,市场激励机制动态地调整根链网络和区块链网络中的哈希算力使其均匀分布在不同分片中,节点属于根链网络和分片网络,自主选择加入收益较高的分片,根链网络负责验证一段时间内的分片区块并生成根区块,保存完整的分片区块和根区块。
此外还有基于域的静态分片,将区块链网络分为区域分片和全局分片,如下图所示,区域分片内存在由PoW决定的委员会并动态调整,委员会内节点通过PBFT验证交易并生成区块,全局分片委员会由PoW决定,委员会通过PBFT验证交易通过后传输到相关区域分片中,区域分片内的节点负责生成区块并保存至区域区块链中。
2轻节点
全节点是一种存储完整账本、需要同步所有区块链数据、能够独立校验区块链上的所有交易并实时更新区块链的节点。轻节点是一种不需要存储完整账本,每当有新区块出现时,只需要下载区块头的节点类型。
SPV协议(simple payment verification protocol)
SPV协议是最早的轻节点协议,不运行全节点也可验证支付,用户只需要保存所有的区块头,如下图所示,SPV轻节点从区块链网络中下载所有区块的区块头不存储区块链中区块的区块体,不能独立验证交易,需依赖于全节点。
EPBC协议
公有链客户端协议EPBC不需存储所有区块的区块头,只需存储一个定长的与区块链账本的大小无关数据,无需参与挖矿的过程,在每个区块的区块头中添加一个对当前区块链的总结S,轻节点随机选取一些区块,并与这些节点交互以验证的有效性,最后选取由最多节点返回的作为区块链总结。
SCC协议(storage compression consensus)
存储压缩协议SCC是基于PBFT的改进协议,节点加入时通知存储系数以便其他节点验证存储能力,存储最小节点作为一轮SCC中领导者,通过Merkle树生成由区块链中所有区块组成的压缩块,压缩块中存储最新区块的hash,最新区块中存储压缩块的hash,如下图所示,区块通过验证后节点根据自身情况进行存储,将之前的区块全部移除。
面临的挑战
1. 应用场景
链下的存储系统适合由负责非公有链的中心化机构或联盟以及非公有链的节点来维护。链上存储适合节点众多的公有链、联盟链场景。轻节点模式适合存储容量小的智能设备,如手机、PC以及传感器等。
2. 安全性
链下存储模式安全问题解决方案是全部或部分区块链节点维护链下存储系统,增加区块链节点负担。对于协作式存储,需要确保区域中即使存在恶意节点,也不会影响区域内节点的协作或区域间的协作。
3. 效率
在链下存储模式中,节点需要花费额外的通信成本从链下的存储系统获取区块链数据。对于链上存储模式,当节点需要完整的区块链账本时,向区块链网络中的节点或区域内的节点请求自己没有存储的账本部分。
未来研究方向
1. 可节省存储空间的共识机制
未来可从区块链基础架构模型共识层入手,研究可节省存储空间共识机制,节点共识过程中考虑如何协作存储区块数据,解决区块链存储膨胀问题。
2. 与初始节点数量相关的动态区域划分方法
未来可从区块链节点数量与通信成本和存储成本之间的关系来加以思考,实现访问本地和区域内其他节点的区块链数据所花费的时间之和最优。
3. 存储定长数据的轻节点模式
轻节点协议存储的数据大小与完整区块链账本大小之间大致呈线性关系,未来依然会遇到存储瓶颈,存储定长数据的轻节点模型是一个值得研究的方向。
4. 不同存储模式下的安全机制
未来可研究基于属性加密、代理重加密、同态加密或零知识证明等技术的安全机制,提高链下及链上存储模式的整体安全性。
公众哈:微程序学堂
以上是关于区块链 存储可扩展方法 链上链下的主要内容,如果未能解决你的问题,请参考以下文章