2014-02-07 4 views
2

내 응용 프로그램에는 코드가 주기적으로 연결될 DB가 있지만 매우 드물게 사용됩니다 (하루에 한 번).거의 사용되지 않는 몽구스 연결

모듈 (app) init 중에 연결 한 다음 응용 프로그램 실행주기 동안 모듈 전체에서 사용할 수 있습니까?

options.server.socketOptions = options.replset.socketOptions = { keepAlive: 1 }; 
mongoose.connect(uri, options); 

또는 표준 자동 재 연결 기능을 충분히 할 것이다 : 나는 확실하지 않다

var conn = mongoose.createConnection(process.env.SOME_DB) 

나는 제안 몽구스의 문서에서 살아 옵션을 계속해야합니까?

"장기 실행 응용 프로그램"은 무엇입니까? 실제로 모든 실시간 서비스는 장시간 실행되는 응용 프로그램이므로 프로덕션 환경에서 이러한 모든 서비스를 활성화해야합니다.

또한 연결 풀이 무엇이며 어떻게 영향을 미칠지 잘 모릅니다.

+1

keepAlive는 새로운 연결이 만들어 질 때까지 연결이 시간 초과해야하는 ms 수를 나타내는 부울 값이 아니라 숫자입니다. 이런 이유 때문에, 1로 설정하는 것은 매우 바람직하지 않습니다. 왜냐하면 몽구스가 실제로 연결하면 안되기 때문입니다. –

+0

프로덕션 환경에서이 기능을 사용할 수 있었고 응용 프로그램이 수천 개의 연결을 만들고 있었고 끊임없이 내 DB를 다운 시켜서 내 복제본 (및 백 등)으로 전환했습니다. keepAlive를 더 큰 값으로 설정하는 것이 좋습니다. 나는 2000 년으로 설정했습니다. –

답변

4

은 몽구스 문서에서이 참조가 있습니다 :

http://mongoosejs.com/docs/connections.html

그리고 네, 그것은 일반적으로 좋은 생각이다.

또한 해당 문서에서 연결 풀에 대해 설명합니다. 그러나 일반적으로 Mongoose는 요청을 동시에 처리 할 수 ​​있도록 여러 개의 소켓 연결을 server/replica-set/mongos 인스턴스에 대해 열어 두지 않고 유지합니다. 예, IO에서 비동기 콜백이 있더라도 대기 시간이 있기 때문에 연결 풀은 다른 채널이 통화중인 동안 다른 채널이 통화 할 수있게합니다.

네, 일반적으로 좋은 생각입니다.

+0

저는 또한 "오래 실행되는 응용 프로그램"이 무엇인지 모르십니까? 실제로 모든 실시간 서비스는 장시간 실행되는 응용 프로그램이므로 프로덕션 환경에서 이러한 모든 서비스를 활성화해야합니다. – WHITECOLOR

+1

꽤 많이 있습니다. '단명'이라면 주기적으로 호출되는 빠른 스크립트 또는 프로세스 일 것입니다. 개발/테스트하는 동안 일반적으로 많이 다시 시작합니다. Keep-Alive는 다른 서비스와 계속 통신해야하는 서비스에 대한 ** 좋은 ** 옵션입니다. –

+0

그리고 (원격) mongodb로 백업 된 실제로 일반적인 REST 서비스 서버는 어떻습니까? 내 일반적인 몽구스 연결을 유지해야합니까? – WHITECOLOR