随着区块链网络节点数量和网络交易活动的增加,数据膨胀已经成为区块链不可避免的问题。从数据存储的角度来看,区块链属于一种特殊的分布式数据库,块数据写入由矿工广播到节点网络进行本地拷贝和存储。这个过程不是由一个统一的管理员来协调,而是最终通过协议来实现数据的一致性。随着新的交易活动的不断发生和积累,区块链网络的数据容量不断增加,与整个区块链网络同步的时间越来越长。例如,BTC目前的区块链数据容量已经达到TB级别,而之前在比特币网络上通过块扩展解决可扩展性的解决方案未能达成社区的共识。原因是随着块大小的增加,块信息的数据存储和通信问题会成为一个制约因素。
目前,区块链本身在分布式存储机制的设计上存在不足,因为区块链最初并不是基于比特币向高效、可扩展的方向设计的,其主要目标是转账的安全性。中本聪老师大概认为,人类在存储技术上的技术进步可以克服区块链在存储上的不足。
比特币之后,区块链项目组件的复杂程度不再是一个级别,尤其是在未来的物理场景中,数据结构和交互的复杂程度日益凸显。目前,许多项目选择链只存储哈希值,并将数据放在集中式数据库中。通过压缩数据来解决存储空间问题并非不可行,但并没有从根本上解决区块链数据访问效率低的问题。存储仍然是分散应用的一个缺点。随着IPFS区块链项目Filecoin的主要上线时间临近,区块链存储能否取得实质性的技术突破也将成为大家关心的话题。区块链的应用前景也可能因为存储效率的提高而提振市场的信心。
1.区块链vs分布式数据库
在深入区块链分布式存储项目之前,有必要梳理一下区块链与分布式数据库的区别,对区块链的存储机制有更深入的了解。区块链可以从去中心化数据的角度进行分析,但与现在的分布式数据库不同。
相似之处首先,我们来谈谈区块链和数据库的相似之处。我们谈论最多的是区块链共识机制,这是为了解决拜占庭问题。这是分布式系统设计中会涉及到的问题。在分布式数据库中,这被称为一致性控制。分布式数据库一般采用Raft、Paxos等主从算法,区块链将算法改进到PBFT、PoW、PoS、DPoS等协议。
存储机制、区块链和数据库一脉相承。数据库存储通常分为三类:日志存储、用户数据存储和索引存储。目前区块链的“账本”存储的是交易日志,用户数据存储不一定有,看项目而定。基于BTCUTXO结构的区块链,每个账户对应的BTC余额存储在内存哈希表(或者类似LevelDB/BerkeleyDB的KV数据库)中,没有外部数据存储模块。以太坊和Hyperledger也包含了存储状态的数据模块,无论是日志存储还是状态数据存储。目前,非关系数据库NoSQL的访问效率不如关系数据库。目前,基本上没有区块链项目支持用户数据的自定义索引(B树索引、位图索引、全文搜索)。
在不同点数据分布方面,分布式数据库可以采用冗余分段,即不是所有数据都复制到所有节点,区块链是冗余的,所有节点都保留一份副本。
在数据管理方面,分布式数据库由全局数据库管理系统控制,DBA(数据库管理员)拥有“生杀大权”;区块链由共识机制、分叉理论和最长链(PoW)原理共同控制,不需要DBA。如果有的节点更新数据成功,有的节点更新数据不成功,就会发生分叉,每个节点根据最长链原理更新自己的数据。
图。数据库vs区块链
在数据安全方面,分布式数据库有单点邪恶导致全球崩溃的可能,区块链单点邪恶不影响全局。
优势与融合数据库具有用户体验自主化、功能定制化的优势,在稳定性、事务速度、查询检索等方面优势突出。但也存在管理员集中、单点恶故障、安全问题等缺陷。区块链安全透明,但耗能大,缺乏可扩展性。两者都有最好的适应场景。数据库适用于需要不断更新数据的场合,如监控数据、实时金融市场信息、机密信息、在线数据处理等。区块链更适合货币交易、可信数据验证、Dapps和投票、价值转移。图片、视频等非结构化数据适合数据库存储,而区块链是结构化的哈希数据形式。区块链技术与数据库相结合的分布式存储数据库是技术发展的一个重要方向。
2.分布式存储IPFS
分布式存储要解决的问题是是否需要将所有数据存储在本地节点,如果是分布式的,是否会随着新节点的加入和退出而影响数据的完整性?目前,区块链存储效率低,成本极高,这就要求所有矿工保留一份自己的账本。这是非常不划算的,但这种设计的初衷是为了维护网络的稳定性,抵御拜占庭攻击。
星际文件系统IPFS提出使用IPFS文件系统存储数据,将唯一永久可用的IPFS地址哈希值写入区块链事务,数据本身不会放在区块链。目前,区块链还涉及跨链数据的互联互通。不同的区块链数据格式不同,这就很难协调。IPFS可以帮助不同的区块链网络传输信息和文件。通过在IPFS上定义不同的区块链数据结构,实现了通过IPFS存储智能合同代码。在以太坊交易中,只需要存储这个IPFS链接,EVM就可以解析IPFS的智能合约码。
什么是IPFS?
IPFS是一种新的基于内容寻址的分布式超媒体传输协议。IPFS支持创建完全分布式的应用程序。IPFS是一个分布式文件系统,它的目标是成为一个全球统一的存储系统。
IPFS项目通过整合现有技术(BitTorrent、DHT、Git和SFS)创建了一个对等超媒体协议,试图实现一个在互联网上永久可用、数据可以永久存储的全球文件存储系统。IPFS是一种协议,类似于目前的BT网络,但功能更强大。Filecoin是一个运行在IPFS上的激励层,这是一个基于区块链的分布式存储网络,它将云存储变成了一个Filecoin协议有两个交易市场,数据检索和数据存储,双方提交自己的要求并达成交易。IPFS和Filecoin相互促进,共同成长。IPFS/Filecoin将作为区块链的基础设施存在。
卡德姆利亚,IPFS技术的参考组合
DHT (DistributedHashTable)是一种分布式存储方式。DHT的原理是每个客户端在没有服务器的情况下存储少量数据,负责搜索某个区域,从而实现整个DHT网络的寻址和搜索。Kademlia是DHT的实现之一。在Kademlia网络中,所有的信息都以哈希表条目的形式存储,分散在各个节点上,从而在整个网络中形成一个庞大的分布式哈希表。这个哈希表就像一个字典:一旦我们知道了信息索引的键,就可以通过Kademlia协议查询其对应的值信息,而不管值信息存储在哪个节点上。
BitTorrent网络
IPFS主要借鉴了它的三个特点。首先,是负面上传者的惩罚措施;在BitTorrent中,客户端上传数据会奖励积分,长期不上传数据的负节点会扣分。如果分数低于某个限度,那么网络将拒绝为他们提供服务。其次,是文件可用性检查。BitTorrent优先共享稀缺文件,各客户端互补,种子不易失效,提高传输效率。
Git——MerkleDAG
当传输或修改大文件时,会遇到存储或传输压力大的问题。Git存储的时候会把文件拆分成几个部分,计算每个部分的哈希值。利用这些,构造出文件对应的有向无环图,DAG的根节点就是文件的hash。
知识点:MerkleDAG
MerkleDAG来自Git数据结构,类似于MerkleTree,但主要目的不是验证而是具有以下功能:
寻址:使用多个散列来唯一地标识数据块的内容。
防篡改:您可以轻松地检查哈希值,以确认数据是否被篡改。
重复数据删除:由于具有相同内容的数据块的散列是相同的,因此很容易删除重复数据并节省存储空间。
默克勒达格
梅克尔特里
SFS
自验证文件系统也是一个分布式文件系统。它将所有文件保存在同一个目录中,所有文件都可以在相对路径中找到。路径名是原始路径和公钥的散列。公钥的设计使得文件路径具有自己的身份隐式验证功能。
IPFS协议簇IPFS和HTTP都是基于TCP/IP的应用层协议。IPFS协议由七层组成:身份、网络、路由、交换、对象、文件和命名。
(1)身份层和路由层:对等身份信息的生成和路由规则由KADemlia协议制定。Kad协议的本质是建立一个分布式松散哈希表,简称DHT。每个加入这个DHT网络的人都要生成自己的身份信息,然后他就可以通过这个身份信息负责存储这个网络中的资源信息和其他成员的联系方式。就像微信名片分享一样,如果你要找人,在你无法直接搜索微信号的情况下,可以通过分享名片给有此人联系方式的朋友来建立联系。
(2)网络层:与核心相比,使用的LibP2P可以支持任何传输层协议。NAT技术使内部网络中的设备能够共享外部网络的相同IP。这是我们都经历过的家用路由器的原理。
(3)交换层:IPFS吸收了Bittorrent的信誉评分技术,自己开发了Bitswap模块,使用Bitswap分发和交换数据。用户分享数据会增加自己的信用评分,分享越多,信用评分越高。相反,如果用户只是下载数据并分享,那么信用评分就会越来越低,直到被其他节点忽略。这样的设计可以解决女巫攻击,信用分也不是机器刷就能提高的。一直在刷搜索请求,信用分越来越低。
(4)对象层和文件层:这两层管理着IPFS上80%的数据结构,大部分数据对象以MerkleDAG结构存在,便于内容寻址和去重。文件层是一种新的数据结构,与DAG并列,采用与Git相同的数据结构,支持版本快照。
(5)命名层:相当于http协议的地址解析dns,具有自验证的特性(当其他用户获取对象时,使用指纹公钥进行校验签名,即验证使用的公钥是否与NodeId匹配,验证用户发布的对象的真实性,同时获得变量状态)。
IPFS功能模块IPFS的开发团队ProtocalLabs采用高度集成的方式,像搭建积木一样开发整个项目。
Mutiformats是一系列哈希加密算法和自描述方法的集合(从值可以知道值是如何生成的)。它有SHA12565123B等六种主流的加密方法,对nodeID进行加密描述和指纹数据的生成。
LibP2P是IPFS的核心。面对各种传输层协议和复杂的网络设备,它可以帮助开发者快速建立一个可用的P2P网络层,既快速又节省成本,这
IPLD实际上是一个转换中间件,它将现有的异构数据结构统一成一种格式,便于不同系统之间的数据交换和互操作。现在IPLD支持的数据结构是比特币和以太坊的块数据。IPLD中间件可以将不同的块结构统一成一个标准进行传输。
Filecoin是IPFS的一个激励项目,看重的是这些应用的数据。通过类似比特币的激励政策和经济模式,可以让更多的人创建节点,让更多的人使用IPFS。
Filecoin项目
Filecoin是IPFS的激励层。IPFS网络需要稳定的运行,用户需要贡献自己的存储空间和网络带宽。如果没有合适的奖励机制,很难让网络在巨大的资源开销下长期运行。Filecoin将用于支付存储、检索和网络交易。与比特币类似,其代币总数上限为20亿,其中70%将通过在线挖矿奖励贡献给矿工,15%为团队自持代币,10%由投资者分享,其余5%作为Filecoin基金会持有。投资人和矿商获得的代币按区块分布,基金会和团队的代币按6年线性分布。
Filecoin使用复制证明。防复制主要是防止攻击矿工实际存储的数据小于声称存储的数据,让攻击矿工得到不该得到的回报。为了避免矿工的攻击,网络中的验证节点会随机检查矿工是否作弊。如果矿工不能提供副本,那么它将扣除一定数量的Filecoin作为惩罚。相比POW机制带来的动力竞争,PoRep要环保的多。
IPFS和Filecoin不是一回事。IPFS发现分布式互联网传输协议。其功能主要是数据的定位和分发,致力于成为Web3.0传输协议。Filecoin只是一个基于IPFS协议的应用项目,充当IPFS上的激励层。通过代币激励模式(矿工通过抵押代币来存储内容获得激励),在IPFS上建立了一个去中心化的存储市场,市场上还有很多其他基于IPFS的项目。Filecoin的协议栈基于区块链,包括数据层、共识层、契约层、激励层和应用层。两者的相似之处只是在p2p网络通信协议中使用libp2p模块作为底层协议。因此,IPFS的价值不一定等于Filecoin。
3.其他主要的分布式存储项目
爆裂(3359 www.burst-coin.org)爆裂项目于2014年8月10日在bitcointalk上线。创始人账号是“Burstcoin”。一年后,创始人“Burstcoin”像中本聪一样消失了。由于项目是开源的,部分社区成员于2016年1月11日重新继承了开源项目,并独立运营开发。
Burst是一种简单的存储证明机制,称为Proof-of-capacity,即在帮助公司采矿时,矿工使用未使用的硬盘驱动器空间,而不是处理器和显卡。矿工可以提前生成的大量数据称为“plot”,然后保存到硬盘上。存储的块数其实就是挖矿速度。对于每个区块,矿工浏览存储的图并计算时间,直到没有找到另一个区块,并且它有足够的能力挖掘一个区块。Plot只需要生成一次,这使得burst系统硬件和能量对计算机处理器单元(cpu)或显卡(gpu)来说更加友好,更容易实现。
http://sia.tech/SIA SIA是一个分散的云存储租赁项目,倾向于与P2P和企业领域现有的存储解决方案竞争。Sia采用POW(工作证明)和POS(储存证明)的混合共识。要使用Sia,数据存储空间提供商和租赁者之间必须签署协议。租房者需要提前购买大量的硬币来支付区块链。如果满足协议条款,将向提供商支付哪个令牌。如果没有按照预期完成协议,令牌将返还给租用者,存储的用户需要支付文件的上传、下载和存储费用。
Storj(https://storj.io/)Storj是一个基于区块链的去中心化分布式云存储系统。Storj鼓励用户分享自己剩余的空间和流量来获得块奖励,因为它充分利用了用户资源,成本极低,数据以冗余的端到端加密方式存储,更加安全可靠。
与Filecoin相比,Storj是基于ERC20的以太坊众筹货币,没有成熟的公链结构。它采用现收现付的方式,即租赁者经常向托管主机付费。如果用户消失或不在线,托管主机将不会得到支付。Storj更像是项目方匹配的共享存储经济,没有矿工产生的矿块概念。
Bluzelle(https://bluzelle.com/)Bluzelle是一种快速、廉价和可伸缩的分散数据库服务,在全世界的DApps中使用。它也成了区块链的“甲骨文”。Bluzelle想要构建的是根据数组、集合等的结构来存储那些通常很小且大小固定的数据字段。以结构化的方式,便于快速存储和检索。数据字段存储在数据库中,以实现最佳的安全性、性能和可扩展性,并提供创建、读取、更新和删除(CRUD)等基本功能,这不同于IPFS等主要针对大文件的分布式存储和分发解决方案。