BitMap的使用场景
bitmap一般用作大数据的去重,过滤,排序,以及用户画像中。
BloomFilter使用bitmap进行数据过滤以及近似去重,用户画像中使用bitmap记录一个标签对应的人群(bitmap可以很好的进行与或运算,快速计算出多个标签的人群)。
bitmap可以高效的计算与和或运算
但是bitmap不能进行非运算,可以通过对一个全量的bitmap进行异或(^)运算实现。
原理实现
谷歌开源的EWAHCCompressBitMap实现了优化的bitmap。其对bitmap的空间存储实现进行了优化,通过long[]实现bitmap,每个原属,将long数组中的每个元素(word)分为了存储数据的word(LW)和存储跨度信息的word(RLW),通过RLW节省了存储空间。
如下存储2、4、64、127、400000这几个uid只需要少量的word即可。对于这种稀疏的bitmap节省了大量的存储空间。