这只是一个一般性的问题,如果我正在为一家企业构建区块链,我希望存储3年的事务,但任何比这更早的事务都不需要,也不想在工作数据库中活跃。有没有一种方法可以备份和清除区块链,或者删除超过某个时间范围的项目?我更感兴趣的是事件逻辑而不是永远的记忆。
发布于 2019-04-08 12:55:19
我还不知道有任何区块链技术能够做到这一点,但Hyperledger Fabric尤其计划支持数据存档(检查点)。简单地说,参与者需要就积木高度达成一致,以便可以丢弃较旧的积木。然后,这个新的区块成为信任的来源,类似于原始的genesis区块。此外,还需要拍摄并同意快照,以捕获当前状态。
从可维护性的角度来看,它稍微复杂一些,例如,你可能有一些节点在快照时关闭了,等等。
发布于 2019-04-08 14:49:42
如果您只想在一段时间后清除数据,Fabric Private data有一个可以满足您需求的选项。
blockToLive以数据块为单位表示数据在私有数据库中的存留时间。该数据将在私有数据库上的指定数量的块中存活,之后将被清除,从而使该数据从网络中过时,从而不能从链码中查询该数据,并且不能使请求对等体可用
你可以阅读更多的here。
就我个人而言,我不认为有一种方法可以从链中删除块。它可能会破坏区块链的不可变属性。
发布于 2019-04-08 15:37:40
有两个概念可以帮助你实现你的目标。
有一件事已经提过了。它是关于私有数据的。私有数据让你有可能给数据贴上生存时间的标签。然后,只有私有数据散列存储在链上(以便能够验证此事务),但数据本身存储在所谓的SideDB中,并被完全修剪(当然,链上的散列除外)。这是在没有变通方法的情况下使用Fabric并实现GDPR的一种基础。
另一件事,还没有提到,对这个问题很有帮助
有没有一种方法可以备份和清除区块链,或者删除超过某个时间范围的项目?
每个peer只在他的StateDB中存储账本的“当前状态”。当前状态可以被描述为标记为“活动”的数据,并且可能很快就会再次使用。你可以把StateDB想象成一个缓存。通过创建或更新新的键(调用),每个数据都会进入此缓存。要从缓存中删除键,可以使用'DelState‘。因此,它被标记为“已删除”,并且不再在缓存中。但它仍然在账本上!您可以检索该键的历史记录和数据。
结论:为了“真正”删除数据,你必须使用私有数据的概念,而对于管理StateDB中的数据(想想“缓存”的类比),你可以简单地使用内置函数。
https://stackoverflow.com/questions/55566023
复制相似问题