我从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中搜索它呢?
spare 10G disk space来存储key falls into the specific key-space负责的那些文件?(key, file-content)存储在磁盘上呢?我的意思是,应该将文件安排成B-tree或磁盘上的什么东西吗?queried key,如果在我的key-space中,那么在磁盘上找到corresponding file。对吧?发布于 2014-11-25 10:25:58
DHT只是一种算法。在其基础上,它提供分布式键值PUT和GET操作。类似于许多编程语言中的普通映射或关联数组。
由于现实世界的限制,例如不可信任的节点、故障率等,实际的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的其他用途也是可能的,例如,它们可以存储签名的、结构化的数据、类似tweet的文本片段等等。它总是取决于您的应用程序的需求。
只是一个基本的积木。
https://stackoverflow.com/questions/7694473
复制相似问题