3

我正在寻找建立一个分布式种子搜索引擎。

我知道用于寻址对等网络中的节点的分布式哈希表。不过,我并不完全了解每个节点如何获取全局唯一 ID。

不过,我不确定构建分布式数据库需要哪些算法和数据结构。它显然需要具有高度的冗余,并且尽可能有效地搜索。

我真正需要的是指向某些资源的指针,最好是一些代码示例。

4

1 回答 1

4

不过,我并不完全了解每个节点如何获取全局唯一 ID。

我想说这与您的问题的标题和特定于实现的标题并不真正相关。但通常它要么是随机完成的,要么是基于他们的公共 IP 的哈希 + 一些随机子部分模数对子网的一些调整。例如,看看 bittorrent 的安全节点 ID 生成算法

不过,我不确定构建分布式数据库需要哪些算法和数据结构。

这是一个重要的话题,我认为无法在几段内回答。DHT 在它们的基础上不允许枚举存储的值或由多个节点协调的任何复杂操作,它们所做的只是直接的键值查找。要在此之上实现关键字搜索,您必须做一些算法和语言处理体操,并向基本 DHT 协议添加扩展以满足这些要求。

以下是要解决的几个问题的不完整列表:

  • 不均匀的词分布在 DHT 密钥空间的某些部分上比其他部分产生更多的负载 - 这可以通过节点自身移动、目标地址故障转移或扩大负责目标密钥的节点集在一定程度上得到缓解。并且简单地丢弃非常常见的词
  • 对多个搜索词执行联合或交叉操作 - 这可以在某种程度上使用布隆过滤器来完成
  • 将没有空格的脚本切片到搜索词中 - 这个问题也必须通过非分布式索引引擎(如 lucene)来解决。afaik 使用 N-gram
  • 防止包含特定单词的流行内容淹没共享该单词的所有其他结果
  • 相信。即防止关键字垃圾邮件攻击

我不确定 DHT 是否是正确的方法。我隐约记得基于语言/关键字本身的其他指标,其中节点在键空间中移动自己以吸引正在使用的单词,从而提供必要的网络容量。

我建议点击谷歌学者寻找与关键字搜索相关的修改或 DHT 的替代覆盖。

于 2014-12-14T16:00:14.770 回答