我有一个 SQLite 数据库,我保持打开状态并在进程 A 中写入。我希望能够在只读的基础上从进程 B 使用它。
根据 the document ,
进程 A 将进行大量小写操作,因此我认为在每次事务提交时制作副本不会有效率。
我能看到的唯一方法是让读者等待直到数据库进入 UNLOCKED 状态,在读取期间获得 SHARED 锁,然后释放它。与此同时,进程 A 将想要写入并被阻塞,直到锁可用 - 如果它曾经这样做(如果进程 B 崩溃怎么办?)。这意味着进程 A 和进程 B 将争用锁——B 想要 SHARED,而 A 想要 EXCLUSIVE,这会减慢速度甚至导致并发问题。
有什么办法可以达到我同时写读的目的吗?
最佳答案
使用 WAL mode 。它支持并发读取器和一个写入器。
关于concurrency - SQLite中并发读/写和读的策略,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12117016/