可以从区块链中删除旧块数据吗?

时间:2019-04-08 03:54:13

标签: hyperledger-fabric blockchain

只是一个普遍的问题,如果我要为业务构建区块链,我想存储3年的交易,但是任何比我更需要的交易都不需要,也不想在工作数据库中积极进行。有没有办法备份和清除区块链或删除超过某个时间范围的项目?我对事件逻辑比对永久性存储器更感兴趣。

3 个答案:

答案 0 :(得分:1)

我还不知道任何能够实现此功能的区块链技术,但是Hyperledger Fabric尤其计划支持数据存档(检查点)。简而言之,参与者需要就区块高度达成共识,以便可以丢弃较旧的区块。然后,这个新区块成为信任的来源,类似于原始的创世区块。此外,还需要获取并同意快照,以捕获当前状态。

从可维护性的角度来看,它稍微复杂一些,即,您可能在快照时出现节点故障等情况。

答案 1 :(得分:0)

如果您只是想在一段时间后清除数据,Fabric Private Data可以满足您的需求。

  

blockToLive表示数据在以下位置的私有数据库上应保留的时间:   条款。数据将以指定的数量存在   私有数据库上的块,然后将其清除,   使该数据从网络上过时,以至于   从链码中查询,无法用于请求   同行

您可以阅读更多here

就我个人而言,我认为没有办法从链条中删除一个区块。可能会破坏区块链的不可变属性。

答案 2 :(得分:0)

有2个概念可以帮助您实现目标。

已经提到了一件事。它与私有数据有关。私人数据使您可以“标记”带有生存时间的数据。然后,只有私有数据哈希存储在链上(以便能够验证此事务),但是数据本身存储在所谓的SideDB中,并被完全修剪(当然,链上的哈希除外)。这是使用没有解决方法的Fabric并实现GDPR的基础。

尚未提及的另一件事对这个问题很有帮助

  

是否有办法备份和清除区块链或删除早于某个时间范围的项目?

每个对等方仅将分类帐的“当前状态”存储在其StateDB中。当前状态可以描述为标记为“活动”的数据,并且可能很快会再次使用。您可以认为StateDB就像一个缓存。通过创建或更新新密钥(调用),每个数据都将进入此缓存。要从缓存中删除密钥,可以使用“ DelState”。因此,它被标记为“已删除”,不再存在于缓存中。但是它仍然在分类帐上!您可以检索该键的历史记录和数据。

结论:对于“真正”的数据删除,您必须使用私有数据的概念,并且要在StateDB中管理数据(以“ Cache”为类推),您可以简单地使用内置函数。