1

mongo 데이터베이스에 연결하기 위해 다음 자습서를 기반으로 다음 코드를 사용하고 있습니다. mongodb 연결 스레드 안전

내가 디자인에 관한 몇 가지 의심이 :

  1. 는 동시에 여러 스레드에서 MongoConnection.getDB() 함수를 호출 괜찮습니까?
  2. 그렇지 않다면 동기화해야합니까?
  3. 디자인에 문제가있는 경우 어떤 종류의 원치 않는 영향을 줄 수 있습니까?

저는 mongodb을 처음 사용하므로 제 질문이 약간 순진 할 것 같습니다. 에서

public class MongoConnection { 

    private static MongoClient mongoClient = null; 

    private static String IP = "mongodb://user:[email protected]:27017/?authSource=demodb&authMechanism=SCRAM-SHA-1"; 
    private static String DATABASE = "demodb"; 

    static { 
     mongoClient = new MongoClient(new MongoClientURI(IP)); 
    } 

    private MongoConnection() { 

    } 

    public static DB getDB() { 
     return mongoClient.getDB(DATABASE); 
    } 
} 

답변

1

docs 다음 MongoClient 인스턴스가 데이터베이스에 연결 풀을 나타냅니다

; 당신은 MongoClient 클래스의 인스턴스 하나가 여러개의 쓰레드를 가지고 있더라도 필요할 것입니다.

그리고 previous versions' quick start guides에서

:

MongoClient 클래스가 스레드 안전하고 스레드간에 공유 할 수 있도록 설계되어

. 일반적으로 주어진 데이터베이스 클러스터 만 1 인스턴스를 생성하고 application.`

그래서 걸쳐 사용, MongoClient.getDb(..)

+0

가 인용 것 같은데 스레드 사이에 아무런 문제가 없어야합니다. 인용문을 사용할 때 소스를 지정해야합니다. 본질적으로 ** 데이터베이스 연결 자체를 공유하지 않으려는 ** 엄격한 강조 **가 필요합니다. 이것은 데이터베이스 연결이나 일반적으로 "상태있는"네트워크 연결을 통해 꽤 오래된 것입니다. 단순히 스레드를 포크하거나 스폰하지 마십시오. –

+0

URL을 첨부하는 중 수정되었으므로 인용문이므로 \'\'입니다. – ialex

+1

사실 "인용문"은'>'를 사용하고 다른 틱은 '코드'를 나타냅니다. 만나다. 편집 됨. –