我从维基百科上了解到DHT的基本概念:
存储数据:
在DHT网络中,每个节点都负责一个特定范围的键空间。要将文件存储在DHT中,首先需要将文件名哈希为文件的键;其次,向DHT的任何节点发送消息put(key, file-content),该消息将被转发到负责key的节点,并且该节点将存储对(key, file-content)。
获取数据:
从DHT获取文件时,首先将文件名哈希为key;其次,发送消息get(key)到任何节点,将消息中继直到...
问题:
1. 要存储文件,我们可以哈希文件名以获得其键,但维基百科说:
“在现实世界中,密钥k可能是文件内容的哈希,而不是文件名称的哈希,以提供内容寻址存储,这样文件的重命名不会阻止用户找到它。”
哈希文件内容?我怎么知道文件的内容?如果我已经知道文件的内容,那么为什么要在DHT中搜索它?
2. 根据维基百科的说法,每个参与节点都会留出一些空间来存储文件。那么这是否意味着,如果我参与DHT,我必须为那些落入我负责的特定键空间的文件留出10G磁盘空间?
3. 如果确实需要为这些文件留出一些磁盘空间,那么我应该如何在磁盘上存储这些(key, file-content)?我的意思是,文件是否应该被排列成B树或其他什么形式?
4. 当查询发生时,我的计算机如何响应?我假设,首先检查查询的键,如果在我的键空间中,则在我的磁盘上找到相应的文件。对吗?
存储数据:
在DHT网络中,每个节点都负责一个特定范围的键空间。要将文件存储在DHT中,首先需要将文件名哈希为文件的键;其次,向DHT的任何节点发送消息put(key, file-content),该消息将被转发到负责key的节点,并且该节点将存储对(key, file-content)。
获取数据:
从DHT获取文件时,首先将文件名哈希为key;其次,发送消息get(key)到任何节点,将消息中继直到...
问题:
1. 要存储文件,我们可以哈希文件名以获得其键,但维基百科说:
“在现实世界中,密钥k可能是文件内容的哈希,而不是文件名称的哈希,以提供内容寻址存储,这样文件的重命名不会阻止用户找到它。”
哈希文件内容?我怎么知道文件的内容?如果我已经知道文件的内容,那么为什么要在DHT中搜索它?
2. 根据维基百科的说法,每个参与节点都会留出一些空间来存储文件。那么这是否意味着,如果我参与DHT,我必须为那些落入我负责的特定键空间的文件留出10G磁盘空间?
3. 如果确实需要为这些文件留出一些磁盘空间,那么我应该如何在磁盘上存储这些(key, file-content)?我的意思是,文件是否应该被排列成B树或其他什么形式?
4. 当查询发生时,我的计算机如何响应?我假设,首先检查查询的键,如果在我的键空间中,则在我的磁盘上找到相应的文件。对吗?