摘要

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

最新文章

  1. centos执行yum出现Could not retrieve mirrorlist错误
  2. &lt;概要&gt;
  3. C语言PIC32 serial bootloader和C#语言bootloader PC端串口通信程序
  4. WebMethod在webservice里面非静态方法能调用,在页面类里面,静态方法才能调用
  5. BNUOJ 51279[组队活动 Large](cdq分治+FFT)
  6. MVC之前的那点事儿系列(5):Http Pipeline详细分析(下)
  7. Oracle存储过程基本语法
  8. item31,连续子数组的最大和
  9. Qt单元测试
  10. The Moving Points
  11. 半质数的个数 csdn 英雄会 高校俱乐部
  12. 收藏:左路Deep Learning+右路Knowledge Graph,谷歌引爆大数据
  13. 基于PaaS人事部门间平台多重身份的技术解决方案
  14. DeepLearning.ai学习笔记(三)结构化机器学习项目--week2机器学习策略(2)
  15. Mysql数据库连接报错!1130:host XXX is not allowed to connect to this mysql server
  16. Web API中的路由(二)——属性路由
  17. JavaWeb开发中采用FreeMarker生成Excel表格
  18. 类中的函数带有self,不带self的区别
  19. mysql 给表和字段加注释
  20. Linux常见目录使用区别

热门文章

  1. c++(递归和堆栈)
  2. chorme调试Paused in debugger问题解决
  3. javascript 思维导图 总结
  4. 全国银行列表json格式
  5. Web前端性能优化——如何提高页面加载速度
  6. 如何使用cmd打开磁盘目录和文件
  7. 关于将dede织梦data目录迁移出web目录
  8. php中PHPMailer发送带附件的电子邮件方法
  9. PHP批量去除bom头代码的小工具
  10. EL表达式得不到后台传过来的值