【问题标题】:Will database file be corrupted if concurrent write happened in SQLite3 WAL mode如果在 SQLite3 WAL 模式下发生并发写入,数据库文件是否会损坏
【发布时间】:2018-01-09 08:17:12
【问题描述】:

正如 SQLite Doc 提到的,

WAL 提供了更多的并发性,因为读取器不会阻塞写入器,写入器不会阻塞读取器。读写可以同时进行。

编写器只是将新内容附加到 WAL 文件的末尾。因为 writer 不会做任何会干扰 reader 动作的事情,所以 writer 和 reader 可以同时运行。但是,由于只有一个 WAL 文件,因此一次只能有一个写入器。

我尝试通过 JMeter 发送多个请求来模拟场景,如下所示:

https://i.stack.imgur.com/HdKBf.png

模拟后没有出错。但我担心的是:

  1. 是否意味着在 WAL 模式下,SQLite 会自己处理多个写入请求?
  2. 我是否以正确的方式模拟了场景? (有没有更好的工具呢?)

【问题讨论】:

    标签: database concurrency sqlite


    【解决方案1】:

    回答您的标题问题:不,WAL 模式下的 SQLite3 不会损坏您的数据库文件。

    Write Ahead Logging 将使您能够独立读取和写入,但写入仍然会一个接一个地执行,即使您同时将它们发送到 SQLite 数据库。

    您可以在SQLite-Wiki - WAL 中查找 WAL 模式的更多优点或缺点

    【讨论】:

    • 感谢@chrisFix。请问您如何确保写入仍会一个接一个地执行?
    猜你喜欢
    • 2021-10-02
    • 1970-01-01
    • 2015-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 2021-03-21
    • 2013-08-18
    • 2016-08-24
    相关资源
    最近更新 更多