2012-09-29 7 views
2

Node.js의 MongoDB 데이터베이스에 RESTful (ish) 인터페이스를 구현하려고합니다. Node.js의 Mongodb 컬렉션 객체 캐싱

var mongo = require('mongodb'), 
    Server = mongo.Server, 
    Db = mongo.Db; 

var server = new Server('localhost', 27017, {auto_reconnect: true}); 
var db = new Db('exampleDb', server); 

db.open(function(err, db) { 
    if(!err) { 
     db.collection('test', function(err, collection) { 
      // do stuff with collection 
     }); 
    } 
}); 

그래서 기본 DB 접속에 관련된 세 개의 객체 (서버, DB 및 컬렉션)이 다음과 같습니다 docs에 따르면, 기본 관용구는 같은 것입니다. 제 질문은 시작시로드 할 수 있고 모든 http 요청에 대해 다시 사용할 수 있도록 캐싱되어야하며 요청마다 다시 만들어야한다는 것입니다. 내 가정은 그것이 오래 살 서버와 DB 개체 괜찮아요,하지만 난 컬렉션 개체에 대해 잘 모르겠습니다.

+3

db.open을 두 번 호출하는 특별한 이유가 있습니까? –

+0

아니요, 죄송합니다. 두 개의 다른 장소에서 잘라내어 붙여 넣기 만하면됩니다. 결정된. – Jay

답변

0

세 가지 (서버 연결, 데이터베이스 및 컬렉션)를 모두 저장하고 앱을 시작하십시오. Mongoose과 같은 MongoDB 용 ODM은 의심 스럽다면 대비합니다. 코드를 너무 깊게 중첩하지 않으려면 async을 사용하는 것이 좋습니다.

개인적으로는 내가 할 수있는 mongo-lite을 사용합니다. var db = require('mongo-lite').connect('mongodb://localhost/exampleDb', ['test']); 그 후 db.test, my collection으로 학습 할 수 있습니다. 이것은 저에게 많은 상용구를 저장합니다.

0

특히 이처럼 많은 수의 콜렉션이있는 경우 서버가 작동하지 않을 경우 콜렉션이 오래 지속될 수 있습니다. 그것은 단지 당신이 사용하고있는 기억 일뿐입니다.

0

왜 안 되니? 컬렉션 개체 자체는 많은 메모리를 소비하지 않으며 mongodb, 쿼리, 저장 등과 상호 작용하는 모든 함수를 제공합니다. 요청할 때마다 다시 만들고 제거하는 것은 의미가 없습니다.

0

일반적으로 열려있는 콜백은 응용 프로그램/서버의 나머지 부분을 시작하는 논리를 시작합니다. 그런 다음 db 참조를 유지하고 요청 당 db.collection을 호출합니다. 나는 대개 REST 리소스에서 db ref를 가져와 모든 것을 깨끗하게 유지할 수있는 서비스를 가지고 있습니다. 다시 이것은 응용 프로그램 내의 db/collection 사용에 따라 달라질 수 있습니다.