代码之家  ›  专栏  ›  技术社区  ›  Josiah

SQLite是否在读取时锁定数据库文件?

  •  40
  • Josiah  · 技术社区  · 17 年前

    我正在研究SQLite作为一个存储引擎,很想知道SQLite是否会在读取时锁定数据库文件。

    我关心的是读取性能,因为我计划的项目将很少有写入,但有很多读取。如果数据库确实锁定,是否可以采取措施(如内存缓存)来缓解这种情况?

    2 回复  |  直到 17 年前
        1
  •  56
  •   Tombo    14 年前

    如果将数据库日志模式设置为提前写入日志记录,则可以在读取时避免锁定(请参阅: http://www.sqlite.org/wal.html ).

        2
  •  48
  •   Joey Gumbo    17 年前

    从其 Wikipedia page :

    更准确地说,从它的 FAQ

    多个进程可以同时打开同一个数据库。多个进程可以同时进行选择。但是,只有一个进程可以随时更改数据库。

    但是,只需对数据库进行一次写入, 做 在短时间内锁定数据库,使任何东西都无法访问它(甚至无法读取)。详情请参阅 File Locking And Concurrency In SQLite Version 3 SQLITE_BUSY 或者阻塞,直到他们能够阅读。在第一种情况下,再试一次应该不会太难,特别是如果您希望很少写。

        3
  •  0
  •   human    6 年前

    正在为此答案添加更多信息:

    问:SQLite是否在读取时锁定数据库文件?

    A:不,是的

    https://www.sqlite.org/atomiccommit.html#_acquiring_a_read_lock

    推荐文章