数据库 请教大家一个 SQLite 多进程读写相关的问题

austinchou0126 · 2017年09月26日 · 最后由 5long 回复于 2017年09月26日 · 10436 次阅读

在项目中遇到需要多进程读写 SQLite 的情况,虽然开发语言并不是 Ruby(Python),由于比较信任社区中的各位朋友,特来请教,望不吝赐教!

进程 A 首先运行:打开 SQLite 数据库,并进行读写操作,操作时会生成 Hot Journal 文件 进程 B 其次运行,打开 SQLite 数据库,只读

想请教:当 B 进行打开数据库(或者是建立数据库 Connection)的时候,如果遇到 A 正在读写,此时 Hot Journal 存在,此处的 Rollback 操作会写回磁盘吗?还是仅在内存中执行不影响磁盘数据库文件?假如写回磁盘了,那么此时 A 进程进行的写操作会不会导致数据不一致或者出问题?

出于这个问题的考虑,我之前采用 Read-only 模式去打开数据库,而经常会出现 sqlite3.OperationalError: Attempt to write a readonly database,后来去掉该选项就不再抱错,但是不清楚这个解决方法是否正确,如果各位有更好的想法,也可以一起探讨,谢谢。

环境:SQLite Version: 3.18.0,Python 3.5.3

Python 标准库里的 sqlite3 底层实现是直接动态加载 libsqlite3.so 的,所以底层逻辑是由 sqlite 决定的。

那么这样直接去读 sqlite 的文档,应该就有答案: https://sqlite.org/search?s=d&q=hot+journal

需要 登录 后方可回复, 如果你还没有账号请 注册新账号