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

时间:2011-11-16 11:02:04

标签: database sqlite

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

PRAGMA synchronize = OFF
PRAGMA jorunal_mode = MEMORY

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

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

感谢。

1 个答案:

答案 0 :(得分:8)

我建议您使用最近实施的WAL journal_mode。这样,您可以将synchronous保留到normal并将所有写入内容写入磁盘:

  

写入事务非常快,因为它们只涉及编写   内容一次(与rollback-journal事务的两次相比)和   因为写入都是顺序的。此外,将内容同步到   只要应用程序愿意,就不需要磁盘   在断电或硬重启后牺牲耐用性。 (作家   如果设置了PRAGMA synchronous,则在每次事务提交时同步WAL   如果PRAGMA synchronous设置为NORMAL,则为FULL但省略此同步。)

以上摘自:

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

如果这还不够,那么当您想要确定您的写入不仅写入磁盘,而且还“集成”到您的数据库时,您仍然可以调用PRAGMA database.wal_checkpoint;。请查看以下内容以获取更多信息:

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