gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 00:59:15 24 4
gpt4 key购买 nike

我正在运行多个线程,每个线程都尝试对一个 SQLite 数据库执行插入操作。每个线程创建它自己的数据库连接。他们各自创建一个命令,打开一个事务执行一些插入,然后关闭事务。似乎尝试任何操作的第二个线程得到以下 SQLiteException: The database file is locked。我曾尝试从事务中解包 INSERTS 以及缩小每次提交中包含的 INSERTS 的范围,但没有实际效果;对 db 文件的后续访问会引发相同的异常。

有什么想法吗?我很困惑,我不确定下一步该往哪里看...

最佳答案

更新您的插入代码,以便在遇到指示数据库锁定的异常时稍等片刻,然后重试。每次通过随机增量增加等待时间(“随机退避”算法)。这应该允许线程各自获取全局写锁。性能会很差,但代码应该可以在不进行重大修改的情况下工作。

但是SQLite不适合做高并发的修改。您有两个永久解决方案:

  • 迁移到“真实”数据库,例如 PostgreSQL 或 MySQL
  • 通过一个线程序列化所有数据库修改,以避免 SQLite 的修改。

关于c# - 难以在 C# 中的 SQLite 数据库上运行并发 INSERTS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/880303/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com