V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
xmsz
V2EX  ›  问与答

批量执行任务有什么好一点的方案吗?

  •  
  •   xmsz · 2023-06-15 12:05:24 +08:00 · 420 次点击
    这是一个创建于 530 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求

    • 创建任务执行涉及定时
    • 单次任务执行数据量在 50w 条左右

    有没有好一点方案解决这个需求

    我们的尝试

    第一种:默认做法,提前生成数据库任务记录

    创建后 -> 数据库创建 50w 条数据 -> 定时任务执行

    好处

    1. 简单
    2. 相当于提前缓存数据,后续只需要要简单取和改

    坏处

    1. 如果修改了内容,就要重新生成,逻辑可能比较麻烦
    2. 生成数据时候对数据库压力太大了,如果延迟那又减少了实时性

    第二种:仅创建定时任务记录,定时扫表

    创建定时任务 -> 定时执行 -> 取表中未执行数据 -> 执行,并标记已执行 -> 循环

    好处

    1. 也是简单
    2. 不用提前生成,减少压力

    坏处

    1. 数据可能会变动,因为筛选结果可能会有变化
    2. 每次执行需要扫表,很蛋疼一条计划 50w 次要查 50w 次,就算设置多线程 10 个,一条计划也要查 10w 次,更不用说每天至少几千条计划。而且每次查询对数据库压力也非常大

    还有一些网上的方案,我看不太懂

    也有一些其他想法,不知道可不可行

    从思路上,实际上还是储存、查询在稳定、实时、性能间平衡的问题,因为程序执行没什么压力(有也很好解决)

    一个就还是走提前生成,然后解决数据库性能问题(加钱),或者丢给队列做(但不确定一次性丢 50w 包会不会也很慢?)

    一个就是动态读取

    1 条回复    2023-06-16 13:49:42 +08:00
    julyclyde
        1
    julyclyde  
       2023-06-16 13:49:42 +08:00
    消息队列?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3406 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 11:55 · PVG 19:55 · LAX 03:55 · JFK 06:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.