难以在C#中的SQLite数据库上运行并发INSERTS

Bri*_*ney 4 c# sqlite system.data.sqlite

我正在运行许多线程,每个线程都尝试对一个SQLite数据库执行INSERTS.每个线程都创建自己与DB的连接.它们每个都创建一个命令,打开一个Transaction执行一些INSERTS然后关闭事务.似乎第二个尝试任何东西的线程得到以下SQLiteException:数据库文件被锁定.我尝试从事务中解包INSERTS以及缩小每个提交中包含的INSERTS的范围而没有实际效果; 后续访问db文件会引发相同的异常.

有什么想法吗?我很难过,我不知道下一步该往下看......

Joh*_*kin 5

更新插入代码,以便在遇到指示数据库锁定的异常时,它会稍稍等待并再次尝试.每次以随机增量增加等待时间("随机退避"算法).这应该允许每个线程获取全局写锁.性能会很差,但代码应该无需重大修改即可运行.

但是,SQLite不适合高度并发修改.你有两个永久的解决方案:

  • 转移到"真正的"数据库,例如PostgreSQL或MySQL
  • 通过一个线程序列化所有数据库修改,以避免SQLite的修改.