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

12

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

PRAGMA synchronize = OFF
PRAGMA jorunal_mode = MEMORY

这些设置使得SQLite将与数据库文件的同步交由操作系统处理,从而使速度足以满足我的项目需求。

但是,在某些情况下,例如在特定插入之后,我必须确保数据已写入磁盘。

有没有办法强制SQLite将所有等待在内存日志中的数据都写入磁盘?

谢谢。

1个回答

9
我建议您使用最近实施的WAL journal_mode。这样,您可以将synchronous保留为normal,并在写入时将所有内容写入磁盘:
写事务非常快,因为它们仅涉及一次编写内容(与回滚日志事务相比涉及两次编写),并且因为编写内容都是顺序的。此外,只要应用程序愿意在电源故障或硬重启后牺牲耐久性,就不需要将内容同步到磁盘上。 (如果将PRAGMA同步设置为FULL,则编写器会在每个事务提交时将WAL同步,但如果将PRAGMA同步设置为NORMAL,则会省略此同步。)
以上内容摘自:

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

如果这还不够,当你想确保你的写入不仅被写入磁盘,而且被“整合”到你的数据库中时,你仍然可以调用PRAGMA database.wal_checkpoint;。请参阅以下内容获取更多信息:

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


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