Bloom Filter & Count-Min Sketch
Bloom Filter introduction 首先,我们假设有四种存储设备,分别是 Tape, HDD, SSD, Memory.当然,我们知道,这四种设备的响应速度是按顺序递增的,也就是说 Memory 的速度最快,当然,我们都希望所有的程序都可以跑在 Memory 中,但是这四种设备的存储大小即容量也是不一样的,价格也是随之递增的.Ex .g 当我们在 Java 中使用 Set 类型去存储数据的时候,数据越多,查询所需的时间越长,同时 Jvm heap 也越大.实际生产环境中的数据量极大,在一些实时性要求比较高的应用当中,不可能将所有的数据都放在 Memory 中,当允许一定的误差的情况下,(即使用准确性去换取实时性,这是一种 tradeoff)这里就提出了,一种 Probabilistic data structure,它可以在一定程度上去接受一定的误差,从而使响应速度加快,所要存储的数据也大大缩小. Bloom Filter 的概念提出的比较早,早在1970年就由一个叫 Bloom(真的叫这个名字)的人在一篇名为"Space / Time trade-offs in hash coding with allowable errors" structure Initial the structure Add an element to this structure query 判断存在还是不存在 If one hash function map to 0, It means NO!( 有一个 map 到0 就不行) But if all hash functions map to 1, it means maybe YES(即使 所有的 hash 函数都能 map 到1, 也不能说明就一定存在, 这里有一定的 false positive, 即认为是正确的,但实际上不是正确的概率)...