【问题标题】:How to enable WAL (write ahead log) in a C++ program?如何在 C++ 程序中启用 WAL(预写日志)?
【发布时间】:2020-11-26 09:39:13
【问题描述】:

我目前有两个不同的进程,一个进程写入数据库,另一个进程读取并更新数据库中由第一个进程插入的记录。每次我尝试同时启动两个进程时,数据库都会被锁定,这是有道理的。由于同时读写。我遇到了 WAL,但还没有遇到任何关于如何在 c++ 代码中启用 WAL 的示例。任何帮助,将不胜感激。谢谢。

【问题讨论】:

  • SQLite 是否允许来自不同进程的并发访问?我认为只能在一个进程中执行此操作。如果您需要更强大的数据库,请考虑使用 Postgres 或明确设计用于并发、多进程访问的数据库。
  • @tadman:看起来 SQLite 可以使用共享内存。 Postgres 可以跨不同的计算机工作。这仍然是 SQLite 的问题。
  • @MSalters 我相信使用预写日志记录可以实现并发性。还是我弄错了?
  • 我不确定访问同一数据库的进程之间可用的并发设施。以我的经验,SQLite 在一个进程中的表现非常好,但在争用同一资源时往往表现不佳。

标签: c++ database sqlite wal


【解决方案1】:

要激活它,按照the documentation,您只需要运行以下语句:

PRAGMA journal_mode=WAL

这是持久的,只需要应用一次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-27
    • 2013-07-03
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多