国内最专业的IT技术学习网

UI设计

当前位置:主页 > UI设计 >

处理亿级数据的“定时任务”,如何缩短执行时

发布时间:2019/08/28标签:   数据    点击量:

原标题:处理亿级数据的“定时任务”,如何缩短执行时

持续答水友发问。成绩形象: 用户会员体系; 用户会有分数流水,每个月要做一次分数统计,对差别分数品级的会员做差别营业处置;数据假定: 假定用户在100w级别; 假定用户日均1条流水,也就是说日增流水数据量在100W级别,月新增流水在3kW级别,3个月流水数据量在亿级别;罕见处理计划:用一个准时义务,每个月的第一天盘算一次。//(1)查问出全部用户uids[]=selectuidfromt_user;//(2)遍历每个用户foreach$uidinuids[]{//(3)查问用户3个月内分数流水scores[]=selectscorefromt_flowwhereuid=$uidandtime=[3个月内];//(4)遍历分数流水foreach$scoreinscores[]{//(5)盘算总分数sum+=$score;}//(6)依据分数做营业处置switch(sum)进级升级,发优惠券,发嘉奖;}一个月履行一次的准时义务,会存在甚么成绩?盘算量很大,处置的数据量很大,耗时良久,依照水友的说法,须要1-2天。画外音:外层轮回100W级别用户;内层轮回9kW级别流水;营业处置须要10几回数据库交互。可弗成以多线程并行处置?能够,每个用户的流水处置不耦合。改成多线程并行处置,比方依照用户拆分,会存在甚么成绩?每个线程都要拜访数据库做营业处置,数据库有能够扛不住。这类成绩的优化偏向是: 统一份数据,增加反复盘算次数; 摊派CPU盘算时光,只管疏散处置,而不是会合处置; 增加单次盘算数据量;怎样增加统一份数据,反复盘算次数?如上图,假定每一个方格是1个月的分数流水数据(约3kW)。 3月尾盘算时,要查问并盘算1月,2月,3月三个月的9kW数据; 4月尾盘算时,要查问并盘算2月,3月,4月三个月的9kW数据; …会发觉,2月和3月的数据(粉色局部),被反复查问和盘算了屡次。画外音:该营业,每个月的数据会被盘算3次。新增月积分流水汇总表,每次只盘算当月增量:flow_month_sum(month,uid,flow_sum) 每到月尾,只盘算当月分数,数据量增加到1/3,耗时也增加到1/3; 同时,把前2个月流水加和,就能失掉近来3个月总分数(这个举措简直不花时光);画外音:该表的数目级和用户表数据量分歧,100w级别。如许一来,每条分数流水只会被盘算一次。怎样摊派CPU盘算时光,增加单次盘算数据量呢?营业需要是一个月从新盘算一次分数,但一个月会合盘算,数据量太大,耗时太久,能够将盘算摊派到天天。

版权信息Copyright © IT技术教程 版权所有    ICP备案编号:鲁ICP备09013610号