1. 为什么需要全局字典
当业务标签越来越多时,宽表标签计算的方案将不再适合,因为当列越多时,更新效率将会越慢。一种优化方案是通过对标签表构建索引,将用户ID编码后以 Bitmap 格式保存(一般使用 RoaringBitmap 进行压缩存储),将关系运算转化 Bitmap 的交并差运算,进而加速实时计算性能。然后用户ID可能是字符类型的,由于 Bitmap 只能保存整数信息,因此需要先将用户ID进行整数编码。对用户ID进行编码不仅可以方便存储进 Bitmap,还可以使ID信息保持连续性。在这将用户ID进行整数编码的过程就是构建全局字典的过程。
那全局字典是什么呢?全局字典其实就是一个比较大的 Map。Map 的 KEY 保存了用户ID原始字符类型的值,而 VALUE 保存了对用户ID进行整数编码后的整型值。有了全局字典之后就可以实现对原始字符类型值的转化,再把转化后的整型值存入 Bitmap。
2. 构建全局字典
业界主要有两种构建全局字典的方法:第一个是基于 Trie 树的全局字典,第二种是基于 row_number 的全局字典。今天我们主要讲的就是基于 row_number 的全局字典。假设我们有一个每日活跃用户表 dim_pub_user_di
文章评论