假设您有一个程序,比如文本编辑器或字处理器,可以写入用户创建的文件。应采取哪些步骤来保证在面临崩溃、空间不足错误、突然断电、竞争条件等情况下数据丢失或损坏的风险降至最低?
发布于 2009-07-21 00:21:57
我之前写了一个answer来解决类似的问题,同样也适用于这里。具体步骤如下:
使用新的数据节点写入临时文件directory.
发布于 2009-07-21 00:20:52
保护重要数据的一个很好的经验法则是
从不修改唯一的副本
在文字处理程序和文本编辑器的情况下,我认为创建“卷影副本”(这可能不是技术术语)是标准的,它是进行所有更改的原始文件的副本。您可以定期(或在用户请求时)强制保存,其中包含对原始文件的修改。这样做的好处是,如果在任何时刻出现故障,始终至少有一个有效的数据副本。
真正的目标是实现原子性-操作只能成功或失败,永远不会有不完整的状态。除了“卷影复制”之外,还有许多其他方法来实现原子性,但我相信文本编辑器就是这样做的。
发布于 2009-07-21 00:14:48
使用SQLite
好吧,好吧,使用DB作为文本编辑器是很奇怪的,但是文字处理器有如此多的状态,所以它可能有一定的意义。当然,作为一种适用于多种应用程序的存储格式,它也很有意义。在SQLite维基网站上有一个关于将其用于撤消/重做日志的page。
对于文本编辑器,您可以使用数据库所使用的技术:预写日志或回滚日志,以及与磁盘的良好提交同步。或者,您可以存储每个文件的两个版本。
https://stackoverflow.com/questions/1156646
复制相似问题