Je travaille sur un morceau de code qui appelle à la base de données à partir de plusieurs endroits différents. Dans ce code, j'ai utilisé la bibliothèque de lunettes et appelez gorm.Open()
Chaque fois que je dois interagir avec la base de données.
Ce que je me demande, c'est ce qui se passe sous le capot quand j'appelle ça? Un nouveau pool de connexion est-il créé à chaque fois que je l'appelle ou est chaque appel à gorm.Open()
Partage du même pool de connexion?
TLDR: Oui, essayez de réutiliser l'objet DB retourné.
gorm.open Ce qui suit: (plus ou moins):
sql.Open
Pour renvoyer un objet DB
DB.Ping()
Pour le forcer à parler à la base de donnéesCela signifie que l'un sql.DB
Est créé pour chaque gorm.Open
. Par the the the doc , cela signifie un pool de connexion pour chaque objet DB.
Cela signifie que les recommandations de SQL.OPEN s'appliquent à gorm.Open
:
La DB renvoyée est sûre pour une utilisation simultanée par plusieurs goroutines et maintient son propre pool de connexions inactives. Ainsi, la fonction ouverte doit être appelée juste une fois. Il est rarement nécessaire de fermer une dB.
Oui, notez également que le pool de connexion peut être configuré en tant que tel:
// SetMaxIdleConns sets the maximum number of connections in the idle connection pool.
db.DB().SetMaxIdleConns(10)
// SetMaxOpenConns sets the maximum number of open connections to the database.
db.DB().SetMaxOpenConns(100)
// SetConnMaxLifetime sets the maximum amount of time a connection may be reused.
db.DB().SetConnMaxLifetime(time.Hour)