我目前正在开发一个应用程序,其中多个goroutine可能在某些时候尝试同时查询或更新SQLite数据库文件(使用github.com/mattn/go-sqlite3和database / sql驱动程序。)
我不确定如何控制锁定/并发访问;驱动程序是否会处理它,或者我是否需要找到使用互斥锁或通道序列化请求的方法?
有人知道驱动程序是否会等待执行操作并在数据库文件由于某种原因被锁定时重试,还是会抛出错误并放弃?
答案 0 :(得分:1)
您应该每个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