Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ / /
Go 드라이버
/ /

연결 풀

이 가이드 에서는 고 (Go) 운전자 연결 풀을 사용하여 MongoDB deployment 에 대한 연결을 관리 방법과 애플리케이션 에서 연결 풀 설정을 구성하는 방법에 대해 학습 합니다.

연결 풀 고 (Go) 운전자 에 의해 유지 관리되는 개방형 데이터베이스 연결의 캐시 입니다. 애플리케이션 MongoDB 에 대한 연결을 요청하면 고 (Go) 운전자 풀에서 원활하게 연결을 가져오고, 작업을 수행하고, 재사용을 위해 연결을 풀에 반환합니다.

연결 풀은 애플리케이션 지연 시간 줄이고 고 (Go) 운전자 에서 새 연결을 생성하는 횟수를 줄이는 데 도움이 됩니다.

모든 Client 인스턴스 에는 MongoDB 토폴로지 의 각 서버 에 대한 내장 연결 풀 있습니다. minPoolSize 옵션을 구성하지 않으면 연결 풀이 필요에 따라 소켓을 엽니다. 이러한 소켓은 애플리케이션 에서 동시 MongoDB 작업 또는 goroutines을지원 .

Client 인스턴스 시작되면 서버의 상태 모니터링 위해 MongoDB 토폴로지 에서 서버 당 두 개의 소켓을 엽니다.

예시 들어, 3노드 복제본 세트 에 연결된 클라이언트 6개의 모니터링 소켓을 엽니다. 애플리케이션 maxPoolSize 기본값 설정을 사용하고 프라이머리 (기본값) 노드 만 쿼리하는 경우 연결 풀 에는 최대 106 개의 열린 소켓과 100 개의 연결이 있을 수 있습니다. 애플리케이션 읽기 설정 (read preference) 사용하여 세컨더리 노드를 쿼리 경우 해당 풀도 커지고 총 연결 수가 306 개가 될 수 있습니다.

효율성 위해 각 프로세스 에 대해 한 번씩 클라이언트 만들고 모든 작업에 재사용합니다. 각 요청 에 대해 새 클라이언트 를 만들면 지연 시간 증가하므로 피합니다.

네트워크 오류로 인해 소켓이 닫혀 총 소켓 수(사용 중 및 유휴 상태 모두)가 최솟값 아래로 떨어지면 최솟값에 도달할 때까지 더 많은 소켓이 열립니다.

연결 문자열 사용하거나 options.Client 메서드를 사용하여 연결 풀 대한 설정을 지정할 수 있습니다.

Connection String 또는 ClientOptions 탭 선택하여 해당 구문을 확인합니다.

다음은 연결 풀 구성하는 데 사용할 수 있는 연결 문자열 설정입니다.

설정
설명

maxPoolSize

풀에서 열 수 있는 최대 연결 수입니다. 연결 풀 maxPoolSize 연결이 열려 있는 동안 작업에 새 연결이 필요한 경우 새 작업은 새 연결이 열릴 때까지 기다립니다. 이 대기 시간을 제한하려면 단일 시간 제한 설정을 사용합니다.

기본값입니다: 100

minPoolSize

풀에서 열린 최소 연결 수입니다. 연결 풀 이 수의 소켓으로 초기화됩니다. minPoolSize 값은 maxPoolSize 값보다 작아야 합니다.

기본값: 0

maxConnecting

풀이 동시에 설정할 수 있는 최대 연결 수입니다.

기본값입니다: 2

maxIdleTimeMS

연결이 제거되거나 닫히기 전에 풀에서 유휴 상태로 유지될 수 있는 최대 시간(밀리초)입니다.

기본값입니다: None (no limit)

waitQueueTimeoutMS`

연결이 가능해질 때까지 스레드가 기다릴 수 있는 최대 대기 시간(밀리초)을 지정합니다. 이 정의된 시간보다 소켓을 오래 기다리는 작업은 연결 오류를 발생시킵니다.

Default: 0 (no limit)

다음 표에서는 설정을 연결하여 드라이버 동작을 수정할 수 있는 방법을 설명합니다.

설정
설명

SetMaxPoolSize()

풀에서 열 수 있는 최대 연결 수입니다. 연결 풀 에 구성된 최대 연결 수가 열려 있는 동안 작업에 새 연결이 필요한 경우 새 작업은 새 연결이 열릴 때까지 기다립니다. 이 대기 시간을 제한하려면 단일 시간 제한 설정을 사용합니다.

기본값입니다: 100

SetMinPoolSize()

풀에서 열린 최소 연결 수입니다. MinPoolSize 값은 MaxPoolSize 값보다 작아야 합니다.

기본값: 0

SetMaxConnecting()

풀이 동시에 설정할 수 있는 최대 연결 수입니다.

기본값입니다: 2

SetMaxConnIdleTime()

연결이 제거되거나 닫히기 전에 풀에서 유휴 상태로 유지될 수 있는 최대 시간(밀리초)입니다.

기본값입니다: 0 (no limit)

해당 예시 보려면 Connection String 또는 ClientOptions 탭 선택합니다.

다음 코드에서는 연결 문자열 사용하여 최대 연결 풀 크기를 50, 최소 풀 크기를 10, 최대 유휴 시간을 30000 밀리초(30 초)로 구성합니다.

// Connection string with connection pool options
const uri = "mongodb://localhost:27017/?maxPoolSize=50&minPoolSize=10&maxIdleTimeMS=30000"

다음 코드는 클라이언트 만들고 연결 문자열 ApplyURI() 메서드에 전달합니다.

// Creates a new client and connects to the server
client, err := mongo.Connect(options.Client().ApplyURI(uri))
if err != nil {
log.Fatal(err)
}

다음 코드는 클라이언트 생성하고 최대 연결 풀 크기를 50, 최소 풀 크기를 10, 최대 유휴 시간을 30000 밀리초(30 초)로 설정하여 연결 풀 옵션을 설정합니다.

// Sets client options with connection pool settings
clientOptions := options.Client().
ApplyURI(uri).
SetMaxPoolSize(50).
SetMinPoolSize(10).
SetMaxConnIdleTime(30 * time.Second)
// Creates a new client and connects to the server
client, err := mongo.Connect(clientOptions)
if err != nil {
log.Fatal(err)
}

연결 풀은 속도 제한이 있어 각 연결 풀 언제든지 최대 maxConnecting 개의 연결 값만 병렬로 생성할 수 있습니다. 모든 새 goroutine 다음과 같은 경우 대기를 중지합니다:

  • 기존 goroutine 중 하나가 연결 생성을 완료하거나 기존 연결이 풀로 다시 확인됩니다.

  • 연결 생성에 대한 속도 제한으로 인해 기존 연결을 재사용하는 드라이버의 기능이 향상됩니다.

운전자 소켓을 사용할 수 있을 때까지 기다릴 수 있는 작업 수를 제한하지 않으므로 작업 대기열을 관리 것은 애플리케이션의 책임입니다. waitQueueTimeoutMS 옵션을 정의하지 않는 한 작업은 원하는 시간 동안 대기할 수 있습니다.

소켓에 대해 waitQueueTimeoutMS에서 정의한 시간보다 오래 대기하는 작업은 연결 오류를 발생시킵니다. 모든 작업을 완료하는 것보다 부하가 급증하는 동안 작업 기간을 제한하는 것이 더 중요한 경우 이 옵션을 사용하세요.

goroutine 에서 Client.Disconnect() 를 호출하면 운전자 모든 유휴 소켓을 닫은 다음 풀로 반환되는 모든 소켓을 닫습니다.

연결 풀 사용에 대한 자세한 내용은 서버 매뉴얼의 연결 풀 문서를 참조하세요.

이 가이드에서 사용되는 메서드 또는 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.

돌아가기

MongoDB Server 실행 시간 제한

이 페이지의 내용