私はデータが(理論的には)DHTにどのように保存されているかを知っています。ただし、キーに関連付けられたデータを更新する方法についてはわかりません。これは可能ですか?また、競合はDHTでどのように処理されますか。
2 に答える
DHTは単純に定義put(key,value)
とget(key)
操作を行い、さまざまなDHTアルゴリズムのコアは、特定のキーを担当するノードを見つける方法を中心に展開します。
すでに保存されている値に対する着信put
要求に対してこれらのノードが行うことは、アルゴリズム自体ではなく、DHTネットワークの目的と実装に大きく依存します。
たとえば、ノードはすべての着信値にタイムスタンプを付け、複数の個別のタイムスタンプ付きの問題を含むリストを返すことを選択する場合があります。または、各値の送信元アドレスも含むリストを返す場合があります。または、保存されている値を上書きするだけの場合もあります。
値やソースIDなどの中でキーと署名の間に何らかの関係がある場合は、ノードに十分なインテリジェンスを入れてデータを暗号で検証し、置換することで各キーの単一の正規値を保持できるようにすることができます。古いデータ。
bittorrentのDHTの場合、あなたはそれを望まないでしょう。多くの異なるビットトレントピアが、異なる送信元アドレスからの単一のキーにプレゼンスをアナウンスします。したがって、ノードは実際には、値と見なすことができる一意の<key,IP,port>
タプルを格納します。<IP,port>
つまり、ルックアップごとにIPとポートのリストが返されます。また、DHTには1つのキーを担当する複数のノードがあるため、実際にはK(バケットサイズ)ノードがさまざまなリストで応答します。
TL; DR:実装に依存します
可能です。私はペストリーdhtを研究しました。特定のキーの下に保存されているデータを変更することは可能ですが、主に他のノードに保存されている変更されたデータの複製により、厄介な副作用が発生する可能性があるため、ペストリーの開発者は変更しないことをお勧めします。(freepastrys ホームページの FAQ を参照してください)。
ただし、和音やタペストリーなどの他の dht にどのように影響するかはわかりません。
紛争に関しては、やはり私はペストリーの経験しかありません。既に使用されているキーの下にデータを保存しようとすると、例外がスローされます。