개요
스칼라 운전자 사용하여 서버 작업을 수행할 때 서버 작업을 완료할 수 있는 시간을 제한할 수도 있습니다. 이렇게 하려면 클라이언트 사이드 작업 시간 제한(CSOT)을 지정합니다. 제한 시간은 서버 선택, 연결 체크아웃 및 서버 측 실행을 포함하여 작업을 완료하는 데 필요한 모든 단계에 적용됩니다. 제한 시간이 만료되면 스칼라 운전자 제한 시간 예외를 발생시킵니다.
참고
실험적 기능
CSOT 기능 실험적 기능이며 향후 드라이버 릴리스 에서 변경될 수 있습니다.
timeoutMS 옵션
MongoDB deployment 에 연결할 때 제한 시간을 지정하려면 timeoutMS
연결 옵션을 제한 시간 길이(밀리초)로 설정하다 . 다음과 같은 방법으로 timeoutMS
옵션을 설정하다 수 있습니다.
MongoClientSettings.Builder
클래스에서timeout()
메서드 호출연결 string에서
timeoutMS
매개변수 설정
다음 코드 예제에서는 클라이언트 수준 시간 제한을 200
밀리초로 설정하다 . MongoClientSettings 또는 Connection
String 탭 선택하여 해당 코드를 확인합니다.
val settings = MongoClientSettings.builder .applyConnectionString(ConnectionString("<connection string>")) .timeout(200L, MILLISECONDS) .build val mongoClient = MongoClient(settings)
val uri = "<connection string>/?timeoutMS=200" val mongoClient = MongoClient(uri)
허용되는 시간 초과 값
다음 표에서는 timeoutMS
에 허용되는 값에 해당하는 시간 초과 동작을 설명합니다.
값 | 행동 |
---|---|
양의 정수 | 작업 완료에 사용할 시간 제한을 설정합니다. |
| 작업이 시간 초과되지 않도록 지정합니다. |
| Defers the timeout behavior to the following settings: These settings are deprecated and are ignored if you set timeoutMS . |
timeoutMS
옵션을 지정하면 운전자 각 서버 작업에 지정된 시간 제한을 자동으로 적용합니다. 다음 코드 예시 클라이언트 수준에서 200
밀리초의 시간 제한을 지정한 다음 MongoCollection.insertOne()
메서드를 호출합니다.
val settings = MongoClientSettings.builder .applyConnectionString(ConnectionString("<connection string>")) .timeout(200L, MILLISECONDS) .build val mongoClient = MongoClient(settings) val database = mongoClient.getDatabase("db") val collection = database.getCollection("people") collection.insertOne(Document("name" -> "Francine Loews"))
시간 초과 상속
timeoutMS
옵션을 지정하면 운전자 다른 스칼라 운전자 옵션과 동일한 상속 동작에 따라 시간 제한을 적용합니다. 다음 표에서는 각 수준에서 시간 초과 값이 상속되는 방식에 대해 설명합니다.
수준 | 상속 설명 |
---|---|
작업 | 가장 높은 우선 순위를 가지며 다른 수준에서 설정하다 시간 초과 옵션을 재정의합니다. |
트랜잭션 | 세션, 컬렉션, 데이터베이스 또는 클라이언트 수준에서 설정하다 시간 초과 값보다 우선합니다. |
Session | 해당 수준에서 다른 시간 초과 값을 설정하다 하지 않는 한 해당 세션 내의 모든 트랜잭션 및 작업에 적용됩니다. |
Database | 해당 수준에서 다른 시간 초과 값을 설정하다 하지 않는 한 해당 데이터베이스 내의 모든 세션 및 작업에 적용됩니다. |
컬렉션 | 해당 수준에서 다른 시간 초과 값을 설정하다 하지 않는 한 해당 컬렉션 의 모든 세션 및 작업에 적용됩니다. |
고객 |
|
재정의 및 특정 옵션에 대한 자세한 내용은 다음 재정의 섹션을 참조하세요.
재정의
스칼라 운전자 데이터베이스 작업의 동작과 성능을 제어하기 위해 다양한 수준의 구성을 지원합니다.
보다 구체적인 수준에서 timeoutMS
옵션을 지정하여 클라이언트 수준 구성을 재정의할 수 있습니다. 이전 섹션의 표에서는 시간 초과 설정을 지정할 수 있는 수준에 대해 설명합니다. 이를 통해 개별 작업의 요구 사항에 따라 시간 초과를 사용자 지정할 수 있습니다.
다음 예시 컬렉션 수준 시간 초과 구성이 클라이언트 수준 시간 초과 구성을 재정의할 수 있는 방법을 보여 줍니다.
val settings = MongoClientSettings.builder .applyConnectionString(ConnectionString("<connection string>")) .timeout(200L, MILLISECONDS) .build val mongoClient = MongoClient(settings) val database = mongoClient.getDatabase("db") val collection = database .getCollection("people") .withTimeout(300L, MILLISECONDS) // ... perform operations on MongoCollection
트랜잭션
트랜잭션 구현 defaultTimeout()
위해 새 ScalaClientSession 인스턴스 만드는 경우 인스턴스 빌드할 ClientSessionOptions
때 메서드를 사용합니다. 이 옵션을 사용하여 다음 메서드에 대한 시간 제한을 지정할 수 있습니다.
다음 코드는 ClientSession
을 인스턴스화할 때 defaultTimeout
를 설정하다 방법을 보여줍니다.
val opts = ClientSessionOptions.builder .defaultTimeout(200L, MILLISECONDS) .build val session = mongoClient.startSession(opts) // ... perform operations on ClientSession
defaultTimeout
를 지정하지 않으면 운전자 상위 MongoClient
에 설정하다 시간 초과 값을 사용합니다.
TransactionOptions
인스턴스 빌드할 때 timeout()
메서드를 호출하여 트랜잭션 수준 시간 제한을 설정하다 수도 있습니다. 이 옵션을 설정하면 트랜잭션 범위에서 수행되는 모든 작업에 시간 초과가 적용됩니다.
val transactionOptions = TransactionOptions.builder .timeout(200L, MILLISECONDS) .build
트랜잭션에 대해 자세히 학습 트랜잭션 수행 가이드 참조하세요.
클라이언트 암호화
클라이언트 측 필드 레벨 암호화 (CSFLE)를 사용하는 경우 운전자 timeoutMS
옵션을 사용하여 암호화 및 암호 해독 작업에 허용되는 시간을 제한합니다. ClientEncryptionSettings
인스턴스 빌드할 때 timeout()
메서드를 호출하여 ClientEncryption
인스턴스 에 대한 시간 초과 옵션을 설정하다 수 있습니다.
ClientEncryption
인스턴스 구성할 때 제한 시간을 지정하면 제한 시간이 해당 인스턴스 에서 수행되는 모든 작업의 수명을 제어합니다. ClientEncryption
을(를) 인스턴스화할 때 시간 초과를 제공하지 않으면 인스턴스 는 ClientEncryption
생성자에 사용된 MongoClient
의 시간 초과 설정을 상속합니다.
클라이언트 와 ClientEncryption
에서 모두 timeoutMS
을 설정하다 ClientEncryption
에 제공된 값이 우선합니다.
Observables
Observable
인스턴스는 CSOT 기능 사용할 때 구성 가능한 시간 초과 설정을 제공합니다. Observable
수명을 구성하여 Observable
처리를 조정할 수 있습니다. 시간 초과 모드 구성하려면 Observable
을(를) 상속하는 결과를 반환하는 작업을 수행할 때 timeoutMode()
메서드를 사용합니다.
참고
상속된 시간 초과
커서 시간 초과 모드 설정하려면 MongoClientSettings
, MongoDatabase
또는 MongoCollection
에서 시간 초과를 설정하다 해야 합니다.
옵저버블에 대해 자세히 학습하려면 옵저버블에서 데이터 액세스 가이드를 참조하세요.
라이프타임 모드
수명 모드 시간 초과 설정을 사용하여 Observable
의 전체 수명을 제한합니다. 이 모드 에서 애플리케이션 지정된 시간 제한 내에 Observable
를 초기화하고, Observable
메서드에 대한 모든 호출을 완료하고, 모든 문서를 반환해야 합니다. 그렇지 않으면 Observable
수명이 만료되고 운전자 시간 초과 오류가 발생합니다.
다음 예시 커서 초기화되고 상속된 제한 시간 내에 모든 문서가 검색되도록 Observable
시간 제한을 설정하다 방법을 보여 줍니다.
val observableWithLifetimeTimeout = collection .find(gte("age", 40)) .timeoutMode(TimeoutMode.CURSOR_LIFETIME)
GridFS.
withTimeout()
메서드를 사용하여 GridFSBucket
를 인스턴스화할 때 GridFS 작업에 대한 시간 초과 옵션을 설정하다 수 있습니다. 이 제한 시간은 데이터 업로드 및 다운로드와 같이 버킷에서 수행되는 모든 작업에 적용됩니다. 시간 제한을 설정하다 하지 않으면 GridFSBucket
인스턴스 생성에 사용한 MongoDatabase
인스턴스의 시간 제한 설정을 상속합니다.
다음 코드는 GridFSBucket
을 인스턴스화할 때 시간 제한을 설정하다 방법을 보여줍니다.
val gridFSBucket = GridFSBucket(database).withTimeout(200L, MILLISECONDS)
중요
관찰 가능한 시간 초과 지원
작업 시간 초과가 있는 GridFSBucket
에서 uploadFromObservable()
메서드를 호출하면 Observable
클래스에 고유한 읽기 시간 초과 지원 없기 때문에 시간 초과 위반이 발생할 수 있습니다. 이로 인해 작업이 지정된 시간 초과 제한을 초과하여 연장되어 시간 초과 예외가 발생할 수 있습니다.
API 문서
스칼라 운전자 에서 시간 초과를 사용하는 방법에 대해 자세히 학습 다음 API 문서를 참조하세요.