当并发goroutine尝试访问数据库时,避免SQLite文件/数据库锁定的预防措施?

当并发goroutine尝试访问数据库时,避免SQLite文件/数据库锁定的预防措施?,go,sqlite,Go,Sqlite,我目前正在开发一个应用程序,其中多个goroutine可能会在某个时候尝试同时查询或更新SQLite数据库文件(使用github.com/mattn/go-sqlite3和database/sql驱动程序) 我不确定的是如何控制锁定/并发访问;驱动程序会处理它吗,还是我需要找到一种用互斥锁或通道序列化请求的方法 是否有人知道如果数据库文件因某种原因被锁定,驱动程序是否会等待执行操作并重试,或者是否会抛出错误并放弃?您应该为每个goroutine打开一个单独的连接。驱动程序将负责锁定和访问,但每个

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

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


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

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

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

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

查看Github中关于该线程的评论,特别是该包作者的链接评论:

根据您链接中的评论,似乎存在一些问题,即使有多个打开的连接,也可能会导致数据库访问争用……找到一种将请求序列化到数据库的方法似乎是最安全的。