sqlite数据库简介
SQLite是一个进程内的轻量级嵌入式数据库,它的数据库就是一个文件,实现了自给自足、无服务器、零配置的、事务性的SQL数据库引擎。它是一个零配置的数据库,这就体现出来SQLite与其他数据库的最大的区别:SQLite不需要在系统中配置,直接可以使用。且SQLite不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite可直接访问其存储文件。
问题出现原因
SQLite只支持一写多读。SQLite在进行写操作时,数据库文件会被锁定,此时任何其他的读/写操作都会被阻塞,如果阻塞超过5秒钟(默认是5秒,可通过重新编译SQLite进行修改),就会抛出描述为“database is locked”的异常。
解决方案
自己在程序上加读写锁。
go简单示例:
package main
import (
"github.com/go-xorm/xorm"
"sync"
)
type Database struct {
mutex sync.RWMutex
engine *xorm.Engine
}
func (this *Database) Insert(beans ...interface{}) (int64, error) {
this.mutex.Lock()
defer this.mutex.Unlock()
return this.engine.Insert(beans...)
}
func main() {
db := &Database{}
engine, err := xorm.NewEngine("sqlite3", "test.db")
if err != nil {
return
}
db.engine = engine
db.Insert()
}
6739

被折叠的 条评论
为什么被折叠?



