首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DHT是如何工作的?

DHT是如何工作的?
EN

Stack Overflow用户
提问于 2011-10-08 02:51:05
回答 1查看 1.4K关注 0票数 4

我从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),将消息中继到.

问题:

  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。对吧?
EN

回答 1

Stack Overflow用户

发布于 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返回一个列表,而不是单个值,因此它实现了一个MultiMapMap<List>,如果您想看到它这样的话。

在bittorrent的例子中,哈希用作内容描述符,其中具有内容的对等点在DHT上宣布自己。如果有人想要文件,他们会在DHT上查找IP/端口对,然后通过单独的协议与对等方联系,然后下载数据。

但是DHT的其他用途也是可能的,例如,它们可以存储签名的、结构化的数据、类似tweet的文本片段等等。它总是取决于您的应用程序的需求。

只是一个基本的积木。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7694473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档