我知道如何在一台机器上开发一个简单的倒排索引。简而言之,它是一个保存在内存中的标准哈希表,其中: - 键 - 单词 - 值 - 单词位置列表 例如,代码在这里:http ://rosettacode.org/wiki/Inverted_Index#Java
问题:
现在我试图让它分布在 n 个节点之间,依次:
- 使该索引水平可扩展
- 对此索引应用自动分片。
我对自动分片特别感兴趣。欢迎任何想法或链接!
谢谢。
我知道如何在一台机器上开发一个简单的倒排索引。简而言之,它是一个保存在内存中的标准哈希表,其中: - 键 - 单词 - 值 - 单词位置列表 例如,代码在这里:http ://rosettacode.org/wiki/Inverted_Index#Java
问题:
现在我试图让它分布在 n 个节点之间,依次:
我对自动分片特别感兴趣。欢迎任何想法或链接!
谢谢。
分片本身是一项相当复杂的任务,在现代数据库中并没有完全解决。分布式数据库中的典型问题是CAP 定理,以及其他一些低级且相当具有挑战性的任务,例如在添加新的空白节点或数据中自然发生的不平衡后重新平衡集群数据。
我见过的数据库中实现的最佳数据分布是在 Cassandra 中。然而,Cassandra 中尚未实现全文搜索,因此您可以考虑在其上构建分布式索引。
其他一些已经实现的选项是Elasticsearch和SolrCloud。在给出的示例中,缺少一个重要的细节,即词干。使用词干搜索,您基本上可以搜索任何形式的词,例如“sing”、“sings”、“singer”。Lucene和之前的两个解决方案已经为大多数语言实现了它。