我在arm9嵌入式linux平台上使用sqlite数据库。我想减少对磁盘数据库的写入,因为我的磁盘是一个闪存,它需要最少的写周期。所以我尝试将SQLITE_DEFAULT_CACHE_SIZE增加为5000.我的目标是将数据写入缓存,当缓存填满时,自动刷新到磁盘。但是通过增加SQLITE_DEFAULT_CACHE_SIZE,我无法确认这是否有效。我没有看到任何操作变化!我的方式是否正确?有人可以给我一些建议吗? 谢谢 Aneesh
答案 0 :(得分:3)
SQLite将成为ACID数据库刷新每次提交或每次插入/删除/更新未包含事务。使用事务进行分组操作或关闭ACIDity并设置PRAGMA synchronous = OFF。
“PRAGMA synchronous = OFF”并且SQLite根本不会刷新数据(实际上将其留给OS Cache)
SQLITE_DEFAULT_CACHE_SIZE仅适用于缓存大小。缓存仅用于读取数据。
还有另一种选择 - 您可以在自己的缓冲区已满之前实现自己的VFS层并防止页面保存。 http://www.sqlite.org/c3ref/vfs.html
但我确信sync = off(或者更好地使用事务)可以很好地完成这项任务(同时有很好的机会在电源故障或同步=关闭的硬重置时损坏数据库)。 / p>
另一个提示是将JOURNAL放入记忆中或完全关闭。再次 - 它关闭了酸度,但这也消除了一些磁盘触摸。
答案 1 :(得分:2)
最新SQLite has a feature for backing up hot databases它仍然是实验性的,但我的建议是使用内存数据库,并在您认为合适时将其与磁盘数据库合并。
答案 2 :(得分:0)
Ok Neil。如果“SQLite正在使用一种直写缓存形式”,那么在缓存溢出时,它会尝试将数据刷新到一些临时文件或磁盘文件。这是我想要的相同点通过调整缓存大小进行实验,从而获得对刷新率的控制。但它没有发生。请回复。
答案 3 :(得分:-1)
您拥有SQLite的源代码 - 为什么不简单地将其用于记录您感兴趣的信息。