当前位置:   article > 正文

大数据高并发场景下存量/增量指标实时计算方法_大数据教育行业的实时指标计算

大数据教育行业的实时指标计算

业务场景:

设备每10分钟上报一次A指标数据,需要对设备的A指标数据进行日增量/存量打标。即对于A指标,标记设备是存量设备还是增量设备。
日存量/增量判断标准:将当日设备上报A指标数据的总次数,与该设备前30天内上报的A指标数据的总次数进行对比。假如前30天内总次数超过n次且当日上报A指标数据的总次数超过n次则为该设备打存量标记。假如前30天内总次数小于n次且当日上报A指标数据的总次数超过n次则为该设备打增量标记。

设备数量上百万,且都按每10分钟一次进行指标数据上报。如何在大数据量且高并发的场景下快速的对设备进行存量/增量标记。

解决方式一:

在设备每次上报时进行打标。
使用redis缓存,一个key对应一个设备近30天每天的A指标数据出现次数,可以是一个json数组:

[{'day':'yyyyMMdd-1',‘aCount’:n-1},{'day':'yyyyMMdd-2',‘aCount’:n-2}...,{'day':'yyyyMMdd-30',‘aCount’:n-30},{'day':'yyyyMMdd-n',‘aCount’:n-current}]
  • 1

每次上报都到redis中查询对应key,对json数组进行维护,删除前30天之外jsonobject,同时对30天内的指标总数进行累加。查询当日的jsonobject中A指标数据总数,进行对比并做存量增量判断。最后将当日A指标总数进行更新,对于当日第一次A指标上报进行json数组的追加操作,第二次以上进行json数组的替换操作。整个key设置31天过期。

解决方式二:

在多线程和高并发场景下,如果因为前置组件发生消息堆积,导致一批数据中存在多个同一设备多条A指标数据报文。而有多个线程同时对某个设备多条A指标数据报文进行处理,使用方式一会存在A指标数据计数总量不准确的情况。考虑在A的整个逻辑之外增加一个基于redis的有过期时间的分布式锁。当某个线程对指定设备的A指标进行计数和判断时,加分布式锁,其他线程遇锁等待,直到锁释放或者过期,再执行增量/存量判断。

解决方式三:

使用定时任务离线异步的进行处理。持久化每日所有设备的A指标数据发生次数,某个时间点对当日所有设备进行判断,分别比对其前30天的指标总次数,进行打标。

该方法有如下不足:
1.需要开辟更多磁盘空间。
2.定时任务执行时间有限制,需慎重选择。
3.假如有后置任务需要依赖存量/增量标识,会存在定时任务执行超时或者执行异常导致后置任务受影响的可能。

如有更简单高效方法欢迎留言~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/401806
推荐阅读
相关标签
  

闽ICP备14008679号