如何快速对50亿条话单进行去重(布隆过滤器测试报告)

对于实时话单而言,巨大的数据量和无规则的重发单导致如何对海量数据进行过滤成为一个难题,对于某大地市而言,一个月的话单量能达到50亿到60亿条话单。如果每条话单都去持久化数据库中查找,效率非常低下,如果存放在内存中,目前还没有生产主机的内存能容纳这么巨量的话单,即使存放的是比较短的话单id(保守估计每个id是80个字符组成的字符串,加上String类型的冗余属性可能达到100个字符),需要的总内存为8*100*50亿/8/1024/1024/1024=465G。

使用布隆过滤器把每条话单映射成BitSet的一个位,对于绝大部分非重复话单可以快速通过布隆过滤器判断出,对于极少的冲突部分和重复部分进行下一步进持久化数据的查询,影响较小。如何设计布隆过滤器和选择哈希算法成了解决问题的重点。下面是一些测试结果。

哈希算法:采用乘法哈希,对哈希结果值取绝对值,设置该值对应的bit位
哈希算法1:java自带的hashcode函数
哈希算法2:bernstein2
public static int bernstein2(String key) 
{    
int hash = 0;
   int i;    
   for (i=0; i<key.length(); ++i) 
   hash = 33*hash + key.charAt(i);   
   return hash;
}
哈希算法3:bernstein3
public static int bernstein3(String key) 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值