Harddrive bit-rot does happen。我正在将SQLite用于具有相当关键数据的项目。显然,我将定期备份数据库,但 SQLite校验和数据吗?
我已经阅读了PRAGMA integrity_check,但无法确切地说它是否对实际数据进行了完整性检查。页面“How To Corrupt An SQLite Database File”没有真正提到关于硬盘上的位腐烂的事实,这就是我要问的原因。
此外,我正在处理的数据库将是一个可索引的仅附加日志。一种选择是我定期轮换数据库并创建每个旋转文件的MD5总和。但也许这工作太多了......
任何意见都赞赏。
答案 0 :(得分:3)
通过阅读integrity_check文档,我会说不可以保证检测到只影响用户数据的损坏(由于媒体上未检测到的位错误)。
由于您的数据是仅附加日志,因此您可以轻松完成。一种方法是在单独的硬盘驱动器上写入文本文件日志,该硬盘驱动器包含数据每一行的哈希值(MD5或其他)。然后,您可以使用该哈希日志来验证真实数据库的内容。显然,备份将是您计划的一个组成部分。
答案 1 :(得分:2)
偶然发现了这件事;我可以使用fzec Python包来恢复损坏的数据。每行都有多个“fzec块列”以从损坏中恢复。看起来非常整洁。