为什么 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)成功,它对数据的修改就是永久性的。即使下一秒数据库服务器宕机、断电,重启后数据也不会丢失。