Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XML将性能插入MYSQL_Mysql_Xml_Performance_Go_Go Gorm - Fatal编程技术网

XML将性能插入MYSQL

XML将性能插入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)

我有一些在数据库中插入记录的代码:

该代码应该在数据库中插入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) {
    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不是一个东西。。。