개요
이 가이드 에서는 클라이언트 사이드 작업 시간 제한(CSOT) 이라고도 하는 고 (Go) 운전자 의 단일 시간 제한 설정에 대해 학습 수 있습니다.
고 (Go) 운전자 사용하여 서버 작업을 수행할 때 서버 작업을 완료할 수 있는 시간을 제한할 수도 있습니다. 제한 시간은 서버 선택, 연결 체크아웃 및 서버 측 실행을 포함하여 작업을 완료하는 데 필요한 모든 단계에 적용됩니다. 제한 시간이 만료되면 고 (Go) 운전자 제한 시간 예외를 발생시킵니다.
참고
실험적 기능
CSOT 기능 실험적 기능이며 향후 드라이버 릴리스 에서 변경될 수 있습니다.
timeoutMS 옵션
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))
참고
시간 초과 사양에 따른 재시도
허용되는 시간 초과 값
다음 표에서는 timeoutMS
에 허용되는 값에 해당하는 시간 초과 동작을 설명합니다.
값 | 행동 |
---|---|
양의 정수 | 작업 완료에 사용할 시간 제한을 설정합니다. |
| 작업이 시간 초과되지 않도록 지정합니다. |
| Defers the timeout behavior to the following settings: These settings are deprecated and are ignored if you set timeoutMS . |
timeoutMS
옵션을 지정하면 운전자 각 서버 작업에 지정된 시간 제한을 자동으로 적용합니다.
시간 초과 상속
작업의 컨텍스트에서 특정 작업에 대해 다른 시간 제한을 설정하다 하지 않으면 기본값 으로 애플리케이션 의 모든 작업은 Client
의 Timeout
옵션을 상속합니다.
작업에 전달된 컨텍스트에 시간 초과를 설정하다 운전자 해당 값을 작업에 사용합니다. 컨텍스트 시간 제한을 지정하지 않으면 컨텍스트 작업은 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()
트랜잭션에 대해 자세히 학습 트랜잭션 가이드 참조하세요.
Cursors
커서는 CSOT 기능 사용할 때 구성 가능한 시간 초과 설정을 제공합니다. 시간 초과 사양이 있는 컨텍스트를 Cursor 메서드에 전달하여 커서 시간 초과를 조정할 수 있습니다.
커서를 생성하는 작업의 경우 시간 초과 설정은 커서 의 수명을 제한하거나 원래 작업과 모든 후속 호출에 별도로 적용할 수 있습니다.
예시 를 들어 Cursor.Next()
메서드에 컨텍스트 시간 제한을 전달하면 결과 문서 가져오는 각 조치 에 시간 제한이 적용됩니다. 컨텍스트 시간 제한을 Cursor.All()
메서드에 전달하면 제한 시간이 커서 의 전체 수명에 적용됩니다.
커서에 대해 자세히 학습하려면 커서에서 데이터 액세스 가이드를 참조하세요.
API 문서
고 (Go) 운전자 에서 시간 초과를 사용하는 방법에 대해 자세히 학습 다음 API 설명서를 참조하세요.