游乐游手机版
首页/科技数码/文章详情

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

时间:2025-11-04 10:59
假设用户日均1条流水,也就是说日增流水数据量在100W级别,月新增流水在3kW级别,3个月流水数据量在亿级别; 这次回答星球内粉丝的提问。问题抽象:用户会员系统;用户会有分数流水,每个月要做一次分数

假设我们每天会新增约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
上一篇中小到大型企业如何选择适合的泛云主机安全方案 下一篇Paimon小文件问题解决方案:5步优化技巧与实战
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
OpenClaw手机App上线,结果翻车了
科技数码 · 2026-07-01

OpenClaw手机App上线,结果翻车了

OpenClaw 官方宣布,已正式推出 iOS 和 Android 原生移动 App,用户如今可以在手机上使用这款主打“能真正帮你做事”的个人 AI 助手。官方在 X 上给出的定位也很直接:把 Agent 放进口袋里,让用户可以在移动端处理频道消息、任务和回复。从功能上看,OpenClaw 移动端并

优必选CEO周剑:家庭机器人生态核心投入过半精力
科技数码 · 2026-07-01

优必选CEO周剑:家庭机器人生态核心投入过半精力

先说几个核心判断:优必选正在布局一盘长远战略。创始人兼CEO周剑在近期一场媒体沟通会上,直接亮出了公司未来的发展路线——工业、商用、家庭陪伴机器人三条业务主赛道并行推进,现阶段每条线各占约一半精力。一边是已经能够稳定创造收入的工业场景,另一边则是他眼中“最具想象力与未来空间”的家庭陪伴领域。工业人形

CPO/NPO/OIO开启封装级光连接价值空间,技术路线尚未收敛
科技数码 · 2026-07-01

CPO/NPO/OIO开启封装级光连接价值空间,技术路线尚未收敛

6月30日,申银万国在光连接系列研报中重点指出,MPO光连接器领域的投资机会值得高度关注。通俗来说,随着AI算力集群持续扩张,光互联升级带来的连锁效应——数据中心光纤通道数量、前面板端口密度、机柜内光纤管理复杂度——均在同步攀升。光连接器的角色早已超越传统的低价值标准件,如今它直接决定着链路插损、可

龙岗AR实景剧本游内测体验短板有效破解之道
科技数码 · 2026-07-01

龙岗AR实景剧本游内测体验短板有效破解之道

在今年龙岗区第二届人工智能与机器人发展大会上,区级部门一次性推出了7个AI“龙搭子”。其中,名为“龙导游”的成果成为文商旅融合领域的核心亮点。据南都N视频记者了解,依托“龙导游”打造的全区全域AR实景剧本游“龙岗大陆”,已在今年五一假期发布了内测版本。经过一个月市场验证后,该项目正式启动面向全社会的

南下资金6月30日净买入中芯国际与建滔积层板
科技数码 · 2026-07-01

南下资金6月30日净买入中芯国际与建滔积层板

6月30日,南下资金持续大举买入港股,单日净流入金额高达58 95亿港元。接下来,我们直接盘点哪些个股获得资金青睐、哪些遭到减持: 净买入方面,中芯国际领跑全场,单日吸金19 33亿港元;建滔积层板紧随其后,净买入10 59亿港元;腾讯控股获得7 65亿港元净流入;智谱(02513 HK)也有6 5