“DHT搜索引擎”是如何工作的?

17

我对被称为“DHT搜索引擎”的Btdigg.org非常感兴趣。根据这篇文章,它不存储任何内容,甚至没有数据库。那么它是如何工作的呢?它不需要像其他正常搜索引擎一样收集元信息并将其存储在数据库中吗?用户提交查询后,它会扫描DHT网络并实时返回结果吗?这可能吗?

4个回答

19
我对BTDigg没有具体的了解,但我认为声称没有数据库(或类似数据库的东西)是不正确的。那篇文章的作者可能指的是你在传统的种子站点中遇到的更具体的内容,例如实际的.torrent文件存储。
以下是类似于BTDigg的站点的工作方式:
1. 运行一堆DHT节点,特别是为了“窃听”DHT流量,以便介绍人们谈论的信息哈希值。 2. 加入这些群集并使用ut_metadata扩展下载元数据(.torrent文件)。 3. 索引您在其中找到的信息,并将其映射到信息哈希值。 4. 为该索引提供前端。
如果您想要豪华一点,还可以定期抓取已知的信息哈希值,以随时间收集统计信息,也可以找出何时群集消失并应从索引中删除。
因此,声称您不存储.torrent文件或任何内容是正确的。
实时搜索DHT是不现实的,因为DHT不是围绕关键字搜索组织的,您需要持续地“在后台”建立和维护索引。

编辑:

自发布此回答以来,一些DHT客户端已实现了优化(BEP 51),使您可以查询它们托管的信息哈希,从而大大降低索引成本。


@Encombe 能否详细说明一下?(不过在 GitHub 上可能更合适:https://github.com/bittorrent/bittorrent.org/issues) - Arvid

11

4

https://www.usenix.org/legacy/event/woot10/tech/full_papers/Wolchok.pdf

第三节中使用的方法似乎表明需要一个数据库来存储所有的种子数据。虽然性能更好,但它可能不是真正的DHT搜索引擎。
第8节虽然效率较低,但只要关键字是存储值,它就可以成为DHT搜索引擎。
从第3节“启动Bittorent搜索”中:
“系统通过将每个种子文件名和描述的串联视为典型信息检索模型中的文档,并使用反向索引将关键字与种子匹配来处理用户查询。这具有流行的开源关系型DBMS的良好支持优势。我们根据种子的受欢迎程度对搜索结果进行排名,这可以从DHT中列出的同行数推断出。”
从第8节“相关工作”中:
使用分布式哈希表(DHT)来分发搜索的通常方法是采用倒排索引,将每个(关键字、匹配文档列表)对作为键值对存储在DHT中。Joung等人[17]描述了这种方法并指出了其性能问题:文件中关键字的Zipf分布导致负载平衡非常倾斜,文档信息在文档中的每个关键字中都会被复制一次,并且在分布式环境中难以对文档进行排名。

4
它分为两个步骤。
1. 要实现 bep_0005 协议获取 infohash,您不需要实现所有协议,目前只需要实现 find_node (request)get_peers (response)announce_peer (response)。下面是我开源的一个 dhtspider 示例。
2. 要实现 bep_0009 协议获取元信息,这里有一个我自己的 BT搜索引擎,每天可以获得 300w+ 的唯一 infohash,有效的元信息达到了 50w+。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接