后端自动完成

时间:2013-03-08 21:54:40

标签: algorithm architecture language-agnostic autocomplete distributed-computing

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

我会按如下方式回答:

自动完成是通过给定后缀在字典中搜索。字典应该可以组织为 trie 。字典是根据最常见的查询构建的,但这是另一个故事。

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

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

有意义吗?我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

看看SOLR 4.0是什么(solr有trie和分发)。 它高度依赖于他们期望自动完成工作的方式。如果只是一个wild card filter而不是像trie这样的东西对于简单的ASCII就好了......否则如果他们想要自动校正则会变得更复杂。话虽如此,我怀疑如果它是一个通用字段(即不是SKU或专门的ID),trie会给你带来好的结果,否则你会有一个巨大而低效的特里。

看看: