我从 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
在我的磁盘上找到 。正确的?