假设您有一个程序,如文本编辑器或文字处理器,可以写入用户创建的文件。面对崩溃、空间不足错误、突然断电、竞争条件等,应采取哪些步骤来确保将数据丢失或损坏的风险降至最低?
问问题
162 次
4 回答
1
保护重要数据的一个好的经验法则是
永远不要修改唯一的副本
在文字处理器和文本编辑器的情况下,我认为创建“卷影副本”(这可能不是技术术语)是标准,它是进行所有更改的原始文件的副本。定期(或当用户请求时)您可以强制保存包含对原始文件的修改。这样做的好处是,如果任何时候出现故障,总是至少有一个有效的数据副本。
真正的目标是实现原子性——一个操作只能成功或失败,永远不会有不完整的状态。除了“影子副本”之外,还有许多其他方法可以实现原子性,但我相信文本编辑器就是这样做的。
于 2009-07-21T00:20:51.657 回答
0
我为同样适用于此处的类似问题写了一个较早的答案。步骤是:
- 用新数据写入临时文件
- 将临时文件移动到原始文件目录中的备份文件。
- 执行备份和原始文件的原子交换(Windows 中的 File.Replace 或 Unix 中的交换 inode)。
- 删除备份(现在是原始)文件。
于 2009-07-21T00:21:56.633 回答
0
这对于今天的多 GB 机器来说可能已经过时了,但是当我在 mac 上开发时,我记得我们曾经分配一个足够大的内存块来执行保存操作。
如果我们的内存不足,我们可以给用户一个他/她内存不足的警告,然后释放那个块以便实际的保存操作可以发生。
其他对保存用户数据很重要的功能是提供撤消功能——理想情况下是无限制的撤消/重做。
于 2009-07-21T00:26:15.573 回答