PHP 实现布隆过滤器

面对500亿个URL的爬虫抓取任务,通过布隆过滤器可以显著节省内存,将每个URL的44字节压缩到1个bit,实现高效排重过滤。本文介绍了布隆过滤器的基本原理,并提供了一个简单的PHP实现示例,哈希函数数量和位数组大小可通过公式计算,但此处为简化直接写死。
摘要由CSDN通过智能技术生成

场景:爬虫抓取有500亿个URL的网站,怎么更节省资源做到每天不重复抓取

假设一个URL有44个字节,一亿个URL就是4G,一亿个URL就要占用4G内存。

这是就需要想办法压缩URL的内存占用,可以使用BloomFilter算法,是一个很经典的算法,非常适用海量数据的排重过滤,占用极少的内存,查询效率也非常的高。它的原理是把一个字符串映射到一个bit上,刚才23402373占8个字节,现在只占用1个bit(1字节=8bit),内存节省了近64倍,以前700M内存,现在只需要10多M了。

布隆过滤器的原理可以参考这里,非常详细:http://imhuchao.com/1271.html
以下程序是为了理解其原理,仅供参考。其中,哈希函数的数量,位数组的大小都有计算公式,可以参考上文链接。本程序为了简单起见,直接写死。

class Bloom {

    // 哈希函数的数量
    protected $hashNum = 10;

    // 位数组的大小
    protected $bitArrayCount = 6000;

    // 位数组
    protected $bitArray = [];

    public function __construct()
    {
        // 构建默认的位数组,全部置为 false
        $this->bitArray = array_pad([], $this->bitArrayCount, false);
    }

    /**
     * 获取 ha
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值