首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

区块链是如何存储大型数据的

众所周知区块链的中的每一个区块的大小只有几MB,比特币的一些分叉币,有的只是增加了区块的存储大小而已。区块的大小体现能存储数据包的大小,然而随着链上的数据传输越来越多,会导致区块数量快速增加,可能造成交易堵塞,全节点存储整个区块的数据需要巨大的存储空间。一般的公链设计都会采用梅克尔树(Merkle Tree)的解决方案,即IPFS分布式存储与特定区块链整合的方式,是新型的、能被广泛应用的数据保存解决方案。在公链的区块中存储梅克尔树根,保证数据一旦写入智能合约即不可被篡改,区块也保留所有梅克尔树根的完整历史,以确保在梅克尔树更新时没有数据消失或被篡改。

以太坊为例,一个区块包含:1,区块头;2,关于包含在此区块中交易集的信息;3,与当前块的ommers相关的一系列其他区块头。

其中区块头是一个区块的一部分,包含了:

1. parentHash:父区块头的Hash值(这也是使得区块变成区块链的原因)

2. ommerHash:当前区块ommers列表的Hash值

3. beneficiary:接收挖此区块费用的账户地址

4. stateRoot:状态树根节点的Hash值

5. transactionsRoot:包含此区块所列的所有交易的树的根节点Hash值

6. receiptsRoot:包含此区块所列的所有交易收据的树的根节点Hash值

//等等

关键在于头部存储了根节点的HASH值,下文我们来讲解下梅克尔树,以及根节点的HASH值的用处。

Merkle Tree概念

Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储hash值的一棵树。Merkle树的叶子是数据块(例如,文件或者文件的集合,一些比较大的数据)的hash值。非叶节点是其对应子节点串联字符串的hash。

1,Hash是一个把任意长度的数据映射成固定长度数据的函数。例如,对于数据完整性校验,最简单的方法是对整个数据做Hash运算得到固定长度的Hash值,然后把得到的Hash值公布在网上,这样用户下载到数据之后,对数据再次进行Hash运算,比较运算结果和网上公布的Hash值进行比较,如果两个Hash值相等,说明下载的数据没有损坏。可以这样做是因为输入数据的稍微改变就会引起Hash运算结果的面目全非,而且根据Hash值反推原始输入数据的特征是困难的。

如果从一个稳定的服务器进行下载,采用单一Hash是可取的。但如果数据源不稳定,一旦数据损坏,就需要重新下载,这种下载的效率是很低的。

2,Hash List 在点对点网络中作数据传输的时候,会同时从多个机器上下载数据,而且很多机器可以认为是不稳定或者不可信的。为了校验数据的完整性,更好的办法是把大的文件分割成小的数据块(例如,把分割成2K为单位的数据块)。这样的好处是,如果小块数据在传输过程中损坏了,那么只要重新下载这一快数据就行了,不用重新下载整个文件。怎么确定小的数据块没有损坏哪?只需要为每个数据块做Hash。BT下载的时候,在下载到真正数据之前,我们会先下载一个Hash列表。那么问题又来了,怎么确定这个Hash列表本事是正确的哪?答案是把每个小块数据的Hash值拼到一起,然后对这个长字符串在作一次Hash运算,这样就得到Hash列表的根Hash(Top Hash or Root Hash)。下载数据的时候,首先从可信的数据源得到正确的根Hash,就可以用它来校验Hash列表了,然后通过校验后的Hash列表校验数据块。

现在众多项目自称是基于区块链的,因为区块的数据大小,格式受限,其实是一些重要的信息,如账户信息,交易信息等放在区块里,其他的程序还是需要中心化的服务器执行,还有一些自身的需要存储的大数据,只是把其中的根节点HASH值,存入区块链。就好比一个API链接在以太坊的网络上,执行一些简单的智能合约(小程序)。大部分的的项目基于区块链是如下的一个思路,将需要用到区块链的部分抽离出来,逻辑上分成应用系统和区块链系统,用公链(如以太坊)实现区块链的功能,优点如下:

1,应用系统,区块链系统分类,最大程度的用原有中心化服务器系统。

2,利用公有区块链的网络安全强大,不可篡改等特性保证区块链功能。

基于以太坊的应用场景解决方案,一些大量数据可以做如下操作:

1,在以太坊智能合约中维护自身区块链的头部信息; -〉网络安全、防篡改

2,自身区块链区块内容放在二级存储(安全的企业存储环境中);-〉自身信息隐私保护,省钱

3,对于历史头信息进行剪裁;-〉省钱

4,关联以太坊地址和自身身份;-〉不可抵赖

加下方微信,进群一起学习

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180910G1J9N800?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券