我有一个 SQLite 数据库,我在进程 A 中保持打开并写入它。我希望能够在进程 B 中以只读方式使用它。
根据文件,
- 如果数据库未锁定,则可能无法读取(或写入)数据库 -不合适
- 如果数据库是共享的,那么两个进程可以读取它但第一个不能写入 -不合适
- 如果一个进程想要写它需要一个独占锁,这意味着没有其他进程可以写 -不合适
进程 A 将进行大量小写入,因此我认为在每个事务提交上制作副本不会是有效的。
我能看到的唯一方法是让读者等到数据库进入 UNLOCKED 状态,在读取期间获得一个 SHARED 锁,然后释放它。同时,进程 A 将要写入并将被阻塞,直到锁可用 - 如果它曾经可用(如果进程 B 崩溃怎么办?)。这意味着进程 A 和进程 B 将争夺锁 - B 想要 SHARED 而 A 想要 EXCLUSIVE,这会减慢速度甚至导致并发问题。
有什么方法可以实现我的同时写作和阅读的目标吗?