背景:用户的分日离线数据是数据部门每天统计完成后写入离线分日表中,那么写入的时候就会有时间差,大概凌晨-3点基本用户是看不到昨日的数据的,为了优化这个痛点,我们做了优化当昨日离线没有值的时候,我们会去redis实时数据(生命周期是3天都有)。虽然是业务相关的,但也体现了商业广告数据统计的维度:1.商品分天维度(一个商品按天统计-离线数据)。2.商品分时维度(一个商品一天各小时数据数据-离线/实时)。3.用户产品类型维度(该用户所有商品的推广数据)。
取数据逻辑:
有离线取离线,离线没有就会取缓存。
1.离线有数据:
当离线表有数据的时候,使用数据中心查看分成3中场景
场景1:只选择日期,不选择商品,日期开始结束不是同一天
离线数据取自 tdb_adstat.daily_data_adproduct_promote
造数据如图:
adstat日志,查询入参
返回结果:
场景2:选择日期,开始结束为同一天,不选择商品
数据中心查询如图:
数据取自tdb_adstat.hourly_data_adproduct_promote,如图:
adstat查询日志
结果返回:
场景3:选择日期,选择商品,日期开始结束不是同一天
离线数据取自tdb_adstat.daily_data_product_promote表,该表示按照promotionId查询,注意区分promotionid对应优店通查询条件
数据库造数据如图:
adstat查询日志
2.没有离线数据:
场景1:只选择日期,不选择商品,日期开始结束不是同一天
保证离线数据查询日志没有,在操作redis设置分日缓存
页面返回:
场景3:选择日期,选择商品,日期开始结束不是同一天
首选保证离线表没有数据,然后操作redis设置分日缓存(这种按日期取直接取分日缓存,不会sum分时缓存,同时缓存key设置按照promotionid)
redis造数据如图:
返回结果:
测试点:
除了redis的key要写对,有一些是到分日的,有一些是分时的,还有就是场景:离线没有取redis->离线有了取离线,有个动作变化,其他没有了。