इसके साथ-साथ GORM के साथ एक लेन-देन में सहेजा जा रहा है

वोट
0

मैं एक सौदे के प्रदर्शन में सुधार के लिए एक रास्ता के लिए देख रहा हूँ। मेरे कोड ऐसा दिखाई देता है:

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
}

(यह कुछ तर्क कोड दूर अलग करना है) यह 10 के बारे में ऐसा करने में सक्षम हो रहा है प्रति सेकंड की बचत होती है, जो लगता है काफी धीमी गति से विशेष रूप से जब बड़े डेटा सेट के साथ काम कर। मैं निम्न में से रेखा के साथ कुछ के साथ इस को बदलने के लिए देख रहा हूँ:

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
}

मैं एसक्यूएल के साथ अंत: लेन-देन को पहले से ही प्रतिबद्ध या वापस लुढ़का कर दिया गया है

वहाँ बहु लड़ी लेनदेन आवेषण के साथ काम करने का एक उचित तरीका है?

13/02/2020 को 21:59
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            

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