如何使用PRAGMA synchronous = OFF同步磁盘SQLite数据库

kap*_*ppa 10 database sqlite

我需要一个非常快速的SQLite数据库访问.以这种方式设置参数:

PRAGMA synchronize = OFF
PRAGMA jorunal_mode = MEMORY
Run Code Online (Sandbox Code Playgroud)

使速度足以满足我的项目需求.这些设置使SQLite与操作系统手中的数据库文件保持同步.但是有一些情况,某些插入,之后我必须确保数据写入磁盘.

有什么方法可以强制SQLite将所有数据(在内存日志中等待)写入磁盘?

谢谢.

小智 8

我建议你使用最近实施的WAL journal_mode.通过这种方式,你可以离开synchronousnormal,让你的全部写入到磁盘的写操作,当您去:

写入事务非常快,因为它们只涉及写入内容一次(相对于回滚日志事务两次),并且因为写入都是顺序的.此外,只要应用程序愿意在断电或硬重启后牺牲耐用性,就不需要将内容同步到磁盘.(如果PRAGMA synchronous设置为FULL,则写入者在每次事务提交时同步WAL,但如果PRAGMA synchronous设置为NORMAL,则省略此同步.)

以上内容摘自:

http://www.sqlite.org/wal.html

如果这还不够,那么PRAGMA database.wal_checkpoint;当您希望确定您的写入不仅写入磁盘,而且还"集成"到您的数据库时,您仍然可以调用.有关更多信息,请查看以下内容

http://www.sqlite.org/pragma.html#pragma_wal_checkpoint