如何将SQLite3数据库更改刷新到磁盘?

3

我的应用程序运行在一个便携式的 Debian (5和8) 计算机上。这台计算机可能会在不可预测的时候失电。该应用程序频繁更新一个特定的 SQLite3 数据库,并立即刷新到磁盘,使用 sync() 命令。这样做是为了避免在更改完全写入磁盘之前断电导致数据库损坏。

这一直很好地运作,但现在的问题是 sync() 命令会将所有打开的文件的所有缓冲更改都刷新到磁盘上,从而导致系统其他部分减速。一种可能的解决方案是仅刷新关键文件的更改,例如该特定的数据库文件。但问题是,我无法访问文件描述符,并且找不到任何可以为我完成此操作的 SQLite3 函数。你有什么想法吗?


嗯,sqlite3的提交已经具备了所有需要的同步功能。 - Mat
在所有系统上都是这样吗?这与我的观察不太相符。如果我在提交更改后不调用sync(),我会得到损坏的数据库。 - pjaall
2
https://www.sqlite.org/atomiccommit.html - Mat
3
你可能也会在这里找到一些有用的东西:https://www.sqlite.org/howtocorrupt.html - Mat
1
我现在已经移除了全局flush,它与同步数据库文件有关。相反,我为其他需要与物理硬盘同步的文件添加了特定的flush。经过一堆测试,我仍然无法破坏数据库。所以看来你是完全正确的。谢谢你的帮助! - pjaall
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接