当前位置: 首页 > news >正文

使用布隆过滤器实现java大数据筛选是否存在

问题
两组大量的数据集合想要互相对比是否一致,而且两组大数据内有多字段。

解决思路
根据多字段生成json,再根据json生成md5,存入布隆过滤器中,每次根据md5查询布隆过滤器内是否存在,不存在直接跳过,存在可能有误判率,需要对比md5是否一致,项目启动初始化加载布隆过滤器,服务器服务器若是重启,内部业务加载已存在的md5存入布隆过滤器中,其他业务代码对比若没有存入,下面是代码

根据需要生成json的几个字段生成json串

public String toJson(String name, BigDecimal amount, Date dateTime, Date effectDate, BigDecimal money) {SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String amountToString = null;if(amount != null){amountToString = String.valueOf(amount);}return String.format("{\"name\":\"%s\",\"amount\":%s,\"dateTime\":\"%s\",\"money\":%.2f}",name,amountToString,dateTime != null ? sdf2.format(dateTime) : null,money != null ? money : null);
}

生成md5

import org.apache.commons.codec.digest.DigestUtils;public class JsonMD5Generator {public static String generateMD5(String jsonString) {return DigestUtils.md5Hex(jsonString);}
}

布隆过滤器,项目启动时加载,里面可以写自己的业务

import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.google.common.hash.BloomFilter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;import java.util.ArrayList;
import java.util.List;@Slf4j
@Component
@Order(1)
public class BloomFilterInitializer implements CommandLineRunner {private BloomFilter<String> bloomFilter;@Overridepublic void run(String... args) throws Exception {log.info("布隆过滤器初始加载开始");// 预计元素数量long expectedInsertions = 1000000L;// 误判率double fpp = 0.01;// 初始化布隆过滤器bloomFilter = BloomFilter.create(Funnels.stringFunnel(StandardCharsets.UTF_8),expectedInsertions,fpp);// 加载数据loadData();log.info("布隆过滤器初始加载结束");}private void loadData() {// 数据加载逻辑}public BloomFilter<String> getBloomFilter() {return bloomFilter;}}

相关文章:

  • 微软宣布的五大重要事项|AI日报0520
  • 微软开放代理网络愿景
  • 镜像管理(2)Dockerfile总结
  • vue3/vue2大屏适配
  • 扫盲笔记之NPM
  • Wan2.1 文生视频 支持批量生成、参数化配置和多语言提示词管理
  • C及C++的音频库与视频库介绍
  • WIFI信号状态信息 CSI 深度学习篇之CNN(Python)
  • 第5天-python饼图绘制
  • Jenkins:自动化之魂,解锁高效开发的密钥
  • 三、【数据建模篇】:用 Django Models 构建测试平台核心数据
  • SQLite基础及优化
  • PL/SQL 安装配置与使用
  • 力扣热题——零数组变换 |
  • LeetCode 93.复原IP地址 LeetCode 78.子集 LeetCode 90.子集II
  • SpringMVC所有注解按照使用位置划分
  • leetcode 旋转数组 java
  • 深度学习-mmcv中build_runner实例化全流程详解
  • 985,成立人工智能学院
  • T008-网络管理常用命令:ping,ipconfig,nslookup,route,netstat
  • 梅花奖在上海丨好戏在上海不缺观众,冷门剧种叫好又叫座
  • 国家发改委:正在会同有关方面,加快构建统一规范、协同共享、科学高效的信用修复制度
  • 再囤三个月库存!美国客户抢付尾款,外贸企业发货订单排到7月
  • 完善劳动关系协商协调机制,《共同保障劳动者合法权益工作指引》发布
  • 竞彩湃|英超欧冠悬念持续,纽卡斯尔诺丁汉能否拿分?
  • 世界数字教育大会发布“数字教育研究全球十大热点”