blockchain是包含前一个块的哈希的链。每个块由单个哈希树(或Merkle树)组成。我正在讨论的是区块链的整体结构。
由于区块链的值在哈希树内,因此在区块链中查找值的最佳方法是什么?我想通过遍历整个区块链来搜索树以寻找您想要找到的值是不可行的。我是否缺少搜索区块链中块内部值的搜索方法?
答案 0 :(得分:8)
如果您拥有的是每个区块中包含Merkle树的区块链,则根据定义,此数据结构不提供任何有效搜索任何内容的方法:
log N
次)M
的幂,其中M
是块数)总之:不,块和Merkle树的哈希对搜索信息基本上没用。它不仅效率低下,而且设计最无用的"索引"区块链中包含的数据(因为一旦数据中的一个位翻转,哈希就会完全改变)。如果你想在这样的数据结构中找到任何东西,除了在线性时间内遍历它之外,绝对没有什么可以做的。所有这些哈希所做的就是确保区块链不被篡改,没有别的。
然而,没有人强迫您每次遍历整个区块链,以便在其中找到一些信息。相反,你可以
然后在每个请求上只需
每次添加新块
或者:偶尔重建数据结构,分别处理最后几个块。
与#34;互联网"非常相似。它是一个包含内容的节点网络。你如何在这些节点中找到任何东西?每次想要查找任何内容时,您是否遍历所有节点?不,你问一个搜索引擎。因为搜索引擎已经在后台完成了工作,并访问了网络中的某些节点,并对内容编制了索引,因此您可以轻松地在其中查找内容。同样的事情,除了你的图表是线性的(如果你忘记了孤儿分支),以及之前添加到图表中的节点不会经常变化(从来没有,除非有人不成比例地攻击你的区块链)。当您更新数据结构时,以前添加的节点的不变性当然应该用于提高效率:如果您已经看过这些节点,则无需每次都重新扫描它们(与互联网中的内容不同)索引节点节点可以改变)。
另一个(显而易见的)替代方案,如果你可以影响区块链的设计:考虑提前可能有用的东西,从一开始就将所需的数据结构烘焙到区块链中,所以不仅区块链本身,而且有助于导航区块链的数据结构也不容易修改。