关于TSINGSEE青犀视频云边端架构中安防视频云服务EasyCVR的开发过程,我们分享了很多实用技能,大家可以参考。
上篇提到数据库执行耗时长导致页面刷新慢影响客户使用体验的问题(EasyCVR页面刷新慢应该如何优化),这里来看看EasyCVR是怎么操作数据库的。
首先golang层对数据进行了封装,也就是ORM(Object Relation Mapping),对象关系映射,实际上就是对数据库的操作进行封装,对上层开发人员屏蔽数据操作的细节,开发人员看到的就是一个个对象,大大简化了开发工作,提高了生产效率。下面看下实用步骤。
1、库安装
go get -u github.com/jinzhu/gorm
2、数据库初始化
func Init() (err error) {
gorm.DefaultTableNameHandler = func(db *gorm.DB, defaultTablename string) string {
return "t_" + defaultTablename
}
dbFile := utils.DBFile()
log.Printf("init db model.%s", utils.DBFile())
database, err = gorm.Open("sqlite3", fmt.Sprintf("%s?loc=Asia/Shanghai", dbFile))
if err != nil {
return
}
// Sqlite cannot handle concurrent writes, so we limit sqlite to one connection.
// see https://github.com/mattn/go-sqlite3/issues/274
database.DB().SetMaxOpenConns(30)
database.DB().SetMaxIdleConns(30)
database.SetLogger(utils.DefaultGormLogger)
database.LogMode(false)
// 自动创建新的表格、表格字段、删除的字段不会删除
database.AutoMigrate(cvrdo.User{}, cvrdo.Device{}, cvrdo.DBChannelInfo{}, cvrdo.RecordCompt{}, cvrdo.DBChannelInfoErrMsg{})
3、表创建,增删改查,事务
特别说明下事务操作,基本流程为 Begin -> 增删改查->Commit,数据库事务操作能减少频繁的进行数据库读写操作,这是它的优点,但是使用事务时需要注意有可能导致数据库锁死。
新建数据:
删除数据:
更新数据: