我需要一个非常快速的SQLite数据库访问。以这种方式设置参数:
PRAGMA synchronize = OFF
PRAGMA jorunal_mode = MEMORY
使速度足以满足我的项目需求。 这些设置使SQLite与操作系统手中的数据库文件保持同步。 但是有一些情况,某些插入,之后我必须确定,数据已写入磁盘。
有什么方法可以强制SQLite将所有数据(在内存日志中等待)写入磁盘?
感谢。
答案 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;
。请查看以下内容以获取更多信息: