这是一个非常常见的场景:某个进程希望每 30 分钟左右在服务器上删除一个文件。很简单,对吧?好吧,我可以想到很多可能出错的方法。
例如,处理一个文件可能需要多于或少于 30 分钟,因此一个新文件可能会在我完成前一个文件之前到达。我不希望源系统覆盖我仍在处理的文件。
另一方面,文件很大,因此需要几分钟才能完成上传。我不想开始处理部分文件。这些文件只是通过 FTP 或 sftp(我的偏好)传输的,因此操作系统级别的锁定不是一种选择。
最后,我确实需要将文件保留一段时间,以防我需要手动检查其中一个(用于调试)或重新处理一个。
我见过很多临时的方法来改组上传文件、交换文件名、使用日期戳、触摸“指示符”文件以帮助同步等等。我还没有看到一个全面的“算法”,用于处理处理并发性、一致性和完整性的文件。
所以,我想在这里利用群众的智慧。有没有人见过一种真正防弹的方法来处理批处理数据文件,这样它们就不会过早处理,不会在完成之前被覆盖,并在处理后安全保存?