2012-09-29 12 views
12

Robię pojedynczego połączenia MongoDB poprzez Mongoose w node.js ekspresowe aplikacji:Mongoose.js tworzy wiele połączeń do MongoDB z jednej connect() zadzwonić

var express = require('express'); 
var mongoose = require('mongoose'); 
mongoose.connect('localhost', 'test'); 

I następnie zdefiniować schemat, a następnie modelach i wreszcie kontroler, który ciągnie wszystkich użytkowników z bazy danych:

app.get('/users', function (req, res) { 
    return User.find(function (err, users) { 
    if (!err) { 
     return res.send(users); 
    } 
    }); 
}); 

te połączenia DB otwarte podczas uruchamiania aplikacji i pozostają otwarte do czasu trwania node.js aplikacji.

Co przeszkadza mi, dlaczego mam 5 połączeń otwartych? Zaraz po zamknięciu aplikacji node.js wszystkie 5 połączeń zostanie zamkniętych. enter image description here

pokrewne uwaga: W przypadku serwera REST API lepiej jest mieć połączenie MongoDB zawsze otwarte. Czy też lepiej ręcznie otwierać/zamykać połączenia na każde żądanie użytkownika? d

Odpowiedz

39

To dlatego, że Mongoose używa puli 5 połączeń (domyślnie), które są udostępniane w całej aplikacji. Aby uzyskać najlepszą wydajność, najlepiej pozostawić je otwarte.

Możesz zmienić domyślne zachowanie za pomocą parametru options na mongoose.connect. Na przykład:

mongoose.connect('localhost', 'test', { server: { poolSize: 3 }}); // Use 3 connections 
+0

dziękuję. zastanawiałem się nad tym samym. – chovy

+0

Niesamowite, dziękuję za wyjaśnienie :-)! –

+0

Dziękuję za tę odpowiedź, zwariowałem próbując dowiedzieć się, dlaczego ciągle otwierało 5 połączeń jednocześnie. – Benny

Powiązane problemy