这是一道面试题:为自动完成设计一个分布式后端。
我会回答如下:
自动完成是按给定后缀在字典中搜索。字典应该被组织成trie。该词典是根据最常见的查询构建的,但这是另一回事。
现在我假设字典不会经常更改(例如,每天一次而不是每毫秒一次)。因此,我们可以在处理自动完成查询的多个服务器之间复制字典(例如,使用负载平衡器和循环策略)。
我们也应该考虑字典,但这也是另一回事。
是否有意义?我错过了什么吗?
这是一道面试题:为自动完成设计一个分布式后端。
我会回答如下:
自动完成是按给定后缀在字典中搜索。字典应该被组织成trie。该词典是根据最常见的查询构建的,但这是另一回事。
现在我假设字典不会经常更改(例如,每天一次而不是每毫秒一次)。因此,我们可以在处理自动完成查询的多个服务器之间复制字典(例如,使用负载平衡器和循环策略)。
我们也应该考虑字典,但这也是另一回事。
是否有意义?我错过了什么吗?
这看起来是个正确的问题。trie 的想法非常好,可以帮助您在log(n)
. 更改频率取决于信息,所以我不会说确切的时间,但我会动态调整它。假设您每天更改一次,如果树发生了多大变化,那就太好了。并且您可以给出一个边界(例如 10%)。如果超出边界,您可以更频繁地更新 trie。这还取决于保持最新状态的重要性,因为在大多数情况下并非如此。负载均衡器的想法也不错。