XML将性能插入MYSQL
我有一些在数据库中插入记录的代码: 该代码应该在数据库中插入15万条记录,现在,在AWS t2.1大型实例上需要60小时。我正在寻找一种方法,使数据库上的插入速度更快,同时又不复制记录 你们有什么建议吗 我正在使用Gorm和MYSQLXML将性能插入MYSQL,mysql,xml,performance,go,go-gorm,Mysql,Xml,Performance,Go,Go Gorm,我有一些在数据库中插入记录的代码: 该代码应该在数据库中插入15万条记录,现在,在AWS t2.1大型实例上需要60小时。我正在寻找一种方法,使数据库上的插入速度更快,同时又不复制记录 你们有什么建议吗 我正在使用Gorm和MYSQL // InsertJob will insert job into database, by checking its hash. func InsertJob(job XMLJob, oid int, ResourceID int) (Job, error)
// InsertJob will insert job into database, by checking its hash.
func InsertJob(job XMLJob, oid int, ResourceID int) (Job, error) {
db := globalDBConnection
cleanJobDescription := job.Body
hashString := GetMD5Hash(job.Title + job.Body + job.Location + job.Zip)
JobDescriptionHash := GetMD5Hash(job.Body)
empty := sql.NullString{String: "", Valid: true}
j := Job{
CurrencyID: 1, //USD
//other fields here elided for brevity
PrimaryIndustry: sql.NullString{String: job.PrimaryIndustry, Valid: true},
}
err := db.Where("hash = ?", hashString).Find(&j).Error
if err != nil {
if err.Error() != "record not found" {
return j, err
}
err2 := db.Create(&j).Error
if err2 != nil {
log.Println("Unable to create job:" + err.Error())
return j, err2
}
}
return j, nil
}
您可以使用信号量模式来加速它 灵感来自这里
如果散列不是主键,可以在其上创建索引以加快WHERE查询。批量插入也可以提供一个加速。我同意,如果DB不在同一台机器上,一次插入N个条目而不是逐个插入,应该可以极大地提高性能(因为您需要较少的网络通信)。您还可以一次检查多个哈希,并分析输出,以确定哪些是重复的,哪些不是。谢谢@John,我一定会尝试这个:)@DmitryVerhoturov这是一个很棒的建议!接下来我将尝试显示
showcreatetable
和生成的INSERT
语句。(@John-我同意;批处理行通常会提供10倍的加速。)我们最终放弃了GORM并进行了批量插入。您应该使用GORM v2。它支持批量插入。谢谢你让我注意到这一点!!!在发布的时候,Gorm V2不是一个东西。。。