Jednocześnie Zapisywanie do transakcji z GORM

głosy
0

Szukam sposobu, aby poprawić wydajność transakcji. Mój kod wygląda następująco:

return db.Transaction(func(tx *gorm.DB) error {
        for _, val := range values {
            if err := tx.Save(&val).Error; err != nil {
                fmt.Println(err)
            }
        }

        return nil
}

(To jest usuwanie z dala jakiś kod logiczny) To wydaje się być w stanie zrobić około 10 Zapisuje na sekundę, co wydaje się być dość powolny, zwłaszcza gdy mamy do czynienia z większych zbiorów danych. Szukam zastąpić to czymś wzdłuż linii z następujących powodów:

return db.Transaction(func(tx *gorm.DB) error {
    addToDb := func(txdb *gorm.DB, job <- chan Values) {
        for val := range job {
            if err := txdb.Save(val).Error; err != nil {
                fmt.Println(err)
            }
        }
    }

    jobs := make(chan Values, len(values))

    for w := 1; w <= 10; w++ {
        go addToDb(tx, jobs)
    }

    for _, v := range values {
        jobs <- v
    }

    close(jobs)
    return nil
}

I skończyć z SQL: transakcja została już zobowiązana lub wycofana

Czy istnieje właściwy sposób radzenia sobie z wielowątkowy wkładek transakcji?

Utwórz 13/02/2020 o 21:59
źródło użytkownik
W innych językach...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more