用户标签对于软件系统及软件业务很重要,它是构成用户画像的核心因素,是将用户在平台内所产生的行为数据,分析提炼后生成具有差异性特征的形容词。即用户通过平台,在什么时间什么场景下做了什么行为,平台将用户所有行为数据提炼出来形成支撑业务实现的可视化信息。比如直播应用中,可以给一个用户划分为VIP
、直播常客
、消费能力强
等等。有了对应的用户标签之后,不同的用户可以划分成不同的用户群体,而不同的用户群体对于运营团队来说,可以根据不同群体发放不同的奖励,或者做一些活动等等,这样对平台的整个营收都会有很大的帮助。
那么在系统中如何记录用户标签信息呢?以下列举一些用户标签实现的常用方案:
- 利用MongoDB做标签记录:使用JSON格式去做标签记录的存放。需要额外搭建MongoDB集群。
- 基于MySQL做标签记录:使用特殊业务字段的方式去存放标签。但有一个缺点就是每次业务增加标签类型的时候,都要增加字段,调整的频率可能会比较高。
- 基于MySQL并使用二进制的思路去存储标签信息。这样当业务增加的时候,就不需要对表结构进行调整了。
如:t_user_tag
表中预留了三个字段 tag_info_01
、tag_info_02
、tag_info_03
用来存储标签的十进制数字,十进制数字转换成二进制01串后,每个不同的为就代表不同的用户标签的含义,从而记录每个标签是否被标记。
利用位运算实现用户标签记录实现原理: 假设标签是一个数字16,转换为二进制就是10000
- 设置标签: 采用
或运算 |
(参与运算的两个位只要有一个为1,其值就为1)
0 0 0 0 1(用户原先就有记录一个标签)
| 1 0 0 0 0
------------------------------
1 0 0 0 1(用户记录上标签后,存入数据库)
- 取消标签: 采用
与+取反运算 &~
来实现
1 1 0 0 1 (用户原先就有记录两个标签)
1 0 0 0 0
~ 0 1 1 1 1
& 0 1 1 1 1 (然后用原先的标签1 1 0 0 1 按位与 0 1 1 1 1)
------------------------------
0 1 0 0 1 (取消了用户的数字为16的那个标签)