背景信息
几乎所有行业(如互联网、游戏、教育等)都有实时精准营销的需求。通过系统生成用户画像,在营销时通过条件组合筛选用户,快速提取目标群体,例如:
- 电商行业中,商家在运营活动前,需要根据活动的目标群体的特征,圈选出一批目标用户进行广告推送或进行活动条件的判断。
- 游戏行业中,商家需要根据玩家的某些特征进行圈选,针对性地发放大礼包,提高玩家活跃度。
- 教育行业中,需要根据学生不同的特征,推送有针对性的习题,帮助学生查缺补漏。
- 搜索、门户、视频网站等业务中,根据用户的关注热点,推送不同的内容。
这些行业都有一些共同的业务痛点:
- 数据量庞大,运算量也极大。
- 用户标签多、字段多,占用存储空间也多。
- 字段多,可能会超过数据库的字段数限制,一般数据库最多支持1000多个字段。
- 使用数组替代多字段存储标签,需要数据库支持倒排索引,但并不是所有数据库都支持倒排索引。
- 使用数组替代多字段存储标签,加上倒排索引,存储空间会暴增。
- 圈选条件组合多样化,没有固定索引可以优化,如果每个字段一个索引,存储空间又会暴增。
- 性能要求高,因为实时营销要求秒级响应。
- 数据更新时效要求高,用户画像要求近实时的更新,否则可能圈选到不精准用户(例如用户昨天在浏览手机,昨晚已下单,但是数据未实时更新,那么手机卖家圈选时这个用户就会被选中,但是该用户实际上已经不是目标群体)。
实现方案
方案:实时精准营销(人群圈选)
楼主以前就遇到对习题打标签,根据学生不同的特征,推送有针对性的习题的需求,当时一开始用了实时精准营销(人群圈选)里的方案一的mysql方式来实现,那sql写得长得一匹,性能又差(手动狗头),最后还是换成es利用倒排索引来优化,也就是实时精准营销(人群圈选)里的方案二。
但显然,实时精准营销(人群圈选)中的方案三,利用PostgreSQL的RoaringBitmap插件来实现最优,当前公司的用户标签系统也是用了这个方案,于是搜索资料了解学习下:
总结
- 解决问题,没有最好的方案,只有更合适的方案
- 多收集信息,多积累经验,站在巨人的肩膀不香吗