背景:将用户宽表重构,其中指标包含收藏数、转发数等内容,需要把每天全量数据展示出来,又因全量数据量太大(),将每天的新更新的数据单独写入一张表,存redis。
思路:1、需求包含有类似情形的好几个指标,如:1、3、7、30、45天收藏数、转发数等;
2、将有相似情形的指标做一张中间表,将涉及维度1、3、7、30、45天的指标拼接为1个字段,从而不用再写冗杂的数据逻辑,如:
- 之前的写法:每一个维度指标都会出具一个字段
collect_work_1day | all_forwarduserwork_3day |
---|---|
111 | 222 |
- 改变后的写法:包含所有类似行为收藏、转发等
behavior_content |
---|
all_forwarduserwork=7:1;30:1&collect_work=7:28;30:28&listen_work=30:3;7:3 |
发现问题:到上一步结束全部输出到全量表后(以下叫a表),着手准备更新到每天新增或修改的数据的表内(以下叫b表),至此,会发现输出到b表的数据量特别大(690万左右),推断表内有大量重复数据,排查后发现,拼接字段behavior_content中由于拼接顺序随机,导致很多数