我知道(理论上)数据是如何存储在DHT中的。但是,我不确定如何更新与密钥相关的数据。这可能吗?另外,如何在DHT中处理冲突。
答案 0 :(得分:1)
DHT只是定义put(key,value)
和get(key)
操作,各种DHT算法的核心围绕如何定位负责特定密钥的节点。
这些节点对已存储的值的传入put
请求执行的操作在很大程度上取决于DHT网络的目的和实现,而不是算法本身。
E.g。节点可能选择为所有传入值加时间戳,并返回具有多个单独的带时间戳问题的列表。或者它可能返回包含每个值的源地址的列表。或者他们可能只是覆盖存储的值。
如果密钥与值或源ID中的签名之间存在某种关系,或者类似的东西,您可以将足够的智能放入节点中以加密验证数据,从而允许它们为每个节点保留单个规范值通过替换旧数据来键入。
在bittorrent的DHT的情况下,你不会想要那样。许多不同的bittorrent对等体宣布它们存在于来自不同源地址的单个密钥。因此,节点实际上存储了唯一的<key,IP,port>
元组,其中<IP,port>
可以被视为值。这意味着它将返回每次查找的IP和端口列表。由于DHT将有多个节点负责一个密钥,因此您实际上会有 K (存储区大小)节点响应不同的列表。
TL; DR:它依赖于实现
答案 1 :(得分:0)
有可能。我研究了pastrys dht。可以改变存储在给定密钥下的数据,但是pastrys开发人员建议不要使用它,因为它可能有令人讨厌的副作用,主要是复制存储在其他节点上的改变数据。 (请参阅freepastrys主页上的常见问题解答)。
我不确定它会如何影响其他dhts,例如和弦或挂毯。
关于冲突,我再次只有糕点经验。如果您尝试将数据存储在已经使用的密钥下,则会抛出异常。