Должны ли соединения с базой данных открываться и закрываться в каждом методе CRUD? - PullRequest
3 голосов
/ 17 мая 2019

Я использую GORM ORM для доступа Postgres в приложении Go. У меня есть 4 функции: создание, обновление, удаление и чтение в хранилище базы данных.

В каждой из этих функций я открываю соединение с базой данных, выполняю операцию CRUD и затем закрываю соединение сразу после выполнения операции, как вы увидите здесь и здесь и в приведенном ниже фрагменте кода, используя GORM

func (e *Example) Create(m *model.Example) (*model.Example, error) {
    // open a database session
    dbSession, err := e.OpenDB() //gorm.Open("postgres", connStr)
    if err != nil {
        log.Log(err)
        return nil, err
    }

    // close database connection after operation is completed
    defer dbSession.Close()

    // create item
    db := dbSession.Create(m)

    if db.Error != nil {
        return nil, db.Error
    }

    return m, nil
}

Это правильная практика, или одно соединение с базой данных должно быть общим для всего приложения и позволить ORM управлять соединениями? как указано здесь ?

1 Ответ

4 голосов
/ 17 мая 2019

Вы должны использовать соединение с БД как можно чаще.Также у gorm есть встроенный пул соединений, поэтому вам не нужно управлять дескриптором db.Просто поделитесь ею со всеми программами, и они смогут безопасно использовать дескриптор, выделяя новые соединения по мере необходимости.

...