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

Mcbloomfilter是一个利用Memcached网络层封装的Bloomfilter操作服务器,适用于多种编程语言,如PHP、Java、Perl、Python、Go、C等。该服务器提供创建、删除、添加、查看状态等功能,并支持高并发读写性能,适用于海量数据排重场景。

文章转自: 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

下载代码方式:https://pan.quark.cn/s/a4b39357ea24 Node.js作为一个运行环境,其基础是Chrome的V8引擎,它最突出的优势在于能够支持JavaScript代码在服务器端执行,从而为网络应用程序创造了一个全新的执行平台。在Node.js生态中,文件系统的相关操作由fs模块承担,而fs.readFile作为其中的关键方法,专门用于实现文件内容的获取。本文旨在全面阐释fs.readFile方法的相关信息,包括其功能说明、语法结构、参数配置、应用范例以及源代码实现,以供那些需要在Node.js环境中进行文件操作的程序员参考。 fs.readFile方法具备异步特性,意味着它在执行文件读取任务时不会中断当前程序的运行流程,使得程序的其他部分能够同步执行。该方法的工作流程是:一旦调用,Node.js会立即反馈执行信号,然后在后台线程中执行文件读取任务。当文件读取任务完成后,Node.js会通过一个预设的回调函数来处理读取结果或识别错误。 fs.readFile方法的语法结构如下: fs.readFile(path[, options], callback) - path:一个必须的参数,其数据类型可以是字符串、Buffer或Uint8Array,用于指示文件的具体位置或文件描述符。 - options:一个可选参数,形式为一个对象,用于设定文件的编码格式及打开模式。该对象中可以包含encoding(字符编码,默认值为null,此时返回Buffer对象)flag(文件打开模式,默认值为r,代表只读模式)。 - callback:一个必须的回调函数,在文件读取任务结束后被触发。若读取过程中出现错误,err参数将包含错误详情,否则为n...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值