大数据量的过滤 (用于爬虫,蜘蛛) Bloom Filter 布隆过滤器

想像一下.如果你有一个非常大的无序的数据(url连接) 并且你要保证同样的一条连接不会在其它地方再次出现
你实时的收集哪些数据,你没有办法来预防两个相同的url出现,再不断增加的数据当中.

当这些数据是少的时候你可以轻松的创建一个list(dictonary or hashtable 或者你自已的数据结构)然后遍历它们,看它是不是已经存在在这个list当中,
遍历所花的时间是非常多的,
但是 当这些数据的长度超过可用的内存的时候? hashtable可以帮我加快速度,但是存...

上面的比较多的费话..看起来累 呦口继续不下去了.

得出的方案是用 bit数组来节省空间
a hash table capable of holding M items will take m/8 bytes of memory
接下来是实际的解决方法
net 里面有一个类 BitArray它可以帮我们很容易的创建出一个hashtable

创建一个简单的 HashingTable

大数据量的过滤 (用于爬虫,蜘蛛) Bloom Filter 布隆过滤器public class SimpleHashTable
    }


Add 里面没有这个值的时候是返回 false ,
Test 里面有值的话是返回 true;

大数据量的过滤 (用于爬虫,蜘蛛) Bloom Filter 布隆过滤器 class Program

The output from that program, run against the 100,000 unique URLs in my file, is:

10000  44  0.44%
20000 187 0.935%
30000 423 1.41%
40000 753 1.8825%
50000 1200 2.4%
60000 1753 2.92166666666667%
70000 2375 3.39285714285714%
80000 3123 3.90375%
90000 3946 4.38444444444444%
100000 4834 4.834%
100000 urls read
4834 collisions
False positive rate = 4.834%
然后写了一个简单的测试类,我们可以看到它的碰撞(冲突)还是比较明显的


接下来就是如何继续去解决这样的问题

创建一个新的 Hash算法函数 HashString

hi(x) = (f1(x) + if2(x)) mod m

然后提供了一个 防止碰撞的结构. hashkeys 保存这个hash的三个位置

大数据量的过滤 (用于爬虫,蜘蛛) Bloom Filter 布隆过滤器 public class BloomFilter
    }

测试:

大数据量的过滤 (用于爬虫,蜘蛛) Bloom Filter 布隆过滤器 class Program
10000  44  0.44%  1  0.01%
20000 187 0.935% 10 0.05%
30000 423 1.41% 38 0.126666666666667%
40000 753 1.8825% 118 0.295%
50000 1200 2.4% 262 0.524%
60000 1753 2.92166666666667% 517 0.861666666666667%
70000 2375 3.39285714285714% 866 1.23714285714286%
80000 3123 3.90375% 1352 1.69%
90000 3946 4.38444444444444% 2118 2.35333333333333%
100000 4834 4.834% 2966 2.966%
100000 urls read
4834 hash collisions
False positive rate (hash) = 4.834%
2966 Bloom collisions
False positive rate (Bloom) = 2.966% 

在添加数据的时候.他会判断前面这个位置是否有一个地址存了.如果有的话.它就存第二个. 如果都被存光了..哪就发生碰撞了
实际总的容量是有限的.
还有泛型和它的例子

大数据量的过滤 (用于爬虫,蜘蛛) Bloom Filter 布隆过滤器public abstract class BloomFilter

 

大数据量的过滤 (用于爬虫,蜘蛛) Bloom Filter 布隆过滤器class StringBloomFilter : BloomFilter
让我们的蜘蛛跑得更快吧
Google 数学之美哪边也介绍到了.
http://googlechinablog.com/2007/07/bloom-filter.html 

相关文章:

  • 2022-01-26
  • 2022-01-27
猜你喜欢
  • 2021-12-02
  • 2021-12-16
  • 2021-10-15
  • 2021-09-06
  • 2021-12-14
相关资源
相似解决方案