`

bloom filter的开源实现程序memcached bloom filter

阅读更多

文章转自:http://www.heyues.com/mc_bloom_filter/

 

google code 上的介绍

Introduction

Bloom filter 是由 Howard Bloom 在 1970 年提出的二进制向量数据结构,它具有很好的空间和时间效率,被用来检测一个元素是不是集合中的一个成员,被广泛使用于各种海量数据排重的场景中。Mc bloom filter是一个全新的排重服务器,它采用memcached的网络层封装了bloom filter的操作,使各种语言php、java、perl、python、go、c等等,都能使用memcached的协议进行bloom filter的操作。

Details

作者

新浪汤晓刚何跃胡鸿

bloom filter 的简介

bloom_filter的百度百科Google黑板报算法详细介绍

mc bloom filter 的特性

  • 完全采用memcached的网络层协议,创建、删除、添加、查看状态等。
  • mc bloom filter 是一个全内存的排重服务器,所有数据均放在内存中。
  • 可以在一个实例中创建多个bloom filter,在内存允许的情况,可以创建几十G大小的bloom filter,支持最高上百亿的数据排重。
  • 采用google员工写的的高性能hash算法murmurhash,保证bloom filter的hash的高速
  • 单线程版单机读写速度能达到十万次/s(同网段两台服务器多线程压力测试 服务器配置:8核 Intel(R) Xeon(R) CPU E5620 @ 2.40GHz 12G内存)
  • 多线程版单机读写能力均能达到30万次/s(同网段两台服务器多线程压力测试 服务器配置:8核 Intel(R) Xeon(R) CPU E5620 @ 2.40GHz 12G内存)
  • 32位、64位服务器兼容。

mc bloom filter 的安装

    • bloom filter 使用memcached网络层,依赖于libevent,先登录http://libevent.org/下载最新稳定版本。
  wget https://github.com/downloads/libevent/libevent/libevent-2.0.20-stable.tar.gz
  tar zxvf libevent-2.0.20-stable.tar.gz
  cd libevent-2.0.20-stable
  ./configure
  make && make install
    • 在bloom filter 的google code 上,下载mc bloom filter的最新稳定版本
  1.wget bloom filter的最新稳定版本
  2.修改Makefile文件,主要是修改libevent到你的目录
  3.在目录中执行make,生成mc_bloom_filter【线上版】 mc_bloom_filter_【调试版】 两个可执行文件,调试版会打很多日志
  4. nohup ./mc_bloom_filter -p12345 -d -uroot -m4000 –p/tmp/mc_bloom_filter.pid –l127.0.0.1
  日志文件就是当前目录的nohup.out文件
  • mc bloom filter的启动参数
参数 是否必须 值的含义
p(小p) 监听端口,默认12345
P(大P) pid文件的地址
u(小u) 用哪个用户运行
m(小m) 最大内存,单位m
d(小d) 是否用daemon后台运行
l(小l) 监听的ip
t 表示线程个数,只多线程版本有此参数,单线程无此参数,t默认为4
v 是否将调试的输出打印出来,如果添加这个参数,会在终端或者nohup.out中打印调试信息

mc bloom filter 的命令

add add key 0 0 value_lengthexpected_max_amount_of_elements|false_positive_rate

 

比如add test 0 0 13

1000000|0.001 表示创建一个预计存100万,误判率千分之一的bloom filter

成功返回STORED 失败返回NOT_STORED
set set key 0 0 subkey_lengthsubkey 成功返回STORED 失败返回NOT_STORED
get get key|subkey 存在返回1,不存在啥都不返回
stats stats 查看服务器的总体状况 信息列表
stats blooms 列举所有过滤器的名称和占用内存字节大小 信息列表
stats bloom key 可以查看名字为key的bloom filter的详细信息 信息列表
try try expected_max_amount_of_elements|false_positive_rate比如 try 100000000|0.0001 表示计算1亿个目标存储数,在误判率万分之一的情况下,

 

需要的内存大小用来预估过滤器所需的内存大小和hash函数个数

信息列表
setmem setmem size(Mbytes) 用来设定当前进程可使用的内存容量,单位是m,比如要设置内存1G,setmem 1024 成功返回STORED 成功返回STORED,失败返回NOT_STORED

PHP 的使用demo

<?php
  $mc = new Memcache();
  $mc -> add("my_bloom","10000000|0.0001");
  $mc -> set("my_bloom","2222222");
  var_dump($mc->get("my_bloom|2222222");
?>
 

具体的文档在这里https://code.google.com/mc_bloom_filter

分享到:
评论

相关推荐

    Redis 45 道面试题及答案.docx

    对于更高级的用户,Redis还允许使用模块,如BloomFilter、RedisSearch和Redis-ML,这些扩展进一步增强了Redis的功能。 使用Redis有以下几个显著的好处: 1. 由于数据存储在内存中,Redis提供了接近于O(1)的时间...

    Java爬虫框架(20210809123939).pdf

    4. 爬虫过滤机制:过滤是爬虫框架中不可或缺的部分,文档中提及了使用如bloomfilter等过滤算法来过滤重复的URL或者不合规的页面,从而提升爬虫的效率和质量。 5. 数据存储:爬虫框架往往需要将采集到的数据存储起来...

    Redis面试题 42道.pdf

    高级用户还会涉及Bloom Filter、RedisSearch和Redis-ML等模块。 3. **性能优势**:Redis运行在内存中,读写速度极快,接近O(1)的时间复杂度。同时,它支持事务,保证原子性操作,确保数据一致性。此外,Redis还支持...

    17-Redis面试题(50题).pdf

    Redis模块进一步扩展了其功能,如BloomFilter、RedisSearch和Redis-ML,使得Redis成为一个功能强大的数据处理平台。 使用Redis的好处主要包括: 1. 高速访问:由于数据驻留在内存中,查询和操作速度极快。 2. 多种...

    Java面试redis.pdf

    为了避免这种情况,可以使用布隆过滤器(Bloom Filter)来检查数据是否存在,减少无效的数据库查询。 5. 缓存雪崩:大量缓存在同一时间过期,可能导致请求同时击中数据库,解决方案是设置随机过期时间,避免集体...

    60道关于Redis的常见面试题.pdf

    - 使用布隆过滤器(Bloom Filter)预先判断数据是否存在。 - 对空结果也进行缓存,但设置较短的有效时间。 #### 4. 介绍 Redis 的持久化机制以及对比它们之间的区别。 - **RDB(Redis Database Backup)**: - 定期...

    Redis 40 道面试题及答案.docx

    如果你是 Redis 中高级用户,还需要加上 BloomFilter, RedisSearch, Redis-ML 等数据结构。 使用 Redis 有哪些好处? 1. 速度快,因为数据存在内存中,类似于 HashMap,HashMap 的优势就是查找和操作的时间复杂度...

    后Hadoop时代的大数据架构

    - **Bloom Filter**:空间效率高的数据结构,用于判断元素是否存在,可能存在误报但不会漏报。 - **Count-Min Sketch**:近似计算数据流中的频繁项,用于快速统计和过滤数据。 **数据存储策略**: - **内存存储**:...

Global site tag (gtag.js) - Google Analytics