为什么 MySQL 更适合保存运行状态
1. 持久性更强
MySQL 通过事务日志、Redo Log、Binlog 等机制保障持久性。
2. Redis TTL 可能导致状态消失
Redis 中很多 Key 都有过期时间
3. MySQL 支持复杂查询
- 哪些任务仍是
RUNNING; - 哪些任务处于
RECOVERING; - 哪些任务超过时间窗口;
- 哪些任务带有 Pending Callback;
- 哪些任务恢复次数超限;
- 哪些任务属于特定类型;
- 哪些任务创建于某个时间范围。
MySQL 很适合执行这种结构化查询和分页扫描。
4. MySQL 有事务能力
一次任务完成可能需要同时更新:
- 状态;
- 最终答案;
- Reviewer 结论;
- Round 快照;
- 结束时间;
- Checkpoint;
- 版本号。
MySQL 可以在一个本地事务中保证:
- A - 原子性(Atomicity):
事务是一个不可分割的最小工作单元。就像原子一样,要么全做,要么全不做。 - C - 一致性(Consistency):
事务执行前后,数据必须保持合法的状态。比如转账前后,张三和李四的总钱数必须保持不变,不能凭空消失或增加。 - I - 隔离性(Isolation):
当多个用户或线程同时操作数据库时,他们的事务是相互隔离、互不干扰的。这就像多个并发任务各自在自己的独立空间里执行,避免数据混乱(如脏读、幻读)。 - D - 持久性(Durability):
一旦事务提交(Commit)成功,它对数据的修改就是永久性的。即使下一秒数据库服务器宕机、断电,重启后数据也不会丢失。