数据飘移问题
说明
同一个业务日期数据中包含前一天或后一天凌晨附近的数据,或者丢失当天的变更数据。
举例说明: dt表示时间,如2022年7月17日 ,
举例一:在2022年7月17日59分的时候,一个业务出现了,这是如果业务量特别大的时候,他在2022年7月18日才存储到数据库中,这时候呢?本应存储在17日的数据存储在了18日,这就是数据漂移。
举例二: 淘宝我在2022年7月17日58分的时候下了个订单买了个手表,7月18日我完成了付款,这样对帐算钱,以一天为单位的时候,就会有有问题,这个也是数据漂移。
解决方法
1 用多个时间进行统计。
举例,一个时间是事件时间,另一个时间是自然时间。连续统计两个自然日的同一个事件时间。
2 让每一天的数据量大点,以事件时间为切分。
这样的缺点是,比如说,17日买了手表,18日早上凌晨退款,这样这两条数据会到同一天,下游在统计支付订单状态会有问题。
实战
淘宝双十一,这个我理解的可能不对,我按照我的理解简单描述下,
首先认识3个时间
入数据库时间,事件时间,日志时间。
在双十一晚上11点59分到时候,大量的客户会下单,然后呢,由于要调用支付宝的接口,这些数据存储到数据库的时候已经是第二天了,这不就数据漂移了?
正常的思路 用解决方法中的第一种,读两天数据,然后用事件时间判断是不是双十一那天的,但注意不只是一个时间发生了数据迁移,他的支付时间,订单时间,成功,等等,都会产生漂移,而且他的状态是更新了多次,如本来订单是17日,然后18日订单状态发生了改变,然后直接where 订单日期=17日 order by 入库时间 limit 1,最后拿这个和日志时间17日 18日前后15分钟的数据进行全外连接解决。
发布评论