推广项目新架构新增清洗历史数据

1、背景:

      数据在使用的过程中会慢慢衰减,原因是数据使用频繁会被冻结一段时间和其他一些造成数据某个时间点不可用的未知因素,基于这中现象有必要设计清洗历史数据。我们当前原始清洗过程只是负责获取基本信息,因为历史数据的清洗会出现获取基本信息后不能做任务,所以我的设计将清洗历史数据分成初次清洗和二次清洗两个阶段。初次清洗是获取基本信息,二次清洗是再从中提取出可以做任务的数据。

2、设计逻辑:

  历史数据按每个月分三部分备份,例如:his_clean_t2018111,his_clean_t2018112,his_clean_t2018113

       历史数据初次清洗是将每部分历史数据数据按照关键字段去重后存储到old_clean_t,工程xx-ck-clean分发数据到工程xx-rbt-clean获取初次清洗结果后存储到临时表old_short_succ_t,临时表old_short_error_t,为了保证数据不重复分发将已经分发的数据存储到临时表old_short_run_t,最后将基本信息持久化到表old_used_t。

       历史数据二次清洗是将表old_used_t的数据插入到表old_used_task_t,如果已经存在的有效数据是不需要二次清洗的,所以二次清洗前需要将表old_used_task_t存在已经有效的数据删除过滤。工程xx-ck-task分发数据到工程xx-rbt-task获取二次清洗有效的数据uuid存到到Redis,最后将Redis的uuid关联到表提取出二次清洗的有效数据存储到最终做任务的表cookie_used_t。

3、设计项目:

分发初次清洗数据:xx-ck-clean;

初次清洗:xx-rbt-clean;

分发二次清洗数据:xx-ck-task;

二次清洗:xx-rbt-task

4、数据维护SQL:

-- 自动长度过长修改内容
UPDATE his_clean_t2018113 SET ua='HUAWEI-ARS-TL00__weibo__7.3.0__android__android8.1.0'
WHERE LENGTH(ua)>200;
-- 插入数据初次清洗
SET@uuid=2018111010000000000;
INSERT INTO old_clean_t(`uuid`,`cki`,`cks`,`ckua`,`ckaid`,`ckuid`,`ckfrom`,`ckgsid`)
SELECT @uuid:=@uuid+1 uuid,i,s,ua,aid,uid,`from`,`gsid` FROM his_clean_t2018111 GROUP BY gsid;
SET@uuid=2018112010000000000;
INSERT INTO old_clean_t(`uuid`,`cki`,`cks`,`ckua`,`ckaid`,`ckuid`,`ckfrom`,`ckgsid`)
SELECT @uuid:=@uuid+1 uuid,i,s,ua,aid,uid,`from`,`gsid` FROM his_clean_t2018112 GROUP BY gsid;

-- 查询
SELECT COUNT(1) FROM old_clean_t;
SELECT COUNT(1) FROM old_clean_t WHERE state=0;
SELECT COUNT(1) FROM old_clean_t WHERE state=1;
SELECT COUNT(1) FROM old_clean_t WHERE state=2;
SELECT COUNT(1) FROM old_short_run_t;
SELECT COUNT(1) FROM old_short_error_t;
SELECT COUNT(1) FROM old_short_succ_t;
SELECT COUNT(1) FROM old_used_t;
SELECT COUNT(1) FROM old_used_task_t;
-- 清理
DELETE FROM old_clean_t;
DELETE FROM old_used_task_t;

-- 插入数据二次清洗
INSERT INTO old_used_task_t(uuid,cki,cks,ckua,ckaid,ckuid,ckfrom,ckgsid,cuid,clevel,cvip,cnv,cfollower,cfriend,carticle,cheader)
SELECT uuid,cki,cks,ckua,ckaid,ckuid,ckfrom,ckgsid,cuid,clevel,cvip,cnv,cfollower,cfriend,carticle,cheader FROM old_used_t;
-- 删除二次清洗中已经有效的(已经有效的数据不用二次清洗)
DELETE outt FROM old_used_task_t outt INNER JOIN cookie_used_t cut ON outt.cuid=cut.cuid;
-- 二次清洗后的有效数据存放再redis,执行程序插入数据到cookie_used_t

猜你喜欢

转载自www.cnblogs.com/xx0829/p/11647196.html
今日推荐