BitMap在大数据分析中的应用场景(RoaringBitmap详解)
请解释BitMap(位图)在数据分析中的核心应用场景,包括去重、标签人群圈选、快速过滤等。同时详细介绍RoaringBitmap(压缩位图)如何通过Array Container/Bitmap Container/Run Container三种容器组合实现内存压缩,对比传统BitMap的优势。
回答
Yahuda
BitMap应用场景:
- 快速去重:每个元素用1bit标记存在与否
- 标签圈选(用户画像):
- 每个标签对应一个BitMap(如:『性别男』bitmap、『年龄25-30』bitmap)
- 交集(AND):找出『男且25-30岁』的用户
- 并集(OR):找出『男或25-30岁』的用户
- 差集(AND NOT):『男且非25-30岁』
- 分桶过滤:订单范围过滤(金额在100~1000的订单集合)
- UV去重:每天访客用BitMap记录,日活天活灵活计算
RoaringBitmap(压缩位图):
三种容器:
| 容器 | 存储方式 | 适用条件 | 内存占用 |
|---|---|---|---|
| Array Container | 有序uint16数组 | 基数<4096 | 2KB~8KB |
| Bitmap Container | 固定65536bit位图 | 基数≥4096 | 8KB |
| Run Container | 连续区间编码 | 长连续段(如[1,10000]) | 最低 |
优势:
- 传统BitMap:连续分配2^32 bit = 512MB映射所有UID
- RoaringBitmap:稀疏场景内存降低90%+
- 支持高效AND/OR/XOR/Difference操作
大数据组件:
- ClickHouse:RoaringBitmap类型
- Apache Druid:Bitmap索引
- Spark:
org.roaringbitmap库 - Apache Kylin:Bitmap预计算去重