2011-11-16 239 views
10

我需要非常快速的SQLite数据库访问。这样设置参数:如何使用PRAGMA同步=关闭同步到磁盘SQLite数据库

PRAGMA synchronize = OFF 
PRAGMA jorunal_mode = MEMORY 

使速度足够我的项目。 这些设置使SQLite与操作系统中的数据库文件保持同步。 但有几种情况,一些特定的插入,之后我必须肯定数据写入磁盘。

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

谢谢。

回答

7

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

写入数据的速度非常快,因为它们只涉及一次写入 内容(而不是两次回滚期刊交易)和 ,因为写入都是连续的。此外,将内容同步到 不需要磁盘,只要应用程序愿意在断电或硬重启后牺牲持久性。

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

:(作家 同步上的每个事务的WAL提交如果PRAGMA同步设置 为FULL,但如果PRAGMA同步已设置为正常省略此同步)

上面摘自

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

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

+0

这正是我是如何做到这一点。 – kappa