7 个版本
0.2.0 | 2023 年 7 月 24 日 |
---|---|
0.1.5 | 2023 年 7 月 14 日 |
#38 in #点对点
每月 43 次下载
355KB
2K SLoC
卡米拉塔
点对点搜索引擎系统
范围
本项目是 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