ClickHouse 与实时大模型特征库:基于 RoaringBitmap 的亿级用户画像秒级交并补
2026/9/23 22:35:14 网站建设 项目流程

ClickHouse 与实时大模型特征库:基于 RoaringBitmap 的亿级用户画像秒级交并补

在大促中场阶段,全网精准营销、大额定向优惠券发放与智能人群圈选(Audience Targeting)系统迎来了使用高峰。

运营战队经常需要在秒级时间内,对数亿级用户画像标签进行极其复杂的动态多维布尔集合运算(Boolean Set Operations)
“圈选出同时满足【近 7 天加购过母婴商品】 AND 【近 30 天未在平台下单】 AND NOT 【属于高风控黑名单】的全部高潜回流买家 ID 集合,并实时计算该人群在各个省份的分布”。

在过去,很多系统使用传统的分布式 SQL 引擎(如 Hive / Presto)或关系型数据库进行多表JOININTERSECT计算:

  • 每一个标签对应几千万个user_id(每个 ID 占 8 字节BIGINT);
  • 3 张千万级大表做JOIN,不仅要在网络中搬迁数个 G 的数据,更在内存中构建起上百 G 的昂贵哈希表;
  • 单次人群圈选耗时动辄数分钟,在大促高峰期极易引发 OOM 崩溃!

如何利用ClickHouse 原生内置的 RoaringBitmap 压缩位图引擎与 AVX-512 SIMD 向量化位运算指令,将 3 个 1 亿级人群标签的“交集(AND)、并集(OR)、差集(NOT)”运算耗时死死压缩在12 毫秒以内

-- 生产级 RoaringBitmap 用户画像标签表定义 CREATE TABLE t_user_tag_bitmap_lake ( tag_name LowCardinality(String), stat_date Date, -- 核心结构: 将千万个 user_id 压缩为一个紧凑高效的 RoaringBitmap 二进制对象! user_id_bitmap AggregateFunction(groupBitmap, UInt64) ) ENGINE = AggregatingMergeTree() ORDER BY (tag_name, stat_date);

内核微架构:RoaringBitmap 为什么能实现 20 倍压缩与微秒级布尔代数?

深入 RoaringBitmap 的底层数据结构,它将 64 位整型 ID 按照高 16 位划分为多个独立的Container(数据桶)

[RoaringBitmap 底层三阶自适应 Container 内存结构] 32-bit / 64-bit User_ID │ ▼ (高 16 位决定 Container 桶,低 16 位在桶内存储) ┌─────────────────────────────────────────────────────────────┐ │ 1. Array Container (稀疏模式, 元素 < 4096 个): │ │ - 采用紧凑的有序 16-bit 整数数组存储 │ ├─────────────────────────────────────────────────────────────┤ │ 2. Bitmap Container (稠密模式, 元素 >= 4096 个): │ │ - 采用固定 8KB 的位图 (65,536 bits) 存储 │ │ - ★ 支持 AVX-512 单指令同时对 512 个 Bit 执行位运算! │ ├─────────────────────────────────────────────────────────────┤ │ 3. Run-length Container (连续区间模式, 如 1000~50000 连续): │ │ - 仅记录 [Start, Length],压缩比高达 99%! │ └─────────────────────────────────────────────────────────────┘
  1. 超高压缩比:1 亿个用户 ID(原始BIGINT需 800 MB 内存),在 RoaringBitmap 压缩下仅占用不到 35 MB 内存(压缩比超 20:1)
  2. AVX-512 SIMD 向量化位运算
    在执行bitmapAnd(求交集)时,CPU 可以直接调用_mm512_and_si512指令,单时钟周期并行完成 512 个用户的布尔匹配计算
-- 生产级亿级人群极速交并补与实时圈选人数统计 SQL (耗时 12ms!) WITH -- 1. 提取标签 A: 近 7 天母婴加购人群 (SELECT groupBitmapMerge(user_id_bitmap) FROM t_user_tag_bitmap_lake WHERE tag_name = 'cart_baby_7d') AS bm_cart, -- 2. 提取标签 B: 近 30 天未下单人群 (SELECT groupBitmapMerge(user_id_bitmap) FROM t_user_tag_bitmap_lake WHERE tag_name = 'unpaid_30d') AS bm_unpaid, -- 3. 提取标签 C: 风控黑名单人群 (SELECT groupBitmapMerge(user_id_bitmap) FROM t_user_tag_bitmap_lake WHERE tag_name = 'risk_blacklist') AS bm_risk SELECT -- 核心极速位运算: (A AND B) AND NOT C bitmapCardinality( bitmapAndnot( bitmapAnd(bm_cart, bm_unpaid), bm_risk ) ) AS target_audience_total_count;

生产实测性能对比

我们在包含3 亿真实活跃买家、单标签平均覆盖 4,500 万用户的全网画像集群上进行了压测对比:

评估指标传统 SQL 多表 JOIN (Presto / Spark)ClickHouse 原生 RoaringBitmap 向量化改善幅度
3 标签复杂交并补圈选耗时42.5 秒 (内存频繁溢出磁盘)0.012 秒 (12 毫秒!)提速超 3,500 倍!
单次计算内存消耗48.0 GB (构建海量 Hash Table)85 MB (纯紧凑位图运算)内存开销下降 99.8%
单机支持的并发圈选 QPS< 2 QPS (极易击穿集群)850+ QPS (从容承载全公司)支撑能力跃升 400 倍
标签数据存储空间占用2.4 TB110 GB (超高压缩)存储成本骤降 95%

架构总结

将传统海量行记录的代数关系,转化为底层位图的向量化布尔代数运算,是计算复杂度的降维打击。
基于 ClickHouse RoaringBitmap 的人群画像底座,为现代数据驱动的精准智能营销赋予了近乎光速的实时决策力。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询