记一次位图在项目中的真实应用

选品筛选结果聚合减小内存占用实现思路

(1)why:随着选品接的需求越来越多,每一层标签条件请求ES获取到结果集在进行聚合时,有可能 结果集占用内存比较大,导致系统阻塞。

这样,在每一个结果集在进行逻辑运算时,压缩内存的占用就显的很有必要了。

(2) how to do: 二进制位运算概览:

(3)BitSet也既是位图的引入:

比如:两个复杂标签请求ES的结果返回两个List<wmPoiId>,把这个两个list映射到对应的位图上进行逻辑运算

 

(4)BitSet位图的优势:

一个1G的空间,有 8*1024*1024*1024=8.58*10^9bit,也就是可以表示85亿个不同的数 。

一个long类型的数字在Java中占用8个字节,一个字节8个bit,而在位图中只占用1个bit ,所以理论上可以节省64倍的字节

(5)位图聚合在选品中的落地分析:

位图适合于大数据量,非稀疏行的数据聚合。以我们的选品商家ID的筛选来说,线上wm_ad_poi_base_info表的最大商家ID为9382307,最小为1

现在假如一个结果集返回的数据是100万和long类型的List,占用的内存大概为:1000000*8/1024/1024=8M,而映射到位图以后占用字节为:9382307/8/1024/1024=1.19M

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值