2012-02-06 4 views
0

이전의 데이터베이스 사용 경험이 없지만 현재 구축중인 응용 프로그램에 사용해야하고 MongoDB를 선택해야합니다.MongoDB 객체 인스턴스

이제 모든 것이 작동하지만, 데이터베이스에 요청할 때마다 새로운 Mongo 객체를 생성하고 있는데, 틀렸다고 생각합니다.

그래서 나는 내가 MongoDbConnnection라는 클래스에 다음과 같은 몇 가지 코드를 가지고 요청하고이 작업을 수행하는 올바른 방법이 무엇인지 배우고 싶어요 :

public class MongoDbConnection { 
    private static Mongo _mongo; 
     public static Mongo getMongo() 
     { 
      if (_mongo == null) { 
      try { 
        _mongo = new Mongo(); 
       } catch (UnknownHostException e) { 
        _mongo = null; 
        e.printStackTrace(); 
       } catch (MongoException e) { 
        _mongo = null; 
        e.printStackTrace(); 
       } 
      } 
     return _mongo; 
    } 
} 

그래서 때마다 내가 쿼리를 할 필요가, 나는 Mongo m = MongoDbConnnection.getMongo();을하고 앞으로 나아 간다.

이 정보가 맞습니까?

HttpServlet을 확장하는 또 다른 클래스가있어서 연결을 닫을 때 혼란 스럽습니다. 누군가가 URL을 요청할 때마다 데이터베이스를 쿼리하고 정보를 반환해야 할 때마다 GET이 응답합니다. 한 요청에 응답 한 직후에 닫히면 다른 사람들이 바로 그 요청을 다시 요청하면 어떨까요? 그런 다음 다시 새로운 Mongo 객체를 생성해야합니까?

다른 말로하면, Mongo 인스턴스가 연결 폴링을 유지한다는 것을 알기 때문에 m.close()를 호출 할 때 사용한 공용 연결을 바꿀 수 있습니까? 아니면 객체 m을 null로 설정합니까?

답변

0

예, 당신은 대부분 당신을 위해 유지 연결 풀에서 연결지고있다 :

Mongo m = new Mongo(); 
DB db = m.getDB("mydb"); 

당신은 하나의 몽고의 객체가 필요를, 그리고 스레드 안전합니다.

나는 세부 구현에보고하지 않은,하지만 당신은

db.close() from your code. 

이 것은 단순히 풀에 연결을 반환하고 닫습니다하지 호출해야합니다. 당신이 그것을 잊어 버린다면, 나는 Mongo 객체가 연결이 더 이상 사용되지 않는다는 것을 깨닫기 전에 시간이 걸릴 것으로 생각합니다.

관련 문제