CodeWalk

BitMap在大数据分析中的应用场景(RoaringBitmap详解)

作者:Yahuda · 2026-05-30 12:55

请解释BitMap(位图)在数据分析中的核心应用场景,包括去重、标签人群圈选、快速过滤等。同时详细介绍RoaringBitmap(压缩位图)如何通过Array Container/Bitmap Container/Run Container三种容器组合实现内存压缩,对比传统BitMap的优势。

回答

Yahuda

BitMap应用场景

  1. 快速去重:每个元素用1bit标记存在与否
  2. 标签圈选(用户画像)
    • 每个标签对应一个BitMap(如:『性别男』bitmap、『年龄25-30』bitmap)
    • 交集(AND):找出『男且25-30岁』的用户
    • 并集(OR):找出『男或25-30岁』的用户
    • 差集(AND NOT):『男且非25-30岁』
  3. 分桶过滤:订单范围过滤(金额在100~1000的订单集合)
  4. UV去重:每天访客用BitMap记录,日活天活灵活计算

RoaringBitmap(压缩位图)

三种容器

容器存储方式适用条件内存占用
Array Container有序uint16数组基数<40962KB~8KB
Bitmap Container固定65536bit位图基数≥40968KB
Run Container连续区间编码长连续段(如[1,10000])最低

优势

  • 传统BitMap:连续分配2^32 bit = 512MB映射所有UID
  • RoaringBitmap:稀疏场景内存降低90%+
  • 支持高效AND/OR/XOR/Difference操作

大数据组件

  • ClickHouse:RoaringBitmap类型
  • Apache Druid:Bitmap索引
  • Sparkorg.roaringbitmap
  • Apache Kylin:Bitmap预计算去重