我正在考虑实施一个DHT,其中数据项通过将后继地址添加到存储的值来链接,如果每个节点可以具有三个有序状态之一:空 - >数据 - >数据和后继地址将使所有同行获得一致和正确的排序?或者永久性叉子是否可能在这里?
答案 0 :(得分:3)
原则上,节点可能会有一些限制和支持。
要处理多个版本,您需要进行值版本控制。要在没有碰撞的情况下可靠地增加它们,您需要一个创建者。要确保单个创建者,您必须对数据进行签名。 签名数据通常存储在从公钥派生的密钥下。因此搜索节点要么必须以某种方式获取公钥,要么您需要另一个间接来将人类可读的密钥解析为公钥。
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之上实现任何数据结构。你需要的只是存储和指向其他键的指针。例如。列表可以实现为可变节点,可以更改其前向指针或不可变节点+一个可变头指针。
对于一些更快的遍历排序树或跳过列表也可能值得考虑。