读者和编写者处理SQLite

时间:2010-02-25 02:24:22

标签: sqlite producer-consumer multiple-processes

我有两个过程:

  1. 每秒写入两个表(ish)
  2. 定期从上述表格中阅读
  3. 我知道使用SQLite,任何写操作都会锁定整个数据库,因此有时第二个进程可能会因锁定数据库而失败。

    你有什么建议可以完全消除这两个进程触及同一个数据库的需要吗?例如,我可以原子地将数据从正在写入的数据库传输到第二个只读数据库吗?

    谢谢:)

2 个答案:

答案 0 :(得分:2)

您可以在第二个进程中配置与数据库的连接,以便在遇到忙碌数据库时等待一段时间,在放弃之前定期唤醒以检查免费数据库。

sqlite3_busy_timeout(sqlite3*, int ms);

http://www.sqlite.org/c3ref/busy_timeout.html

答案 1 :(得分:0)

我建议您阅读关于SQLite thread safety的常见问题解答吗?

  

Threads are evil。避免它们。

     

SQLite是线程安全的。我们做出这种让步,因为许多用户选择忽略前一段中给出的建议。但为了保证线程安全,必须在SQLITE_THREADSAFE预处理器宏设置为1的情况下编译SQLite。