当并发goroutine尝试访问数据库时,避免SQLite文件/数据库锁定的注意事项



我目前正在开发一个应用程序,在该应用程序中,多个goroutine可能会在某个时刻尝试同时查询或更新SQLite数据库文件(使用github.com/mattn/go-sqlite3和database/sql驱动程序)

我不确定的是如何控制锁定/并发访问;驱动程序会处理它吗?还是我需要找到一种方法来用互斥或通道序列化请求?

如果数据库文件由于某种原因被锁定,是否有人知道驱动程序会等待执行操作并重试,或者它会抛出错误并放弃?

您应该为每个goroutine打开一个单独的连接。驱动程序将负责锁定和访问,但每个goroutine应该有不同的连接。

此外,您可以在打开连接时添加一些参数以加快访问速度:

gDb, err = sql.Open("sqlite3", "file:databaselocked.sqlite?cache=shared&mode=rwc")

请在Github中查看此线程上的评论,尤其是包作者的链接评论:https://github.com/mattn/go-sqlite3/issues/148#issuecomment-56764080

最新更新