web-dev-qa-db-fra.com

Comment utiliser le pool de connexions de base de données dans Sequelize.js

J'ai besoin d'éclaircissements sur ce qu'est la piscine et ce qu'elle fait. Les docs disent que Sequelize va configurer un pool de connexion lors de l'initialisation, de sorte que vous ne devriez idéalement créer qu'une seule instance par base de données.

var sequelize = new Sequelize('database', 'username', 'password', {
  Host: 'localhost',
  dialect: 'mysql'|'mariadb'|'sqlite'|'postgres'|'mssql',

  pool: {
    max: 5,
    min: 0,
    idle: 10000
  },

// SQLite only
   storage: 'path/to/database.sqlite'
});
12
Mark A

Lorsque votre application doit extraire des données de la base de données, elle crée une connexion à la base de données. La création de cette connexion entraîne une surcharge de temps et de ressources machine pour votre application et la base de données. De nombreuses bibliothèques de bases de données et ORM tenteront de réutiliser les connexions dans la mesure du possible, de manière à ne pas avoir à surcharger l'établissement d'une connexion de base de données à la fois. pool est la collection de ces connexions réutilisables enregistrées qui, dans votre cas, sont extraites de Sequelize. Votre configuration de 

pool: {
    max: 5,
    min: 0,
    idle: 10000
  }

reflète que votre piscine devrait:

  1. Jamais plus de cinq connexions ouvertes (max: 5)
  2. Au minimum, aucune connexion ouverte/aucun nombre minimal de connexions (min: 0)
  3. Supprimer une connexion du pool après 10 secondes d'inactivité de la connexion (non utilisée) (idle: 10000)

tl; dr: les pools sont une bonne chose pour améliorer les performances de la base de données et de l’application, mais si vous êtes trop agressif avec sa configuration, vous risquez d’avoir un impact négatif sur les performances globales.

20
P Ackerman

la piscine est en train de drainer une erreur

J'ai trouvé ce fil dans ma recherche d'une erreur Sequalize en donnant à mon application node.js: le pool est en train de drainer . Je ne pouvais pas pour la vie de le comprendre. Donc, pour ceux qui suivent mes traces:

Le problème était que je fermais la base de données plus tôt que je ne le pensais, avec la commande sequelize.closeConnections(). Pour une raison quelconque, au lieu d’une erreur du type "la base de données a été fermée", elle donnait plutôt l’erreur obscure "le pool s’épuise".

1
Chris Troutner

Il semble que vous puissiez essayer de mettre pool à false pour éviter la création du pool. Voici le tableau des détails de l'API: http://sequelize.readthedocs.org/en/latest/api/sequelize/

[options.pool = {}] Objet Si séquentiel utiliser un pool de connexion . La valeur par défaut est true

0
shershen