我正在使用SQLITE明确创建一个事务,即:
sqlite3_exec(db,“BEGIN”,NULL,NULL,NULL);
做一堆插页
sqlite3_exec(db,“END”,NULL,NULL,NULL);
我希望数据库缓冲此对之间的插入,直到END被命中,然后将其全部刷新到磁盘。
似乎没有这样做,而是定期刷新到磁盘。
我也注意到我有时无法在不同进程的同一个数据库上成功执行select语句,我怀疑它可能与我的事务使用策略有关。在这些情况下,由于db上的LOCK或BUSY状态,选择失败。
有没有人知道如何处理SQLITE,以便缓冲插入以获得更好的性能?
非常感谢!
答案 0 :(得分:1)
事务使SQLite不会提交到数据库文件,直到事务完成(或回滚),但它不会阻止它写入光盘,因为它仍然需要更新日志文件。
您可以通过使用内存数据库然后将内存数据库写入基于文件的数据库来解决此问题。更多信息:In-Memory Databases
此外,SQLite的标准日记模型支持单个编写器或多个阅读器,但不支持两者,这就是您尝试选择时获得LOCK / BUSY状态的原因。要解决这个问题,您应该考虑使用WAL日志方法而不是回滚方法。更多信息:Write-Ahead Logging