假设您有一个程序,例如文本编辑器或文字处理器,可以写入用户创建的文件。 在崩溃,空间不足错误,突然断电,竞争状况等情况下,应采取什么步骤来保证数据丢失或损坏的最小风险?
保护重要数据的一个好的经验法则是
永远不要修改唯一的副本
对于文字处理器和文本编辑器,我相信创建“影子副本”(这可能不是技术术语)的标准是,它是进行所有更改的原始文件的副本。 您可以定期(或在用户请求时)强制进行保存,该保存包含对原始文件的修改。 这样的好处是,如果在任何时候出现故障,则总是至少有一个有效的数据副本。
真正的目标是实现原子性-操作只能成功或失败,永远不会有不完整的状态。 除了“影子副本”以外,还有许多其他方法可以实现原子性,但这就是我相信文本编辑器可以做到的方式。
对于类似的问题,我写了一个较早的答案 ,也适用于此。 这些步骤是:
对于今天的数千兆字节的机器来说,这也许已经过时了,但是我记得在Mac上进行开发时,我们曾经分配了一个内存块,该内存块足以执行保存操作。
如果内存不足,我们可以向用户发出警告,告知他/她内存不足,然后释放该块,以便进行实际的保存操作。
其他对保存用户数据很重要的功能是提供撤消功能-理想情况下是无限的撤消/重做操作。