假设我有一个基于外部条件执行某些活动的进程,它可以随着时间的推移而修改,例如基于存储在数据库中的数据。如果这样的进程随后被强制终止并重新启动,数据将不一致 - 例如,有关服务状态的信息将不充分或部分同步的数据分支将是多余的。
如何处理这种情况?我应该在进程启动时检查一些有线不一致并在主逻辑开始之前对数据进行规范化,还是我可以检测到中止信号然后进行清理?我不担心进程获得的资源,但它已经能够执行未完成的更改(尽管在进程新启动时可以大量检测到)。
此类问题一般通过以下方式解决:
像这样,您始终可以从最后一次成功执行的操作之后的操作开始重新启动该过程,然后从那里继续。
您没有提及您的进程做什么或它维护的那种状态,例如您是否正在写入数据文件,在数据库中插入/更新/删除行?
如果您正在谈论的可能不一致的数据存储在数据库中,则处理此问题的通常方法是确保您的所有数据更改都在代表原子工作单元的事务中处理。
这样,如果进程在处理事务的过程中被终止,数据库将检测到这一点并自动撤消到该点所做的更改,将您的状态恢复到之前的(一致的)时间点。
因此,使用事务应该确保数据库状态始终保持一致,并且应该需要最少的一致性检查。