Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何将SQLite3数据库更改刷新到磁盘?_Linux_Sqlite_Debian - Fatal编程技术网

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

Linux 如何将SQLite3数据库更改刷新到磁盘?,linux,sqlite,debian,Linux,Sqlite,Debian,我的应用程序运行在便携式Debian(5和8)计算机上。这台计算机可能会在不可预知的时间断电。应用程序经常使用sync()命令更新特定的SQLite3数据库,并立即刷新到磁盘。这样做是为了避免数据库损坏,这会在更改完全写入磁盘之前电源消失时发生 这一直运行得很好,但现在的问题是sync()命令将所有打开的文件的所有缓冲更改刷新到磁盘。这会导致系统其他部分的速度减慢。一种可能的解决方案是只刷新关键文件更改,例如此特定数据库文件。但问题是;我该怎么做?我无法访问文件描述符,也找不到任何SQLite3

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


这一直运行得很好,但现在的问题是
sync()
命令将所有打开的文件的所有缓冲更改刷新到磁盘。这会导致系统其他部分的速度减慢。一种可能的解决方案是只刷新关键文件更改,例如此特定数据库文件。但问题是;我该怎么做?我无法访问文件描述符,也找不到任何SQLite3函数可以为我实现这一点。有什么想法吗?

您可以使用特定于文件的同步。fsync()在这方面很有用


请参见

Eh,sqlite3提交已经具备了所需的所有同步功能。在所有系统上?那不太符合我的观察。如果在提交更改后不调用sync(),则会导致数据库损坏。您可能也会在此处发现:我现在删除了与同步数据库文件相关的全局刷新。相反,我为需要与物理硬盘同步的其他文件添加了特定刷新。经过一系列测试,我仍然无法损坏数据库。看来你完全正确。谢谢你的帮助!