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

348 天前
 xmsz

需求

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

我们的尝试

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

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

好处

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

坏处

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

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

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

好处

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

坏处

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

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

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

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

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

一个就是动态读取

373 次点击
所在节点    问与答
1 条回复
julyclyde
347 天前
消息队列?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/948932

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX