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

MongoDB Server 실행 시간 제한

이 가이드 에서는 클라이언트 사이드 작업 시간 제한(CSOT) 이라고도 하는 고 (Go) 운전자 의 단일 시간 제한 설정에 대해 학습 수 있습니다.

고 (Go) 운전자 사용하여 서버 작업을 수행할 때 서버 작업을 완료할 수 있는 시간을 제한할 수도 있습니다. 제한 시간은 서버 선택, 연결 체크아웃 및 서버 측 실행을 포함하여 작업을 완료하는 데 필요한 모든 단계에 적용됩니다. 제한 시간이 만료되면 고 (Go) 운전자 제한 시간 예외를 발생시킵니다.

참고

실험적 기능

CSOT 기능 실험적 기능이며 향후 드라이버 릴리스 에서 변경될 수 있습니다.

MongoDB deployment 에 연결할 때 제한 시간을 지정하려면 timeoutMS 연결 옵션을 제한 시간 길이(밀리초)로 설정하다 . 다음과 같은 방법으로 timeoutMS 옵션을 설정하다 수 있습니다.

  • Client 인스턴스 에 대한 옵션을 지정할 때 SetTimeout() 메서드 호출

  • 연결 string에서 timeoutMS 매개변수 설정

다음 코드 예제에서는 클라이언트 수준 시간 제한을 200 밀리초로 설정하다 . Client 또는 Connection String 탭 선택하여 해당 코드를 확인합니다.

opts := options.Client().SetTimeout(200 * time.Millisecond)
client, err := mongo.Connect(opts)
uri := "<connection string>/?timeoutMS=200"
client, err := mongo.Connect(options.Client().ApplyURI(uri))

참고

시간 초과 사양에 따른 재시도

Client 또는 작업 수준 컨텍스트에서 시간 초과를 설정하다 서버 재시도 가능 오류를 반환하는 경우 운전자 시간 초과가 만료되기 전에 가능한 한 많은 횟수만큼 작업을 재시도합니다.

시간 초과가 만료되면 운전자 시간 초과 오류를 반환합니다. 재시도 가능 읽기재시도 가능 쓰기에 대한 자세한 내용은 서버 매뉴얼을 참조하세요.

다음 표에서는 timeoutMS에 허용되는 값에 해당하는 시간 초과 동작을 설명합니다.

행동

양의 정수

작업 완료에 사용할 시간 제한을 설정합니다.

0

작업이 시간 초과되지 않도록 지정합니다.

null 또는 unset

Defers the timeout behavior to the following settings:
These settings are deprecated and are ignored if you set timeoutMS.

timeoutMS 옵션을 지정하면 운전자 각 서버 작업에 지정된 시간 제한을 자동으로 적용합니다.

작업의 컨텍스트에서 특정 작업에 대해 다른 시간 제한을 설정하다 하지 않으면 기본값 으로 애플리케이션 의 모든 작업은 ClientTimeout 옵션을 상속합니다.

작업에 전달된 컨텍스트에 시간 초과를 설정하다 운전자 해당 값을 작업에 사용합니다. 컨텍스트 시간 제한을 지정하지 않으면 컨텍스트 작업은 Client 인스턴스 에서 시간 제한을 파생합니다.

다음 표에서는 각 수준에서 시간 초과 값이 상속되는 방식에 대해 설명합니다.

수준
상속 설명

작업

가장 높은 우선 순위를 가지며 다른 수준에서 설정하다 시간 초과 옵션을 재정의합니다.

트랜잭션

클라이언트 수준에서 설정하다 한 시간 초과 값보다 우선합니다.

고객

컨텍스트 시간 초과를 달리 지정하지 않는 해당 클라이언트 내의 모든 데이터베이스, 컬렉션, 세션, 트랜잭션 및 작업에 적용됩니다.

재정의 및 특정 옵션에 대한 자세한 내용은 다음 재정의 섹션을 참조하세요.

고 (Go) 운전자 데이터베이스 작업의 동작과 성능을 제어하기 위해 다양한 수준의 구성을 지원합니다.

보다 구체적인 수준에서 timeoutMS 옵션을 지정하여 클라이언트 수준 구성을 재정의할 수 있습니다. 이전 섹션의 표에서는 시간 초과 설정을 지정할 수 있는 수준에 대해 설명합니다. 이를 통해 개별 작업의 요구 사항에 따라 시간 초과를 사용자 지정할 수 있습니다.

다음 예시 클라이언트 수준의 시간 제한보다 우선 순위 하는 컨텍스트에서 작업 수준의 시간 제한을 설정하다 방법을 보여줍니다.

opts = options.Client().SetTimeout(200 * time.Millisecond)
client, err = mongo.Connect(opts)
if err != nil {
log.Fatal(err)
}
coll := client.Database("db").Collection("people")
ctx, cancel := context.WithTimeout(context.TODO(), 300*time.Millisecond)
defer cancel()
_, err = coll.InsertOne(ctx, bson.D{{"name", "Agnes Georgiou"}})

WithTransaction() 메서드를 사용하여 트랜잭션 수행할 때 컨텍스트 내에서 시간 초과를 설정하여 트랜잭션 작업에 시간 초과를 적용 할 수 있습니다.

다음 코드는 트랜잭션 수행하기 위해 WithTransaction() 메서드를 호출할 때 컨텍스트 시간 제한을 설정하다 방법을 보여줍니다.

txnContext, cancel := context.WithTimeout(context.TODO(), 300*time.Millisecond)
defer cancel()
result, err := session.WithTransaction(txnContext, func(ctx context.Context) (string, error) {
// Perform transaction operations
})

컨텍스트 시간 제한을 지정하지 않으면 운전자 상위 Client에 설정하다 시간 제한 값을 상속합니다.

컨텍스트 시간 초과를 다음 세션 메서드에 전달할 수도 있습니다.

  • AbortTransaction()

  • CommitTransaction()

  • EndSession()

트랜잭션에 대해 자세히 학습 트랜잭션 가이드 참조하세요.

커서는 CSOT 기능 사용할 때 구성 가능한 시간 초과 설정을 제공합니다. 시간 초과 사양이 있는 컨텍스트를 Cursor 메서드에 전달하여 커서 시간 초과를 조정할 수 있습니다.

커서를 생성하는 작업의 경우 시간 초과 설정은 커서 의 수명을 제한하거나 원래 작업과 모든 후속 호출에 별도로 적용할 수 있습니다.

예시 를 들어 Cursor.Next() 메서드에 컨텍스트 시간 제한을 전달하면 결과 문서 가져오는 각 조치 에 시간 제한이 적용됩니다. 컨텍스트 시간 제한을 Cursor.All() 메서드에 전달하면 제한 시간이 커서 의 전체 수명에 적용됩니다.

커서에 대해 자세히 학습하려면 커서에서 데이터 액세스 가이드를 참조하세요.

고 (Go) 운전자 에서 시간 초과를 사용하는 방법에 대해 자세히 학습 다음 API 설명서를 참조하세요.

돌아가기

Stable API

이 페이지의 내용