来源:巴比特
编译:夕雨
本文作者Deeptiman Pattnaik是一名开拓工程师,从事各种软件开拓项目:Android,Go,Node.js,MongoDB,PHP,JavaScript Beacon,虚拟现实,增强现实。

在本文中,我将考试测验阐明Hyperledger Fabric中链下(OffChain)存储的主要性以及offchaindata运用,该运用是构建用于演示利用Hyperledger Fabric的Go编程措辞进行链下存储的实现。
链上(OnChain)和链下(OffChain)交易
任何区块链平台中的交易流都在两个不同的层中实行。涉及到区块链网络中的分布式分类帐的交易被视为链上交易,而在区块链外部实行并存储到任何凑集数据库(例如CouchDB,StateDB)中的交易被视为链下交易。
区块链不仅仅是存储办理方案
区块链技能的观点是存储大量数据,并能够为每个交易供应当前状态。区块链网络将为分布式账本数据中实行的任何变动掩护交易历史记录日志。这种技能将区块链与传统的数据库存储技能区分开来,传统的数据库存储技能仅设计为以有组织的办法存储数据。
链上交易问题
常日,链上交易须要更长的韶光才能实行完成。由于网络中等待实行的大量交易行列步队,区块链性能开始低落,并且花费的交易韶光更长。在区块链中的链上交易期间,业务和存储空间都涉及大量本钱。
链上存储打算
IBM已进行剖析以确定涉及存储空间的大量本钱。(来源:https://www.ibm.com/downloads/cas/RXOVXAPM)
事实成分
比特币每个区块存储1400笔交易。超级账本区块的大小为1 MB,每个区块有1000笔交易。每个区块链交易的大小为5 KB,可产生205 TPS(每秒的交易数)每TPS的存储量打算通过比较公司每天均匀事情8小时和每年240天的均匀韶光来进行交易打算。
(1 TPS / 1000 TB) 1024 KB 3500秒/小时 8小时/天 240天/年 = 每年每笔交易的数据为7,077,888 KB=6,912 MB = 6.75 GB = 0.00659 TB /交易/年区块链的链上财务本钱
IBM还供应了超级账本(Hyperledger)和以太坊等非授权区块链的均匀企业级本钱。
IBM Hyperledger的每月用度为$ 1000,每个活动节点的额外用度为$ 1000,因此每月总用度为$ 6000。
每笔交易的本钱是:比特币为1.30美元,以太坊每笔交易为0.25美元。
在非容许式区块链中,每次交易本钱将根据加密货币确当前代价而变革。
Hyperledger等基于权限的区块链的本钱将随着节点数量的增加而变革。
因此,与交易成本相比,不应将所有非交易数据(例如图片,视频,PDF和其他文档)存储在区块链分类账中。
链下交易办理方案
链下交易不会在存储空间中为每个节点存储交易。 乐意存储特定交易的一方可以利用链下存储。 链下交易提高了打算效率,这种打算是在链下实行的,是确定性的而非共识的。
链下存储的设计实现
有许多链下数据库可与Hyperledger Fabric集成以存储交易明细。 我构建的offchaindata运用利用CouchDB作为链下存储。 将运行一个GRPC事宜侦听器,该侦听器作为GRPC客户端连接侦听对等方。
因此,事宜侦听器将每个区块的KVWriteSet值处理到链下存储区(CouchDB)中。 MapReduce技能用于从CouchDB存储中查询链下数据。
GitHub:https://github.com/Deeptiman/offchaindata
什么是MapReduce?
MapReduce是一种编程模型,旨在在大型集群上并行处理大量数据。
MapReduce有两个功能:
映射——它供应了某些文档凑集的密钥值对列表。减少——它具有一组较小的密钥值对,可处理凑集中的多个节点。CouchDB利用MapReduce技能来过滤所有网络文档。 不才面的示例中,我们将看到MapReduce如何用于一种User模型。
User模型
CouchDB中的文档网络
存储在CouchDB中的用户详细信息
因此,我们将创建一个MapReduce函数来查询凑集中的电子邮件。
为电子邮件配置MapReduce
输出:
利用参数
设计视图:emailviewdesign
MapReduce视图:
查询减少功能可打算电子邮件总数
输出
查询舆图功能列出所有电子邮件
输出
因此,MapReduce以这种办法事情。 我们还可以为其他节点创建MapReduce函数,以从CouchDB查询
结论
所有查询都在链下存储空间中实行,并且完备忽略了链上分类帐。 就查询大量数据而言,这提高了打算效率。 实行链下查询不涉及交易本钱,由于类似的链上查询具有较高的交易本钱。 在公有区块链的情形下,链下存储还可以用于存储敏感的私有数据,由于并非区块链网络中的所有参与者都知道用于存储数据的附加独立存储层。
因此,这是理解任何区块链网络中链下存储的主要用例的概述。 请检讨Github上的链下数据运用程序并分享您的反馈。