gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 02:14:45 26 4
gpt4 key购买 nike

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

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

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

最佳答案

您应该为每个 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

关于go - 并发 goroutine 尝试访问数据库时避免 SQLite 文件/数据库锁定的预防措施?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36431452/

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