2016-02-20 5 views
8

Ho bisogno di chiarimenti su cosa è il pool e cosa fa. I documenti dicono che Sequelize imposterà un pool di connessioni sull'inizializzazione quindi dovresti idealmente creare sempre un'istanza per database.Come utilizzare il pool di connessioni al database in Sequelize.js

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' 
}); 
+1

Perché i pool di connessione sono utili: https://stackoverflow.com/questions/44081488/why-a-connection-pool-of-many-opened-connections-is-less-costly-for-a-system- tha –

risposta

9

Quando l'applicazione deve recuperare i dati dal database, crea una connessione al database. La creazione di questa connessione comporta un sovraccarico di tempo e risorse macchina sia per l'applicazione che per il database. Molte librerie di database e ORM tenteranno di riutilizzare le connessioni quando possibile, in modo che non incorrano nel sovraccarico di stabilire la connessione DB più e più volte. Lo pool è la raccolta di queste connessioni salvate e riutilizzabili che, nel tuo caso, vengono prelevate da Sequelize. La configurazione di

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

riflette il fatto che la piscina deve:

  1. mai avere più di cinque connessioni aperte (max: 5)
  2. Come minimo, sono pari a zero aperto connectsion/mantenere nessun numero minimo di connessioni (min: 0)
  3. Rimuovere una connessione dal pool dopo che la connessione è stata inattiva (non utilizzata) per 10 secondi (idle: 10000)

tl; dr: I pool sono una buona cosa che aiutano con il database e le prestazioni complessive dell'applicazione, ma se si è troppo aggressivi con la configurazione del pool si può incidere negativamente sulle prestazioni complessive.

+0

Bella risposta! Con questa configurazione 'idle', se la mia query richiede più di 10 secondi, la connessione viene chiusa senza che io riceva una risposta? – hakermania

0

sembra che si può provare a mettere pool-false per evitare di avere la piscina bing creato. Ecco la tabella dettagli API: http://sequelize.readthedocs.org/en/latest/api/sequelize/

[options.pool = {}] oggetto caso sequelize utilizzare un pool di connessioni. L'impostazione predefinita è true

+0

puoi entrare nel dettaglio della piscina e dell'oggetto della piscina –

0

piscina è drenante errore

ho trovato questa discussione nella mia ricerca di un errore di Sequalize stava dando la mia app node.js: piscina è drenante. Non potevo capirlo per la vita di me. Quindi per coloro che seguono le mie orme:

Il problema era che stavo chiudendo il database prima di quanto pensassi, con il comando sequelize.closeConnections(). Per qualche ragione, invece di un errore come "il database è stato chiuso", si stava invece dando l'oscuro errore "il pool si sta esaurendo".