4

DHT に関する基本的な考え方は wiki から入手しました。

ストアデータ:

DHT ネットワークでは、すべてのノードが の特定の範囲を担当しますkey-space。ファイルを DHT に保存するには、まずhash the file's name to get the file's key; 2番目にsend a message put(key, file-content) to any node of the DHT、メッセージは責任のあるノードに中継され、keyそのノードはペアを保存します(key, file-content)

データを取得:

DHT からファイルを取得するときは、まず、ファイルの名前をハッシュしてkey;を取得します。2番目に任意のノードにメッセージを送信し、メッセージget(key)を中継します...

質問:

  1. ファイルを保存するには、ファイルの名前をハッシュして を取得できますkeyが、wiki には次のように記載されています。

現実の世界では、キー k は、ファイルの名前のハッシュではなく、ファイルのコンテンツのハッシュであり、ファイルの名前を変更してもユーザーがファイルを見つけるのを妨げないように、コンテンツ アドレス可能なストレージを提供します。

ファイルの内容をハッシュしますか? ファイルの内容を知るにはどうすればよいですか? ファイルの内容を既に知っている場合、なぜ DHT で検索するのでしょうか?

  1. ウィキによると、参加しているすべてのノードは、ファイルを保存するためにいくらかのスペースを確保します。では、DHT に参加した場合、自分が担当spare 10G disk spaceするファイルを保管しなければならないということですか?key falls into the specific key-space

  2. 実際にそれらのファイルを保存するためにいくらかのディスク容量を確保する必要がある場合、それら(key, file-content)をディスクにどのように保存すればよいでしょうか? つまり、ファイルをB-treeディスク上でまたは何かに配置する必要がありますか?

  3. クエリが発生したとき、コンピューターはどのように応答しますか? まず、 をチェックしqueried key、 が にある場合は、ディスク上key-spaceで を見つけます。corresponding file右?

4

1 に答える 1

1

DHT は単なるアルゴリズムです。そのベースで、分散キー値の PUT および GET 操作を提供します。多くのプログラミング言語で見られる通常の Map または連想配列に似ています。

信頼できないノード、失敗率などの現実世界の制限により、実際の DHT 実装は任意の長さのPUT(<uint8[]>, <uint8[]>)操作を提供しません。

例:

たとえば、bittorrent の kademlia 実装は、次のインターフェイスを提供します。

  • PUT(uint8[20], uint16)
  • GET(uint8[20]) -> List<Pair<IP, uint16>>リストは、実際のデータのランダムにサンプリングされたサブセットのみを表します

ご覧のとおり、より一般的な連想配列と比較すると、実際には特殊な非対称インターフェイスです。IP アドレスは、常に PUT 送信者の送信元アドレスから派生します。つまり、明示的に設定することはできません。また、GET は単一の値ではなくリストを返すため、そのように表示したい場合は、MultiMapまたはを実装します。Map<List>

bittorrent の場合、コンテンツ記述子としてハッシュが使用され、コンテンツを持つピアが DHT で自分自身をアナウンスします。ファイルが必要な場合は、DHT で IP/ポート ペアを検索し、別のプロトコルを介してピアに接続し、データをダウンロードします。

しかし、DHT の他の用途も可能です。つまり、署名された構造化データ、ツイートのようなテキスト スニペットなどを格納できます。それは常にアプリケーションのニーズに依存します。

これは単なる基本的なビルディング ブロックです。

于 2014-11-25T10:25:58.510 に答える