0

我知道如何在单个机器上开发简单的倒排索引。总之这是一个标准的哈希表保存在内存中,其中: - 关键 - 一个字 - 值 - 字位置 作为例子的列表,该代码是在这里:http://rosettacode.org/wiki/Inverted_Index#Java开发分布式全文搜索索引(又名倒排索引)

问:

现在我要把它n个节点之间的分配,进而:

  1. 使这个指数水平扩展
  2. 应用自动切分这个指数。

我特别感兴趣的是自动分片。任何想法或链接都欢迎!

谢谢。

回答

0

通过它自我分解是一项相当复杂的任务,在现代数据库中尚未完全解决。分布式数据库中的典型问题是CAP theorem以及其他一些低级且颇具挑战性的任务,例如在添加新空白节点后或数据中自然发生的不平衡之后重新平衡群集数据。

在我看到的数据库中实现的最佳数据分布是在Cassandra中。但是,全文搜索尚未在Cassandra中实现,因此您可能会考虑在其上构建分布式索引。

一些其他已经实施的选项是ElasticsearchSolrCloud。在这个例子中,一个重要的细节是缺少哪一个是词干。通过词汇,你基本上可以搜索任何形式的词,如“唱歌”,“唱歌”,“歌手”。 Lucene和以前的两个解决方案已经实现了大多数语言。

+0

感谢您的回答。我已经找到了Cassandra和其他一些数据库的对比,并再次发现了一致的哈希算法:http://www.quora.com/How-would-you-compare-and-contrast-MySQL-sharding-vs-Cassandra -vs-MongoDB其实,之前我研究过这个算法,这个算法在我的博客中有描述:http://ivoroshilin.com/2013/07/15/distributed-caching-under-consistent-hashing/,并且认为这个算法可以应用于也是倒排索引。我猜倒排索引的键可以传入一致的散列数据结构。 –

+0

更正:如果我将倒排索引与一致哈希结合起来,我想也听到其他方法和陷阱 –

+0

在最简单的形式中,NoSQL DB使用基于散列的键可以被认为是一个巨大的HashMap。所以是的,你可以简单地将你的倒排索引键传递给数据库。 –