Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多线程环境下的系统恢复_Java_Multithreading_Recovery - Fatal编程技术网

Java 多线程环境下的系统恢复

Java 多线程环境下的系统恢复,java,multithreading,recovery,Java,Multithreading,Recovery,如何在多线程环境中添加系统恢复?例如:如果您有一个系统,其中多个线程拾取文件并处理它们并将它们持久化到数据库中,那么如果您遇到数据库故障,系统将如何恢复 不想再次处理交易?根据您的系统设置,有许多不同的方法可以回答此问题。多一点解释会有帮助的。不过,我仍然提供了一个可能适用于您的示例 我可能会考虑一种将文件标记为正在处理的方法(即数据库记录或移动到其他目录以处理该文件)。然后,我会在处理文件时将其标记为已完成(移动它或以其他方式进行) 在完成处理并将文件标记为已完成后,仍有可能出现故障。但是,这

如何在多线程环境中添加系统恢复?例如:如果您有一个系统,其中多个线程拾取文件并处理它们并将它们持久化到数据库中,那么如果您遇到数据库故障,系统将如何恢复
不想再次处理交易?

根据您的系统设置,有许多不同的方法可以回答此问题。多一点解释会有帮助的。不过,我仍然提供了一个可能适用于您的示例

我可能会考虑一种将文件标记为正在处理的方法(即数据库记录或移动到其他目录以处理该文件)。然后,我会在处理文件时将其标记为已完成(移动它或以其他方式进行)

在完成处理并将文件标记为已完成后,仍有可能出现故障。但是,这将限制恢复时需要查看的文件数量

如果可以跟踪在同一数据库中读取的文件,则可以批处理所有数据库更改以及标记文件为已读的标志。在完成更改并标记文件之前,可以避免提交连接


这还存在一个问题,即数据库是否在提交过程中崩溃,但同时您可能必须在此实例中恢复备份,然后重新运行所有文件。

取决于。。。您希望保留未完成的工作还是放弃这些工作?这在很大程度上取决于您的情况,并且有很多策略。例如:抓取文件->在数据库中记录正在进行的操作->处理和持久化->从日志中删除操作->删除文件。将未处理的文件与数据库备份一起包含在备份中,以防万一。在恢复时,重新处理日志中的操作,注意您的数据库和代码能够覆盖部分持久化的数据,而不是复制数据。正确使用事务和数据库日志也很有用。一旦我的投票限制重置,+1;这是一种更好的表达我在评论中所说内容的方式。如果文件在处理后被删除,包括与db备份同步的备份中未处理的文件,则可以更轻松地从备份中恢复。