当业务标签越来越多时,宽表标签计算的方案将不再适合,因为当列越多时,更新效率将会越慢。一种优化方案是通过对标签表构建索引,将用户ID编码后以 Bitmap 格式保存(一般使用 RoaringBitmap 进行压缩存储),将关系运算转化 Bitmap 的交并差运算,进而加速实时计算性能。如果用户 ID 是字符类型,需要先将用户ID进行整数编码才能使用 Bitmap 存储。
1. ROW_NUMBER 方案
在 用户画像实战:基于 ROW_NUMBER 的全局字典设计与实现 一文中介绍了如何使用 ROW_NUMBER 构建全局字典从而将用户ID进行整数编码。这种方案虽然可以构建全局字典,但是在大数据量下使用会导致性能问题,因为 ROW_NUMBER 的执行机制会将所有数据都分发到单个 Reducer 进行单机排序。
2. 分桶优化思路
直接使用 ROW_NUMBER 的问题就是会将所有数据都分发到单个 Reducer 进行单机排序,在大数据量情况下单机排序性能会很差,好一点的情况是跑很久,数据
文章评论