当前位置: 首页
科技数码
定时任务执行效率低下?海量数据场景的架构优化指南

定时任务执行效率低下?海量数据场景的架构优化指南

热心网友 时间:2025-11-04
转载

假设我们每天会新增约100万条用户流水记录,这意味着每日新增的流水数据量大约在百万级别,月度新增数据则接近三千万条,而三个月下来,流水数据总量将攀升至亿级规模。

\

这是针对星球粉丝提问的一次回答。问题的核心可以简化为:

在设计用户会员积分体系时,每个用户会根据积分流水产生相应的分数,每月需对用户进行积分统计,并根据不同积分等级实施差异化业务处理。

数据假设如下:

假设总用户数在百万级别;每个用户每日新增一条流水记录,导致日增流水数据量约100万条,月新增流水约为三千万条,三个月累计的数据总量则达到亿条水平。

常见的解决方案是:

设置一个定时任务,在每月初进行一次性统计。

// (1) 获取所有用户ID列表
uids[] = select uid from t_user;

// (2) 遍历所有用户
foreach $uid in uids[] {
    // (3) 查询该用户近三个月的积分流水记录
    scores[] = select score from t_flow 
                 where uid=$uid and time within [最近三个月];
    
    // (4) 遍历积分流水记录
    foreach $score in scores[] {
        // (5) 计算总积分
        sum += $score;
    }
    
    // (6) 依据总积分执行相应业务逻辑
    switch(sum) {
        升级、降级、发优惠券、发奖励等业务操作;
    }
}

如果一个月的计算任务仅执行一次,可能会出现哪些潜在问题?

计算量巨大,数据处理量非常庞大,执行耗时较长。按照用户的实际情况来说,这类任务可能花费一到两天才能完成。

进一步分析:外部循环需处理百万级别的用户;内部循环则针对每个用户近三千万条流水记录;业务逻辑处理还需要与数据库进行十几次交互。

是否可以采用多线程并行处理的方式来优化?

是可以实现的,因为各个用户的流水处理彼此独立,没有耦合关系。

若采用多线程并行处理(比如按照用户拆分任务),可能存在哪些挑战?

每个线程都需要频繁查询数据库以执行业务处理,这很可能给数据库带来巨大压力,导致其不堪重负。

这类问题的优化方向应该从哪些方面入手?

针对同一份数据,要尽量减少重复计算次数;分散CPU计算时间,尽可能采用分布式处理方案,而不是集中式处理;同时也要设法降低单次计算的数据量。

如何有效避免对同一份数据的重复计算?

如上图所示,假设每个方格代表一个月的积分流水数据(约三千万条)。

当3月底进行计算时,需要统计1月、2月、3月三个月的九千万条数据;

到4月底再次计算时,又要重新查询2月、3月、4月这三个月的九千万条数据;

……

我们会发现,2月和3月的数据(图中粉色部分)被重复查询和计算了多次。实际上,每个月份的数据都会被重复计算3次。

改进方案是:新增一个月度积分流水汇总表,每月仅计算当月的增量数据。

flow_month_sum(month, uid, flow_sum)
每月底仅需计算当月分数,这样数据处理量就减少到原来的1/3,耗时也相应缩减了1/3;同时,只需将前两个月的流水数据相加,就能快速获得近三个月的总分(这个操作几乎不占用时间);

补充说明:这张表的记录数量与用户表一致,同样是百万级别。

如此一来,每一条积分流水记录就只会被计算一次。

如何合理分散CPU计算时间,同时降低单次计算的数据量呢?

业务需求是每月重新计算一次积分,但如果集中在某一天处理,数据量过于庞大,耗时太久。可以考虑将计算任务分摊到每一天执行。

如上图所示,将月度积分流水汇总表升级为日度积分流水汇总表。

把每月1次的集中计算分解为30次分散计算,每次计算的数据量减少到1/30,这样一来每次只需要几十分钟就能处理完毕。

更进一步,甚至可以每小时计算一次,这样每次计算的数据量又减少到1/24,每次处理时间就缩短到几分钟以内了。

虽然计算时间缩短了,但终究还是定时任务,能否实现积分流水的实时计算呢?

每天新增的百万条积分流水记录,完全可以通过实时累加的方式来实现“日积分流水汇总”。

可以利用DTS(或者canal)监控积分流水表的变化,当用户积分发生变化时,系统可以实时进行日积分累加。这样就能将原来每小时执行一次的定时任务,转换为“每时每刻”都在进行的实时计算。每天新增的百万条流水数据,对数据库写入压力来说,平均每秒也就十几次请求,完全能够轻松应对。

补充说明:如果无法使用DTS/canal,也可以考虑采用MQ消息队列来实现。

总结起来,对于这类需要一次性集中处理大量数据的定时任务,优化的核心思路包括:

针对同一份数据,尽量减少重复计算;分散CPU计算时间,尽可能采用分布式处理(甚至可以实现实时计算),而不是集中处理;同时减少单次计算的数据量。

通过以上方法对大数据量定时任务的执行时间进行优化,你是否已经掌握其中的要诀?

知其然,更要知其所以然。

理解优化思路比记住结论更为重要。

来源:https://www.51cto.com/article/828756.html

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
DeepSeek宣布永久降价 梁文锋大幅让利远超市场预期

DeepSeek宣布永久降价 梁文锋大幅让利远超市场预期

DeepSeek宣布其Pro模型API优惠将转为永久降价,调用成本大幅降低至原价的四分之一。同时,公司正进行高达500亿元的首轮融资,创始人梁文锋个人计划出资200亿元以强化控制权。降价与巨额融资相结合,旨在降低行业门槛、构建生态,并支撑其长期开源与AGI战略,展现了公司的长期主义视野。

时间:2026-05-23 22:20
国产600公斤推力涡扇发动机首飞成功 中国心实现自研突破

国产600公斤推力涡扇发动机首飞成功 中国心实现自研突破

5月23日,搭载国产F406涡扇发动机的气象无人机首飞成功。该发动机推力600公斤级,由我国自主研制,拥有完整知识产权,实现了中小推力高端涡扇发动机的自主可控。其具备高空高速稳定运行能力,填补了国内相关技术空白,将为无人机及低空经济发展提供可靠动力支撑。

时间:2026-05-23 22:19
小米米家空调巨省电Pro大1.5匹价格降至1868元

小米米家空调巨省电Pro大1.5匹价格降至1868元

2026年3月6日,备受期待的小米米家巨省电 Pro 空调 2026 款正式上市销售。作为新品,其大1 5匹型号的官方首发定价为2499元,性价比优势显著。 恰逢京东618年中购物节,这款新上市的空调迎来了绝佳的入手时机。消费者通过叠加平台提供的促销优惠与政府发放的节能补贴,最终到手价格可以做到更具

时间:2026-05-23 22:19
国产600公斤推力涡扇发动机成功完成首次飞行

国产600公斤推力涡扇发动机成功完成首次飞行

5月23日,我国自主研制的600公斤推力级F406涡扇发动机成功完成首次飞行试验。发动机驱动气象无人机平稳飞行并安全返航,各项参数稳定。此次试飞标志着我国在中小推力高端涡扇发动机领域实现了自主可控与国产化突破,该发动机将为低空经济和无人体系提供关键动力支撑。

时间:2026-05-23 22:18
国产600公斤推力涡扇发动机首飞成功核心技术自主研制

国产600公斤推力涡扇发动机首飞成功核心技术自主研制

5月23日,我国自主研制的600公斤推力级F406涡扇发动机成功完成首次飞行试验。该发动机以双发配置驱动一架先进气象无人机,全程工作平稳,安全返航。此次试飞标志着我国在中小推力高端涡扇发动机领域实现自主可控与国产化,将为低空经济与无人体系发展提供可靠动力。

时间:2026-05-23 22:17
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 日榜
  • 周榜
  • 月榜
热门教程
更多
  • 游戏攻略
  • 安卓教程
  • 苹果教程
  • 电脑教程