【问题标题】:avoiding sqlite reader starvation避免 sqlite 阅读器饥饿
【发布时间】:2020-06-03 23:46:06
【问题描述】:

我有两个共享sqlite数据库的进程,每个进程都有自己的数据库连接。一个进程以高速率写入数据库,一个进程从数据库中读取。我关心的是如何避免“读者饥饿”问题,因为作者以高速率访问数据库,从而为读者锁定数据库。

我正在使用sqlite3_busy_timeout,因此如果数据库被锁定,读者会等待,但从sqlite3_busy_timeout 的描述中,我了解到繁忙的处理程序只是在重试时休眠几次。如果编写者在这些时候碰巧锁定了数据库,那么所有重试都不会成功。

sqlite file locking documentation 描述了一个相反的问题:“writer starvation”和 sqlite 版本 3 中的缓解措施。但我找不到对相反问题“reader starvation”的任何引用。是否有任何最佳实践来避免此类问题?

【问题讨论】:

    标签: c sqlite


    【解决方案1】:

    将数据库放入WAL mode

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-19
      相关资源
      最近更新 更多