以“安全”方式更新磁盘上的两个相关文件?
收藏

我有两个相互关联的二进制文件(也就是说,当一个文件的记录被更新时,另一个文件的匹配记录也应该被更新)。这两个文件都是存储在磁盘上的二进制文件。
更新将如下所示:
UpdateFirstFile()--第一个文件已更新…..
UpdateSecondFile()--第二个文件已更新…
我应该使用什么方法来确保两个文件都被更新或没有任何文件被更新?
两个文件都是平面文件(每个文件大小为20[MB])。我知道一个数据库可以解决这个问题,但是我注意到由于开销的原因(每个表需要超过20[MB]的存储空间,而且我的空间不足,有1000个这样的文件…)。
有什么想法吗?


最佳答案:

一般的方法是用某种回滚日志实现transactions
例如,您可以使用一个单独的文件来记录每个文件中受更新影响的每个部分的当前内容。交易完成后,删除日志文件。
启动事务时日志文件的出现意味着另一个事务处于挂起状态或已被中断。在这种情况下,您可以使用日志的内容来反转中断之前所做的任何文件更改。
这样就可以确保更新操作的atomicity。我将把ACID的任何其他部分留给读者作为练习。
请记住,用正确的方法进行此操作比听起来更困难,特别是当您有多个进程更新相同的文件时。

公众号