提纲:

🔥海量数据处理

  • 前缀树Trie

  • 分治归并

  • Bloom Filter

  • Bit Map

一、海量数据处理

1. 前缀树 Trie

  • Q:有 xx 个文件存储了 xx 个 query 语句,取出出现次数前 k 高的语句

  • A:query 语句,是一种重复率很高的字符串类型,并且不同的 query 语句也可能有相同的前缀,对于这类数据(还有手机号码,英语单词)等,可以采用 Trie 前缀树来进行存储,然后使用大根堆 PriorityQueue,遍历 Trie时取出最多的元素

2.分治归并

  • Q:有(多个文件)海量的 xxx 数据,统计出现次数前 k 多的 xxx

  • A:可以采用分治归并,将海量数据按 HashCode % 1024 分别存储到 1024 个小文件中,

  • 再从每个小文件中选出出现次数前 k 多的数据,最后再归并,从这 1024 * k 个数据中找出前 k 多的数据

    • #不一定是 1024,按实际需求算

    • #计算 HashCode 方法主要有 平方取中/位移叠加(jdk的 String)/全随机,但要保证能够均匀哈希

    • #可以分批归并

  • Q:有两个文件,各存储了海量的 xxx 数据,要求取出两个文件中相同的数据

  • A:可以采用分支归并,将 A