前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >提升beego插入sqlite的效率

提升beego插入sqlite的效率

作者头像
hotqin888
发布2018-09-11 14:58:55
1.2K0
发布2018-09-11 14:58:55
举报
文章被收录于专栏:hotqin888的专栏

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1334450

beego普通的写操作很慢,大约200多ms一条。如下:

Insert

第一个返回值为自增健 Id 的值

o := orm.NewOrm()

var user User

user.Name = "slene"

user.IsActive = true

id, err := o.Insert(&user)

if err == nil {

    fmt.Println(id)

}

修改的办法就是取消写同步:

代码语言:javascript
复制
o.Raw("PRAGMA synchronous = OFF; ", 0, 0, 0).Exec()

然后还用了原生的sql语句,用上面的insert语句效果也是一样的。建立4300条具有逻辑关系的数据,从19m变为6s多。

代码语言:javascript
复制
//递归将目录写入数据库
func Insertproj(pid []Pidstruct, nodes []*AdminCategory, igrade, height int) (cid []Pidstruct) {
	o := orm.NewOrm() //实例化数据库操作对象
	// o.Using("default")
	//关闭写同步
	o.Raw("PRAGMA synchronous = OFF; ", 0, 0, 0).Exec()
	// var project models.Project
	var Id int64
	for _, v := range pid {
		for _, v1 := range nodes {
			if v1.Grade == igrade {
				title := v1.Title
				code := v1.Code
				parentid := v.ParentId

				var parentidpath string
				var parenttitlepath string
				if v.ParentIdPath != "" {
					parentidpath = v.ParentIdPath + "-" + strconv.FormatInt(v.ParentId, 10)
					parenttitlepath = v.ParentTitlePath + "-" + v.ParentTitle
				} else {
					parentidpath = strconv.FormatInt(v.ParentId, 10)
					parenttitlepath = v.ParentTitle
				}

				grade := igrade
				//通过事务方式来进行数据插入
				// err := o.Begin()
				sql := fmt.Sprintf("insert into Project (Code, Title, Label, Principal, Parent_id, Parent_id_path, Parent_title_path, Grade)"+
					" values('%s','%s','%s','%s',%d,'%s','%s',%d)", code, title, "", "", parentid, parentidpath, parenttitlepath, grade)
				res, err := o.Raw(sql).Exec()
				if err != nil {
					o.Rollback()
					// beego.Info("插入t_studentInfo表出错,事务回滚")
				} else {
					// o.Commit()
					// beego.Info("插入t_studenInfo表成功,事务提交")
					// num, _ = res.RowsAffected()
					Id, _ = res.LastInsertId()
				}
				// Id, err := models.AddProject(code, title, "", "", parentid, parentidpath, parenttitlepath, grade)
				// if err != nil {
				// 	beego.Error(err)
				// }
				var cid1 Pidstruct
				cid1.ParentId = Id
				cid1.ParentTitle = title
				cid1.ParentIdPath = parentidpath
				cid1.ParentTitlePath = parenttitlepath
				cid = append(cid, cid1) //每次要清0吗?
			}
		}
	}
	igrade = igrade + 1
	if igrade <= height {
		Insertproj(cid, nodes, igrade, height)
	}
	return
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年02月26日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档