【发布时间】:2011-12-03 09:57:00
【问题描述】:
我从 wiki 中获取了关于 DHT 的基本概念:
存储数据:
在 DHT 网络中,每个节点负责特定范围的 key-space。要将文件存储在 DHT 中,首先,hash the file's name to get the file's key;第二,send a message put(key, file-content) to any node of the DHT,消息将被转发到负责key的节点,该节点将存储(key, file-content)对。
获取数据:
从 DHT 获取文件时,首先对文件名进行哈希处理以获取 key;第二次向任意节点发送消息get(key),中继消息直到...
问题:
- 要存储文件,我们可以对文件名进行哈希处理以获取其
key,但 wiki 表示:
在现实世界中,密钥 k 可能是文件内容的哈希值,而不是 比文件名的哈希值提供内容可寻址存储, 这样重命名文件就不会妨碍用户找到它。
哈希文件的内容?我应该如何知道文件的内容?如果我已经知道文件的内容,那我为什么要在 DHT 中搜索呢?
根据 wiki,每个参与节点都会腾出一些空间来存储文件。那么这是否意味着,如果我参加了 DHT,我必须
spare 10G disk space来存储那些由我负责的key falls into the specific key-space的文件?如果我确实应该腾出一些磁盘空间来存储这些文件,那么我应该如何将这些
(key, file-content)存储在磁盘上?我的意思是,该文件应该被安排成B-tree或我磁盘上的其他东西吗?当查询发生时,我的计算机如何响应?我假设首先检查
queried key,如果在我的key-space中,然后在我的磁盘上找到corresponding file。对吗?
【问题讨论】:
-
考虑在未来拆分您的帖子。 1. 你不应该知道文件的内容。只是哈希。 .torrent 元文件还包含 torrent 中每个文件(实际上是每个文件)的哈希值。
-
我花了4个小时熬夜到凌晨,但我也无法理解这件事。我认为存储在 DHT 中的 VALUES - 是 IP:端口对,具有双重语义转发:首先找到响应存储另一台计算机的地址的计算机。第二步是定位文件本身。好复杂……