SQLite中并发读/写和读取的策略

Joe*_*Joe 11 sqlite concurrency

我有一个SQLite数据库,我保持打开并在进程A中写入.我希望能够以只读方式从进程B使用它.

根据该文件,

  • 如果数据库是UNLOCKED,则可能无法读取(或写入)数据库 - 不合适
  • 如果数据库是SHARED,那么两个进程可以读取它但第一个不能写 - 不合适
  • 如果进程想要写它需要一个EXCLUSIVE锁,这意味着没有其他进程可以写 - 不合适

进程A将进行大量的小写操作,因此我不认为在每个事务提交上复制是有效的.

我能看到它的唯一方法是让读者等到数据库进入UNLOCKED状态,在读取期间获得SHARED锁定然后释放它.同时,进程A将要写入并将被阻塞,直到锁变为可用 - 如果有的话(如果进程B崩溃了怎么办?).这意味着进程A和进程B将争用锁 - B需要SHARED而A需要EXCLUSIVE,这会减慢速度甚至导致并发问题.

有没有办法实现我的并发写作和阅读目标?

Dou*_*rie 19

使用WAL模式.它支持并发读者和一个作者.