Type ahead/Auto Complete 设计

Type ahead/Auto Complete 设计_第1张图片

分析一下QPS,日活跃度。

Type ahead/Auto Complete 设计_第2张图片

比较粗暴的方式:

我们会实时有一个log,来记录所有单词的出现频率。然后用SQL抓取 TOP 多少的词with a prefix


Type ahead/Auto Complete 设计_第3张图片

问题是Like 这种比较慢,是一种range query: >=...<=....

比较好的方法是用Trie.

Type ahead/Auto Complete 设计_第4张图片
Type ahead/Auto Complete 设计_第5张图片


如何做sharding? 所有数据存在一个机器上太多了。我们可以分几个机器。并且使用consistent hashing的方法。这样机器增多,还是会map到原本的key。比如"a" prefix全部去service 3, 'ad' prefix全部去service 1...

Type ahead/Auto Complete 设计_第6张图片



Reduce Log File。 每一个单词我们count++ 只有当random number chosen from 1--1000 且 为1的时候, 1/1000.对于那么没几次的数据就不存了。


Type ahead/Auto Complete 设计_第7张图片



基本对应Leetcode search autocomplete这道题。

Type ahead/Auto Complete 设计_第8张图片

solution: https://leetcode.com/problems/design-search-autocomplete-system/solution/#approach-3-using-trieaccepted


暴力HashMap法:


Type ahead/Auto Complete 设计_第9张图片

Trie  beat 90%


Type ahead/Auto Complete 设计_第10张图片
Type ahead/Auto Complete 设计_第11张图片
Type ahead/Auto Complete 设计_第12张图片
Type ahead/Auto Complete 设计_第13张图片


Type ahead/Auto Complete 设计_第14张图片

你可能感兴趣的:(Type ahead/Auto Complete 设计)