5

这是一个面试问题:设计一个分布式后端自动完成。后台自动完成

自动完成是由给定后缀在字典中搜索:

如下我会回答它。字典应该组织为trie。该字典是从最常见的查询构建的,但这是另一回事。

现在我假设字典不会经常更改(例如每天一次而不是每毫秒)。因此,我们可以在多个处理自动完成查询的服务器上复制字典(例如,使用负载均衡器和循环策略)。

我们还应该考虑字典,但这也是另一回事。

它有道理吗?我错过了什么吗?

+0

架构问题应该真的问她e:http://programmers.stackexchange.com/我并不在意,但有些人会这样做。 – 2013-03-09 13:53:20

回答

1

它看起来像是正确的问题。这个想法非常好,可以帮助您在log(n)中搜索。改变的频率取决于信息,所以我不会说时间,但我会动态地调整它。假设你每天改变一次,树会改变多少会很好。你可以给出一个边界(例如10%)。如果超出边界,您可以更频繁地更新特里结构。这也取决于重要性是多么重要,因为在大多数情况下它不是。负载平衡器的想法也很好。

1

看看什么SOLR 4.0(索尔有特里和分布)。 它高度依赖于他们期望自动完成工作的方式。如果它只是一个wild card filter而不是像trie这样的简单ASCII码,那么它会很好......否则,如果他们想要自动纠正,它会变得更加复杂。这就是说我怀疑如果一个通用字段(即不是一个SKU或专用ID),一个字典将会给你带来好的结果,否则你会得到一个巨大而低效的字典。

看看:http://wiki.apache.org/solr/Suggester

  • 和Solr的分析: