Linux 如何将SQLite3数据库更改刷新到磁盘?
我的应用程序运行在便携式Debian(5和8)计算机上。这台计算机可能会在不可预知的时间断电。应用程序经常使用Linux 如何将SQLite3数据库更改刷新到磁盘?,linux,sqlite,debian,Linux,Sqlite,Debian,我的应用程序运行在便携式Debian(5和8)计算机上。这台计算机可能会在不可预知的时间断电。应用程序经常使用sync()命令更新特定的SQLite3数据库,并立即刷新到磁盘。这样做是为了避免数据库损坏,这会在更改完全写入磁盘之前电源消失时发生 这一直运行得很好,但现在的问题是sync()命令将所有打开的文件的所有缓冲更改刷新到磁盘。这会导致系统其他部分的速度减慢。一种可能的解决方案是只刷新关键文件更改,例如此特定数据库文件。但问题是;我该怎么做?我无法访问文件描述符,也找不到任何SQLite3
sync()
命令更新特定的SQLite3数据库,并立即刷新到磁盘。这样做是为了避免数据库损坏,这会在更改完全写入磁盘之前电源消失时发生
这一直运行得很好,但现在的问题是
sync()
命令将所有打开的文件的所有缓冲更改刷新到磁盘。这会导致系统其他部分的速度减慢。一种可能的解决方案是只刷新关键文件更改,例如此特定数据库文件。但问题是;我该怎么做?我无法访问文件描述符,也找不到任何SQLite3函数可以为我实现这一点。有什么想法吗?您可以使用特定于文件的同步。fsync()在这方面很有用
请参见Eh,sqlite3提交已经具备了所需的所有同步功能。在所有系统上?那不太符合我的观察。如果在提交更改后不调用sync(),则会导致数据库损坏。您可能也会在此处发现:我现在删除了与同步数据库文件相关的全局刷新。相反,我为需要与物理硬盘同步的其他文件添加了特定刷新。经过一系列测试,我仍然无法损坏数据库。看来你完全正确。谢谢你的帮助!