分析一下QPS,日活跃度。
比较粗暴的方式:
我们会实时有一个log,来记录所有单词的出现频率。然后用SQL抓取 TOP 多少的词with a prefix
问题是Like 这种比较慢,是一种range query: >=...<=....
比较好的方法是用Trie.
如何做sharding? 所有数据存在一个机器上太多了。我们可以分几个机器。并且使用consistent hashing的方法。这样机器增多,还是会map到原本的key。比如"a" prefix全部去service 3, 'ad' prefix全部去service 1...
Reduce Log File。 每一个单词我们count++ 只有当random number chosen from 1--1000 且 为1的时候, 1/1000.对于那么没几次的数据就不存了。
基本对应Leetcode search autocomplete这道题。
solution: https://leetcode.com/problems/design-search-autocomplete-system/solution/#approach-3-using-trieaccepted
暴力HashMap法:
Trie beat 90%