从数据建模到实时ETL:企销宝的标签系统架构揭秘

4 阅读4分钟

在私域运营中,标签是分层的基石。一个用户的标签越丰富,触达就越精准。但面对千万级甚至亿级用户,如何实现海量标签的实时写入、高效查询和批量更新?这背后需要一套强大的数据系统支撑。今天,我们就从数据库设计角度,拆解企销宝的标签系统,看看它是如何支撑大规模企微批量操作的。

一、标签系统的三大技术挑战

假设一个中型企业有500万企微用户,每个用户平均有30个标签,那么总标签记录数就达到1.5亿条。这样的规模下,标签系统面临三大挑战:

  1. 写入性能: 用户行为实时发生,需要毫秒级打标签(如用户点击链接立刻打上“兴趣-XX”)。
  2. 查询性能: 做批量群发时,需要快速筛选出符合标签组合的人群(如“兴趣-编程”且“活跃度-高”)。
  3. 更新一致性: 批量操作可能涉及数万用户的标签变更,要保证数据一致不丢失。

二、企销宝的标签存储架构

企销宝的标签系统采用混合存储架构,兼顾实时性与分析性能。

  1. 在线存储:Redis + MySQL
  • Redis: 用于实时标签缓存。用户行为触发标签变更时,先写入Redis,保证毫秒级响应。同时Redis存储用户的标签集合,方便快速查询。
  • MySQL: 作为持久化存储,定期将Redis数据落盘。MySQL采用分库分表策略,按用户ID哈希分片,分散写入压力。
  1. 离线分析:ClickHouse
    对于复杂的标签组合筛选(如“近30天购买且未领券”),企销宝将数据同步到ClickHouse。ClickHouse的列式存储和向量化执行,能在秒级完成亿级数据的聚合查询,为批量群发提供人群包。

三、标签的实时写入链路

以用户点击链接为例,看标签如何实时写入:

  1. 用户点击链接,企微回调通知企销宝服务。
  2. 服务端解析事件,确定要打的标签“兴趣-XX”。
  3. 异步写入Redis:HSET user:{user_id} tags "兴趣-XX" 1(1表示有效)。
  4. 同时写入消息队列(Kafka),用于后续持久化到MySQL和ClickHouse。
  5. 整个过程在50ms内完成,用户无感知。

四、批量打标签的优化策略

除了实时打标签,企销宝还支持批量打标签操作,比如给所有VIP客户打上“年度盛典邀请”标签。这种批量操作如果逐条写入,会拖垮数据库。企销宝的优化策略是:

  1. 预计算人群: 在ClickHouse中先筛选出目标用户ID列表(可能百万级)。
  2. 生成中间表: 将这批用户ID与标签写入临时表。
  3. 异步合并: 后台任务分批将临时表数据合并到Redis和MySQL,每批1000条,控制写入速率。
  4. 最终一致性: 在合并过程中,查询接口会同时查Redis和临时表,保证数据可见。

这样,即使一次性给100万人打标签,也不会影响线上实时查询性能。

五、标签在批量操作中的应用

有了强大的标签系统,企销宝的企微批量操作才能实现精准触达。

  • 批量群发: 运营人员在前端勾选标签组合(如“标签A且标签B或标签C”),系统实时从ClickHouse计算出人群数量,然后生成群发任务。任务执行时,再从Redis拉取用户详情,插入个性化变量。
  • 批量建群: 可以按标签自动分配群成员,比如“所有标签为‘北京’的用户自动进入北京群”。
  • 批量踢人: 按标签筛选出要踢出的用户,比如“标签为‘广告党’的用户”。

六、结语:标签即资产,技术是基石

对于私域运营,标签就是核心资产。而支撑这套资产的,是背后复杂的技术系统。企销宝用工程化的方法,解决了海量标签的实时读写、高效筛选和批量更新难题,让企微批量操作真正做到了精准、高效。

如果你对技术感兴趣,不妨深入了解一下企销宝的标签系统——它或许能给你在设计用户画像系统时带来启发。