V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
austinchou0126
V2EX  ›  数据库

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

  •  
  •   austinchou0126 · 2017-09-26 20:00:01 +08:00 · 1038 次点击
    这是一个创建于 2645 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在项目中遇到需要多进程读写 SQLite 的情况,特来请教,望不吝赐教!

    进程 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

    4 条回复    2017-09-26 23:50:08 +08:00
    jerry12547
        1
    jerry12547  
       2017-09-26 20:08:29 +08:00
    我只知道事物。。具体的也没怎么搞。
    jinsongzhao
        2
    jinsongzhao  
       2017-09-26 20:18:32 +08:00 via Android
    B 进程的操作会返回 busy,多进程使用有坑最好绕行,已经坑里了,优化到短读写,或一个写,多个读吧,单不要指望 5 个 9 指标了。
    jinsongzhao
        3
    jinsongzhao  
       2017-09-26 20:19:59 +08:00 via Android
    busy 后,延时重试,绝对不能有忘记关闭事务的 bug
    Keyes
        4
    Keyes  
       2017-09-26 23:50:08 +08:00 via iPad
    我们已经把 sqlite 操作都放到一个单线程 mq 里面去了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   996 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 22:01 · PVG 06:01 · LAX 14:01 · JFK 17:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.