복붙노트

[MONGODB] 왜 Node.js를 코드에서 MongoDB를 연결 어느 곳을 폐쇄하지 않는 것이 좋습니다?

MONGODB

왜 Node.js를 코드에서 MongoDB를 연결 어느 곳을 폐쇄하지 않는 것이 좋습니다?

Node.js를 코드는 다음과 같은 고려 :

function My_function1(_params) {
    db.once('open', function (err){
     //Do some task 1
});
}

function My_function2(_params) {
    db.once('open', function (err){
     //Do some task 2
});
}

모든 연결을 종료하지 말한다 모범 사례에 대한 링크를 참조하십시오

https://groups.google.com/forum/#!topic/node-mongodb-native/5cPt84TUsVg

나는 로그 파일 데이터를 다음이 포함 보았다 :

Fri Jan 18 11:00:03 Trying to start Windows service 'MongoDB'
Fri Jan 18 11:00:03 Service running
Fri Jan 18 11:00:03 [initandlisten] MongoDB starting : pid=1592 port=27017 dbpath=\data\db\ 64-bit host=AMOL-KULKARNI
Fri Jan 18 11:00:03 [initandlisten] db version v2.2.1, pdfile version 4.5
Fri Jan 18 11:00:03 [initandlisten] git version: d6...e0685521b8bc7b98fd1fab8cfeb5ae
Fri Jan 18 11:00:03 [initandlisten] build info: windows sys.getwindowsversion(major=6, minor=1, build=7601, platform=2, service_pack='Service Pack 1') BOOST_LIB_VERSION=1_49
Fri Jan 18 11:00:03 [initandlisten] options: { config: "c:\mongodb\mongod.cfg", logpath: "c:\mongodb\log\mongo.log", service: true }
Fri Jan 18 11:00:03 [initandlisten] journal dir=/data/db/journal
Fri Jan 18 11:00:03 [initandlisten] recover begin
Fri Jan 18 11:00:04 [initandlisten] recover lsn: 6624179
Fri Jan 18 11:00:04 [initandlisten] recover /data/db/journal/j._0
Fri Jan 18 11:00:04 [initandlisten] recover skipping application of section seq:59343 < lsn:6624179
Fri Jan 18 11:00:04 [initandlisten] recover skipping application of section seq:118828 < lsn:6624179
Fri Jan 18 11:00:04 [initandlisten] recover skipping application of section seq:238138 < lsn:6624179
Fri Jan 18 11:00:04 [initandlisten] recover skipping application of section seq:835658 < lsn:6624179
Fri Jan 18 11:00:04 [initandlisten] recover skipping application of section seq:955218 < lsn:6624179
Fri Jan 18 11:00:04 [initandlisten] recover skipping application of section seq:3467218 < lsn:6624179
Fri Jan 18 11:00:04 [initandlisten] recover skipping application of section seq:3526418 < lsn:6624179
Fri Jan 18 11:00:04 [initandlisten] recover skipping application of section seq:3646154 < lsn:6624179
Fri Jan 18 11:00:04 [initandlisten] recover skipping application of section seq:3705844 < lsn:6624179
Fri Jan 18 11:00:04 [initandlisten] recover skipping application of section more...
Fri Jan 18 11:00:05 [initandlisten] recover cleaning up
Fri Jan 18 11:00:05 [initandlisten] removeJournalFiles
Fri Jan 18 11:00:05 [initandlisten] recover done
Fri Jan 18 11:00:10 [initandlisten] query MYDB.system.namespaces query: { options.temp: { $in: [ true, 1 ] } } ntoreturn:0 ntoskip:0 nscanned:5 keyUpdates:0  nreturned:0 reslen:20 577ms
Fri Jan 18 11:00:10 [initandlisten] waiting for connections on port 27017
Fri Jan 18 11:00:10 [websvr] admin web console waiting for connections on port 28017
Fri Jan 18 11:01:10 [PeriodicTask::Runner] task: WriteBackManager::cleaner took: 32ms
Fri Jan 18 13:36:27 [initandlisten] connection accepted from 192.168.0.1:50076 #1 (1 connection now open)
Fri Jan 18 13:36:27 [initandlisten] connection accepted from 192.168.0.1:50077 #2 (2 connections now open)
Fri Jan 18 13:36:27 [initandlisten] connection accepted from 192.168.0.1:50078 #3 (3 connections now open)
Fri Jan 18 13:36:27 [initandlisten] connection accepted from 192.168.0.1:50079 #4 (4 connections now open)
Fri Jan 18 13:36:27 [initandlisten] connection accepted from 192.168.0.1:50080 #5 (5 connections now open)
Fri Jan 18 13:36:27 [initandlisten] connection accepted from 192.168.0.1:50081 #6 (6 connections now open)
Fri Jan 18 13:36:27 [initandlisten] connection accepted from 192.168.0.1:50082 #7 (7 connections now open)
Fri Jan 18 13:36:27 [initandlisten] connection accepted from 192.168.0.1:50083 #8 (8 connections now open)
Fri Jan 18 13:36:27 [initandlisten] connection accepted from 192.168.0.1:50084 #9 (9 connections now open)
Fri Jan 18 13:36:27 [initandlisten] connection accepted from 192.168.0.1:50085 #10 (10 connections now open)
...........................................
Fri Jan 18 13:36:48 [initandlisten] connection accepted from 192.168.0.1:50092 #97 (97 connections now open)

이 있는가가 접속 풀링 내부 핸들을 폐쇄 다중 접속을 개방하지 의해 서버의 오버 헤드를 생성하지 않는다?

그러나 MongoDB를 문서에는 "이 요청 풀링을 사용하지 않는 응용 프로그램에 대한 정상적인 동작입니다"언급

캔 누군가의 도움이 날이 이해.

해결법

  1. ==============================

    1.당신은 당신의 응용 프로그램에 걸쳐 DB를 MongoClient에 한 번 연결과 재사용을 엽니 다. 여러 DB를 사용해야하는 경우 연결의 동일한 기본 풀을 사용하여 다른 DB에 대한 작업에 DB 개체의 .DB 기능을 사용합니다. 풀 (pool)은 귀하의 Node.js를 응용 프로그램을 동결 할 수없는 하나의 차단 작동을 보장하기 위해 유지됩니다. 기본 크기 풀의 5 개 연결 경우.

    당신은 당신의 응용 프로그램에 걸쳐 DB를 MongoClient에 한 번 연결과 재사용을 엽니 다. 여러 DB를 사용해야하는 경우 연결의 동일한 기본 풀을 사용하여 다른 DB에 대한 작업에 DB 개체의 .DB 기능을 사용합니다. 풀 (pool)은 귀하의 Node.js를 응용 프로그램을 동결 할 수없는 하나의 차단 작동을 보장하기 위해 유지됩니다. 기본 크기 풀의 5 개 연결 경우.

    http://mongodb.github.com/node-mongodb-native/driver-articles/mongoclient.html

    또한 추가하는 것을 잊었다. 다른 대답은 새로운 TCP 연결을 설정하는 지적의 이유는 당신이 연결을 다시 사용하는 것이 현명 비싸다 경시와 메모리입니다. 또한 새로운 연결은 새로운 Thread가 아니라 DB의 메모리를 사용하여 MongoDB에 생성되는 원인이됩니다.

  2. ==============================

    2.mongodb.log에서 열려 많은 연결을 가지고 드문 일이 아니다 그래서 MongoDB를 풀 데이터베이스 연결이보다 효율적으로

    mongodb.log에서 열려 많은 연결을 가지고 드문 일이 아니다 그래서 MongoDB를 풀 데이터베이스 연결이보다 효율적으로

    그러나 앱이 완전히 닫힐 때 모든 연결을 닫습니다 유용합니다. 이 코드는이 작업을 수행하는 가장 우수합니다.

    process.on('SIGINT', function() {
      mongoose.connection.close(function () {
        console.log('Mongoose disconnected on app termination');
        process.exit(0);
      });
    });
    
  3. ==============================

    3.나는 이유는 대부분의 언어 사이의 상대적으로 같은 생각하지만 난 더 Node.js를 전문가도 아니다.

    나는 이유는 대부분의 언어 사이의 상대적으로 같은 생각하지만 난 더 Node.js를 전문가도 아니다.

    연결을 만들기입니다 :

    ( http://php.net/manual/en/mongo.connecting.pools.php )

    PHP 용이며 문서는 부분은 아직 전부는 아니지만, 지금도 대부분에 걸쳐 적용되는 드라이버 날짜의 작은 밖으로 것이어야한다.

    각 연결은 분명 오버 헤드를 별도의 스레드를 사용할 수 있습니다.

    그것은에서 보인다 :

    http://mongodb.github.com/node-mongodb-native/driver-articles/mongoclient.html#the-url-connection-format

    Node.js를하는 것이 여전히 시도하고 연결을 만드는 오버 헤드를 중지 연결 풀링을 사용합니다. 이것은 물론, 더 이상 PHP의 같은 다른 드라이버에 적용되지 않습니다.

    그것은 당신의 데이터베이스 서버에 연결 X 양 (기본값은 5) 열리고 전송 데이터가 필요합니다 무료 접속에 그 로그를 일으킬 수있는이 불쾌한 과정을 피하는 된 연결을 재사용 할 수 있도록 작업 : http://docs.mongodb.org / 수동 / 자주 묻는 질문 / 개발자 / # 왜 - - MongoDB를 로그 그리 많은 연결 가능 - 이벤트 수행하고 증가 연결 오버 헤드를.

  4. from https://stackoverflow.com/questions/14495975/why-is-it-recommended-not-to-close-a-mongodb-connection-anywhere-in-node-js-code by cc-by-sa and MIT license