一个DHT(Kademlia)能够可靠地存储数值链吗?

3

我正在考虑实现一个DHT,其中数据项通过添加后继地址来链接,如果每个节点都可以有三个有序状态:空 -> 数据 -> 数据和后继地址,那么所有的同行是否都能得到一致和正确的排序?是否有可能出现永久性的分叉?

1个回答

4

原则上,有一些限制和节点的支持是可能的。

要处理多个版本,您需要价值版本控制。为了可靠地增加它们而不发生冲突,您需要一个单一的起始者。为了确保单一的起始者,您将不得不对数据进行签名。 签名的数据通常存储在从公钥派生的密钥下。因此,搜索节点将不得不以某种方式获取公钥,或者您将需要另一个间接方法来将人类可读的键解析为公钥。

DHT.put("keyword", Pubkey)
DHT.get("keyword") => List<Pubkey>

DHT.put(Pubkey, Tuple<Value, ForwardPointer, VersionNumber>, Pubkey, Signature)
DHT.get(Pubkey) => List<Tuple<Tuple<Value, ForwardPointer, VersionNumber>, Signature>>

请注意,第一个参数将始终被哈希。还要注意,API是非对称的,返回列表并添加额外参数以供目标节点处理和验证。
即存储节点需要做更多的工作,而不仅仅是“愚蠢的键值存储”。
编辑:在您的特定情况下,您可能可以跳过版本号,并使用前向指针的存在/不存在作为隐式版本增量。
原则上,您可以在DHT上实现任何数据结构。你需要的只是存储和其他键的指针。例如,列表可以作为可变节点实现,这些节点会更改其前向指针,或者是不可变节点+一个可变头指针。
对于一些更快的遍历,考虑排序树或跳表可能也值得考虑。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接