数据分析中可视化图表缓存策略

数据分析中可视化图表缓存策略

每一次ad-hoc查询,均是会占用有限的计算资源,而OLAP 系统在现有技术下,并不能支撑很高的查询并发,为了有效改善这个问题,在查询时间范围内数据未发生变化或者变化量小,有效运用缓存可以有效提高查询效率和用户体验

1. 问题

单纯的N小时缓存失效的机制,会导致数据刷新不及时,造成数据理解上的偏差:

现象:在相同指标在不同图表数据不一致,尤其是在同一个DashBoard内时,让人难以理解;
原因:图表在不同时间创建和缓存的,在时间差内,相关的数据发生了变更

2. 方案

2.1 时间机制

在用户行为分析中,相关分析是离不开时间范围的,那么可以

根据时间范围,适当调整缓存时效:

  • 图表中相关指标的数据已经不会发生变化,例如查询的时间范围距离现在够久(上月的相关指标,去年的指标),这样的指标缓存几天都没问题,因为数据已经不会发生变更
  • 如果相关分析是实时分析当前状态的,比如实时PV,当天分钟级指标,那么缓存机制都不应该加上去

实现方案:对分析条件中的时间进行判断,根据不同场景设置不同的时效

2.2 数据量变化阀值机制

在数据变更量在一定范围内时,业务上允许介绍一定的误差。假设 分析指标中相关事件从缓存时开始计数,对于的事件pv的变化量 未达到 前7日平均pv 的 1% ,则不进行缓存刷新。

以下为实现方案:

1.数据流处理时,记录每个event 的持续累加次数:(total_pv) 和 过去N日的日pv:(20181201\_pv,20181202\_pv....dayN\_pv)

  • 过去N日的平均pv: avgPV= SUM(day1~n_pv)/N
  • 缓存的时间点的瞬时pv:pvx

2.后续在进行查询时,会检索查询条件中所有事件,如果其中任意事件触发以下规则,则清理缓存进行重新查询:

1
2
- 假设变化量阀值设为  %1
- 判断是否刷新缓存:(持续累积次数total_pv - 缓存时间瞬时pvx)/ 过去N日的平均PV >= 1%

对于任意事件,同样的计算规则,不针对单个事件,对所有事件进行持续累积。

3. 备注

  • 流处理过程中的pv值需要缓存起来,且数据流每批次处理需要对所有事件的pv值进行更新,对流处理有一定性能影响
  • 每次做分析查询,需要对查询中所包含的全部事件进行检索和规则计算,对查询性能有一定影响
  • 分析查询结果缓存时需要对所有事件的瞬时PV进行查询并且记录redis,对查询性能有一定影响
  • 方案能降低 问题的出现概率,无法完全缓存导致数据不一致的问题,需要在产品层面引导用户;

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×