需求
- 创建任务执行涉及定时
- 单次任务执行数据量在 50w 条左右
有没有好一点方案解决这个需求
我们的尝试
第一种:默认做法,提前生成数据库任务记录
创建后 -> 数据库创建 50w 条数据 -> 定时任务执行
好处
- 简单
- 相当于提前缓存数据,后续只需要要简单取和改
坏处
- 如果修改了内容,就要重新生成,逻辑可能比较麻烦
- 生成数据时候对数据库压力太大了,如果延迟那又减少了实时性
第二种:仅创建定时任务记录,定时扫表
创建定时任务 -> 定时执行 -> 取表中未执行数据 -> 执行,并标记已执行 -> 循环
好处
- 也是简单
- 不用提前生成,减少压力
坏处
- 数据可能会变动,因为筛选结果可能会有变化
- 每次执行需要扫表,很蛋疼一条计划 50w 次要查 50w 次,就算设置多线程 10 个,一条计划也要查 10w 次,更不用说每天至少几千条计划。而且每次查询对数据库压力也非常大
还有一些网上的方案,我看不太懂
也有一些其他想法,不知道可不可行
从思路上,实际上还是储存、查询在稳定、实时、性能间平衡的问题,因为程序执行没什么压力(有也很好解决)
一个就还是走提前生成,然后解决数据库性能问题(加钱),或者丢给队列做(但不确定一次性丢 50w 包会不会也很慢?)
一个就是动态读取