【问题标题】:How get SQLITE to buffer inserts?如何让 SQLITE 缓冲插入?
【发布时间】:2012-01-05 00:15:38
【问题描述】:

我正在使用 SQLITE 显式创建事务,即:

sqlite3_exec(db, "BEGIN", NULL, NULL, NULL);

做一堆插入

sqlite3_exec(db, "END", NULL, NULL, NULL);

我希望数据库缓冲这对之间的插入,直到命中 END,然后将其全部刷新到磁盘。

它似乎没有这样做,而是定期刷新到磁盘。

我还注意到,有时我无法从不同进程对同一数据库成功执行 select 语句,我怀疑这可能与我的事务使用策略有关。在这些情况下,选择会因为数据库上的 LOCK 或 BUSY 状态而失败。

有谁知道如何手动处理 SQLITE 以缓冲插入以提高性能?

非常感谢!

【问题讨论】:

    标签: sqlite


    【解决方案1】:

    事务阻止 SQLite 提交到数据库文件,直到事务完成(或回滚),但它不会阻止它写入磁盘,因为它仍然需要更新日志文件。

    您可以通过使用内存数据库然后将内存数据库写入基于文件的数据库来解决此问题。更多信息在这里:In-Memory Databases

    此外,SQLite 的标准日志模型支持单个写入器或多个读取器,但不能同时支持两者,这就是当您尝试选择时会出现 LOCK/BUSY 状态的原因。为了解决这个问题,您应该考虑使用 WAL 日志方法而不是回滚方法。更多信息在这里:Write-Ahead Logging

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-07
      相关资源
      最近更新 更多