我正在考虑实现一个 DHT,其中数据项通过将后继地址添加到存储的值来链接,如果每个节点可以具有以下三种有序状态之一:空 -> 数据 -> 数据和后继地址将所有对等方获得一致且正确的顺序?或者这里有可能永久分叉吗?
问问题
397 次
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 之上实现任何数据结构。您所需要的只是存储和指向其他键的指针。例如,一个列表既可以实现为改变其前向指针的可变节点,也可以实现为不可变节点+一个可变头指针。
对于一些更快的遍历排序树或跳过列表也可能值得考虑。
于 2015-01-21T12:44:35.930 回答