标签
标签数据天生具有 3 个维度特征:
- 时效
- 离线标签。T + 1
- 近实时标签。分钟/小时
- 实时标签。秒/毫秒
- 聚合粒度
- 业务属性
- 账号属性
- 地理位置
- 消费行为
- 活跃行为
- 用户偏好
- 资产信息
- ......
用户使用画像标签的时候,进行简单地拖拉拽拼接规则,并不了解背后的技术细节。
标签存储
宽表
| user_id | 姓名 | 性别 | 购房意向 | 意向户型 |
|---|
| 1 | 老五 | 男 | 高 | 50-100m |
| 2 | 老四 | 女 | 低 | 200-300m |
使用 doris 的列式存储技术,利用索引、物化视图等优化手段,支持高效的多维分析。
缺点:
- 新增标签需要修改表结构,新加一列
- 更新频率。标签可能有不同的来源,离线计算、实时计算,更新频率不一
适用场景:
- 低频更新
- 密集标签。如用户性别,每个用户都会有性别,就属于高密集标签,如购房意愿,仅有 20% 用户具有值,属于稀疏标签
竖表
| user_id | 标签名 | 标签值 |
|---|
| 1 | 性别 | 男 |
| 1 | 年龄 | 15 |
| 2 | 性别 | 女 |
优点:
- 易于扩展,标签可随时添加
- 更新友好。每一行只是一个标签
- 查询友好。建立标签名和标签值的联合索引,任意维度查询性能高
缺点:
- 数据量巨大。如 100w 用户,100 个标签,需存储 100w * 100 =1亿数据
适用场景:
倒排表
| 标签名 | 标签值 | user_ids(bitmap) |
|---|
| 性别 | 男 | 1, 2 |
| 性别 | 女 | 3 |
优点:
- 人群圈选很快。需要任意维度圈选时,只需要对任意维度标签的 user_ids 求交集即可
缺点:
- 更新困难,每次更新时需更新标签对应的全部 user_ids
为了弥补标签更新的能力,需添加明细表,周期性的把明细表更新到 bitmap 表:
人群圈选
DSL -> Doris SQL、ES Query