摘要

Bloomfilter运行在一台机器的内存上,不方便持久化(机器down掉就什么都没啦),也不方便分布式程序的统一去重。我们可以将数据进行持久化,这样就克服了down机的问题,常见的持久化方法包括持久化到本地磁盘或结合Redis进行持久化。本文主要介绍持久化到本地的操作。


关于BloomFilter的基本原理、jar包及入门Demo,请参考我的博客:布隆过滤器

数据持久化
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream; import com.google.common.hash.BloomFilter;
import com.google.common.hash.Funnels; public class Demo1 { public static void main(String[] args) throws FileNotFoundException { BloomFilter<Integer> filter = BloomFilter.create(
Funnels.integerFunnel(),
500,
0.01); //导入数据到filter
for(int i = 0; i < 100; i++ )
{
filter.put(i);
} //数据持久化到本地
File f= new File("d:" + File.separator + "test2");
OutputStream out = null;
out = new FileOutputStream(f); try {
filter.writeTo(out);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} //测试验证
for(int i = 0 ; i < 10; i++)
{
boolean result = filter.mightContain(i); if(result)
{
System.out.println("i = " + i + " " + result);
}
}
}
}
读取持久化数据
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream; import com.google.common.hash.BloomFilter;
import com.google.common.hash.Funnels; public class Demo2 { public static void main(String[] args) throws FileNotFoundException { BloomFilter<Integer> filter = BloomFilter.create(
Funnels.integerFunnel(),
500,
0.01); //将之前持久化的数据加载到Filter
File f= new File("d:" + File.separator + "test2") ;
InputStream in = null;
in = new FileInputStream(f);
try {
filter = BloomFilter.readFrom(in,Funnels.integerFunnel());
} catch (IOException e) {
e.printStackTrace();
} //测试验证
for(int i = 0 ; i < 10; i++)
{
boolean result = filter.mightContain(i); if(result)
{
System.out.println("i = " + i + " " + result);
}
}
}
}
Demo说明
Demo1:初始化filter对象,并导入测试数据,然后结合writeTo()方法将数据持久化到本地磁盘;
Demo1:初始化filter对象,读取Demo1持久化到磁盘的数据,然后将数据导入到filter;
测试验证:Demo1和Demo2都对创建后的filter进行了测试验证。
更多参考

基于Redis的Bloomfilter去重(附代码)

布隆过滤器

Guava学习笔记:Google Guava 类库简介

google/guava

布隆过滤器(BloomFilter)持久化的更多相关文章

  1. Spark布隆过滤器(bloomFilter)

    数据过滤在很多场景都会应用到,特别是在大数据环境下.在数据量很大的场景实现过滤或者全局去重,需要存储的数据量和计算代价是非常庞大的.很多小伙伴第一念头肯定会想到布隆过滤器,有一定的精度损失,但是存储性 ...

  2. HBase之八--(3):Hbase 布隆过滤器BloomFilter介绍

    布隆过滤器( Bloom filters) 数据块索引提供了一个有效的方法,在访问一个特定的行时用来查找应该读取的HFile的数据块.但是它的效用是有限的.HFile数据块的默认大小是64KB,这个大 ...

  3. 白话布隆过滤器BloomFilter

    通过本文将了解到以下内容: 查找问题的一般思路 布隆过滤器的基本原理 布隆过滤器的典型应用 布隆过滤器的工程实现 场景说明: 本文阐述的场景均为普通单机服务器.并非分布式大数据平台,因为在大数据平台下 ...

  4. 【浅析】|白话布隆过滤器BloomFilter

    通过本文将了解到以下内容: 查找问题的一般思路 布隆过滤器的基本原理 布隆过滤器的典型应用 布隆过滤器的工程实现 场景说明: 本文阐述的场景均为普通单机服务器.并非分布式大数据平台,因为在大数据平台下 ...

  5. Hbase 布隆过滤器BloomFilter介绍

    转载自:http://blog.csdn.net/opensure/article/details/46453681 1.主要功能 提高随机读的性能 2.存储开销 bloom filter的数据存在S ...

  6. 海量数据处理之布隆过滤器BloomFilter算法

    Bloom Filter是由Bloom在1970年提出的一种多哈希函数映射的快速查找算法.通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求100%正确的场合.使用场景:数据量为100亿 ...

  7. SpringBoot(18)---通过Lua脚本批量插入数据到Redis布隆过滤器

    通过Lua脚本批量插入数据到布隆过滤器 有关布隆过滤器的原理之前写过一篇博客: 算法(3)---布隆过滤器原理 在实际开发过程中经常会做的一步操作,就是判断当前的key是否存在. 那这篇博客主要分为三 ...

  8. guava布隆过滤器

    pom引入依赖 <dependency> <groupId>com.google.guava</groupId> <artifactId>guava&l ...

  9. 浅谈布隆过滤器Bloom Filter

    先从一道面试题开始: 给A,B两个文件,各存放50亿条URL,每条URL占用64字节,内存限制是4G,让你找出A,B文件共同的URL. 这个问题的本质在于判断一个元素是否在一个集合中.哈希表以O(1) ...

随机推荐

  1. 【Html5】-- 塔台管制

    想做这个游戏已久,今天终于初步完成,先解释下,这是一个模拟机场塔台管制指挥的游戏,飞机从不同的方向飞入管制空域,有不同的目的地,飞机名称最后一个字母表示飞机要到达的目的地,分ABCD和R.A-D表示四 ...

  2. BZOJ:1443: [JSOI2009]游戏Game

    原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1443 反正不看题解我是完全想不出系列…… 先把棋盘黑白染色,也就是同一对角线上颜色相同,使 ...

  3. POJ1635:Subway tree systems

    链接:http://poj.org/problem?id=1635 填坑树同构 题目给出的是除根外的括号序列表示. 其实只要跟你说hash大家都能写得出来…… hash函数取个效果别太差的就行了吧 # ...

  4. poj 1743

    Musical Theme Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 24835   Accepted: 8377 De ...

  5. 修改mysql密码的四种方法

    方法1: 用SET PASSWORD命令 首先登录MySQL. 格式:mysql> set password for 用户名@localhost = password('新密码'); 例子:my ...

  6. [国嵌攻略][044][初始化Bss段]

    BSS段的作用 1.变量存储的空间 初始化的全局变量:数据段 未初始化的全局变量:BSS段 局部变量:栈 动态分配变量:堆 2.为什么要对BSS段初始化 未初始化的全局变量在使用时才被赋值,未了避免在 ...

  7. log4j:ERROR Category option " 1 " not a decimal integer.错误解决

    log4j.properties 的配置文件中: log4j.appender.stdout.layout.ConversionPattern =  %d{ABSOLUTE} %5p %c{ 1 }: ...

  8. 一个简单的div弹出层的小例子

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  9. hive(II)--sql考查的高频问题

    在了解别人hive能力水平的时候,不管是别人问我还是我了解别人,有一些都是必然会问的东西.问的问题也大都大同小异.这里总结一下我遇到的那些hive方面面试可能涉及的问题 1.行转列(列转行) 当我们建 ...

  10. MySQL 查询最近几天的记录 最近7天的记录 本周内的记录

    本周内:select * from wap_content where week(created_at) = week(now) 查询一天:select * from table where to_d ...