• 哈希——布隆过滤器 查黑名单(大数据 100亿数据)


     查黑名单(大数据 100亿数据)  

    不理想的是:

    1.使用哈希表来查(要使用非常大的空间)

    2.改进:使用哈希分流,然后将使用多个计算机处理(浪费机器,代价高)

    理想的是使用布隆过滤器(一种集合,但是有失误率,不属于黑名单的url可能会被认为在黑名单中,误报):

    使用的是基本数据类型的数组

    然后使用数组中的bit位

    如  int 型 数据 4个字节,32bit,int [] array = new int[1000];可以表示32*1000个位置

    例:将某个位置描黑index:

    1.这个bit位来自哪个整数:intIndex = index / 32

    2.这个位置是这个整数的具体哪个bit:bitIndex = index % 32

    3.描黑操作(找到相应的bit位):array[intIndex] = (array[intIndex] | (1 << bitIndex)); 

     也可以用long类型的(64bit),

    long [] array = new long[1000]  1000*64 个位置

    long[][] array = new long[1000][1000]  1000*1000*64 个位置

    每个url经过k个哈希函数(相互独立的),对应相应位置上描黑,所有黑名单中每个url都描黑之后,整个布隆过滤器的数组相应位置就被描黑了

    当检查url时,计算k个哈希函数的位置,当所有的位置都是黑的的情况下,就认为在过滤器中,否则就不在

    样本量 n:100亿, 失误率 p:0.0001万分之一

    1.需要开的空间大小m    大小为bit:

              m = 1,879,591,836,735 bit

    其中n 为样本量,p为预期失误率

     

    实际的字节 m / 8       1,879,591,836,735 bit / 8 = 234948979591字节   =23.3G(向上取整)  内存

     

    2.哈希函数的个数k:

       k = 13  (向上取整)

    注:m和k向上取整

    3.根据m和k向上取整之后,真实的失误率:

       p=6/十万

  • 相关阅读:
    Add Two Numbers
    Reverse Linked List II
    Reverse Linked List
    Remove Duplicates from Sorted List
    Remove Duplicates from Sorted List II
    Partition List
    Intersection of Two Linked Lists
    4Sum
    3Sum
    2Sum
  • 原文地址:https://www.cnblogs.com/SkyeAngel/p/8950524.html
Copyright © 2020-2023  润新知