知识卡片
分表存储与汇聚表的两级设计
内容
把所有标签塞进一张大宽表会拖慢每天的ETL、也不便于新增标签类型,但如果按维度拆成多张分区表,又会让”查某个用户身上全部标签”这个常见需求变得要多表join。解法是两级设计:底层按维度分表存储,再额外做一张按userid聚合的标签汇聚表,专门服务”输入一个用户id查全部标签”这类读取场景。本质是承认”写优化的表结构”和”读优化的表结构”往往不是同一张表,宁可多算一次汇聚,也不让查询方去拼多张表。
参考来源
- 位置:《用户画像:方法论与工程化解决方案》第3章《标签数据存储》(源文件:_epub-src/OEBPS/text00032.html)
- 结论依据:原文围绕“在3.1.2节的案例中,用户的每个标签都插入到相应的分区下面,但是对一个用户来说,打”给出定义、场景或处理方式,支撑卡片对“分表存储与汇聚表的两级设计”的概括。
- 原始内容:在3.1.2节的案例中,用户的每个标签都插入到相应的分区下面,但是对一个用户来说,打在他身上的全部标签存储在不同的分区下面。为了方便分析和查询,需要将用户身上的标签做聚合处理。紧接3.1.2节的案例,下面讲解标签汇聚的开发案例(见图3-4)。