#搜索引擎 #P2P #分布式系统 #网络

kamilata

基于 libp2p 的点对点搜索引擎系统

7 个版本

0.2.0 2023 年 7 月 24 日
0.1.5 2023 年 7 月 14 日

#38 in #点对点

每月 43 次下载

MIT 许可证

355KB
2K SLoC

卡米拉塔

License: MIT Lines of code GitHub last commit wakatime GitHub closed issues

点对点搜索引擎系统

范围

本项目是 Kamilata 协议的库实现。Kamilata 允许在开放网络中进行无需信任的搜索。此库可以处理任何类型的数据,并且可以轻松集成到您的 libp2p 应用程序中。

可能的用例包括

  • 类似 YouTube 的视频分享平台
  • 社交网络
  • 文件分享平台
  • 网络搜索引擎

排名算法由您决定,因为此库只提供无序搜索结果流。基于您包含在结果中的元数据,您可以按照任何方式对其进行排名。

Kamilata 是世界上第一个提供上述特性的系统,同时仍然可扩展。实际上,网络可以包含超过数亿份文档和数十万个节点,而实际的限制是未知的。

此库为 Admarus IPFS 搜索引擎 提供支持。

一般技术描述

一切始于最简单的方法,我已经将其优化到极致。想象一个由每个存储文档的对等节点组成的网络(如果文档受欢迎,它们可以在多个对等节点上复制)。当一个对等节点想要搜索文档时,它会向网络中的每个对等节点发送查询。当有太多对等节点时,这就不起作用了,因为网络被查询淹没。

为了解决这个问题,我增加了一个路由算法,允许搜索者仅将对等节点路由到具有匹配文档的对等节点。多亏了这个,查询跳过了所有无用的对等节点。现在,您可以在不考虑查询的情况下以恒定速度下载匹配文档的列表。搜索速度取决于网络的大小。每 h 跳就会接收到新的结果,其中 h = ln(n) / ln(c),其中 n 是对等节点的数量,c 是每个对等节点与其他节点之间的连接数。这对于 h 来说是非常好的,因为当 c 为 100 时,如果 h 大于 3,则网络需要超过一百万个对等节点。然后可以根据包含的元数据自由对结果进行排名。

卡米拉塔路由算法基于衰减Bloom过滤器。Bloom过滤器是一种紧凑的数据结构,用于确定一个元素是否存在于一个集合中。在这里,我们检查文档中的单词是否存在。从节点的角度来看,卡米拉塔网络被划分为不同大小的虚拟节点组。这将语料库划分为多个集合,从几篇文档到整个语料库的所有文档。每个集合都对应一个Bloom过滤器,这使得在网络上定位单词和知道查询给定单词的节点变得容易。

依赖项

~13–49MB
~814K SLoC