1.背景
随着业务的快速发展,为了进一步提升获客能力,提高用户的转化率,搭建一个用户标签系统很有必要。
2.设计目标
1)支持根据用户id查询标签;
2)支持根据标签获取用户集合;
3)根据用户id查询聚合信息(包括用户标签、以及其他聚合内容);
4)减少mysql多表join操作的查询性能开销,提升查询的性能;
3.标签系统设计
方案1:使用redis的hash结构来存储用户标签
1)hash的key是用户id,value是一个map,然后map里面k-v键值对对应多个标签和聚合内容;
2)缺点:读取性能高,但是仅仅支持基于id查询用户标签,不支持复杂的查询(如根据标签查询用户集合、如根据二级索引查询等)
方案2:使用mongoDB来存储用户标签
1)用户的id作为用户文档的_id,数据从MongoDB中读取出来后,可无需转换直接使用;
2)适用于表结构经常改变,数据量比较大,且一个领域的数据聚合到一个文档中的;
6.标签应用
6.1新客、老客、潜客查询
6.1.2 实现方案(全量数据和增量数据)
- 首次上线存量数据可以线下打好标签之后导入redis;
- 增量数据可以通过消费kafka数据更新;