【发布时间】:2020-06-03 23:46:06
【问题描述】:
我有两个共享sqlite数据库的进程,每个进程都有自己的数据库连接。一个进程以高速率写入数据库,一个进程从数据库中读取。我关心的是如何避免“读者饥饿”问题,因为作者以高速率访问数据库,从而为读者锁定数据库。
我正在使用sqlite3_busy_timeout,因此如果数据库被锁定,读者会等待,但从sqlite3_busy_timeout 的描述中,我了解到繁忙的处理程序只是在重试时休眠几次。如果编写者在这些时候碰巧锁定了数据库,那么所有重试都不会成功。
sqlite file locking documentation 描述了一个相反的问题:“writer starvation”和 sqlite 版本 3 中的缓解措施。但我找不到对相反问题“reader starvation”的任何引用。是否有任何最佳实践来避免此类问题?
【问题讨论】: