bitmap实现“属性标签化”


标签

原文地址:

http://mp.weixin.qq.com/s/tLL9IB5Tj8486lf11EAskQ


原本统计求交集的SQL语句为:SELECT COUNT(distinct name) as 用户数 from 用户表 where 属性1=’值’ and 属性2=’值’……


标签较少的话还可以,但是用户或标签变多查询的性能会大大降低


bitmap思想操作


  • 建立用户名和用户ID的映射

  • 让每一个标签存储包含此标签的所有的用户ID,每个标签都是一个独立的bitmap

  • 这样,实现用户的去重和查询统计,就变得一目了然

优点


  • Hashset和Hashmap,每个用户的ID需要存储为int类型,而用户在bitmap中只占一个bit,内存节省

  • 在做交集和并集运算时,性能较快

缺点


  • 不支持非运算

RoaringBitmap


EWAHCompressedBitmap