Docs Menu
Docs Home
/ / /
Java 동기화 드라이버
/ /

MongoDB Server 실행 시간 제한

이 페이지의 내용

  • 개요
  • timeoutMS 옵션
  • 허용되는 시간 초과 값
  • 시간 초과 상속
  • 재정의
  • 트랜잭션
  • 클라이언트 암호화
  • Cursors
  • 커서 수명 모드
  • 커서 반복 모드
  • GridFS.
  • API 문서

Java 운전자 사용하여 서버 작업을 수행할 때 서버 작업을 완료할 수 있는 시간을 제한할 수도 있습니다. 이렇게 하려면 클라이언트 사이드 작업 시간 제한(CSOT)을 지정합니다. 제한 시간은 서버 선택, 연결 체크아웃 및 서버 측 실행을 포함하여 작업을 완료하는 데 필요한 모든 단계에 적용됩니다. 시간 초과가 만료되면 Java 운전자 시간 초과 예외를 발생시킵니다.

참고

실험적 기능

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

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

  • MongoClientSettings.Builder 클래스에서 timeout() 메서드 호출

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

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

MongoClientSettings settings = MongoClientSettings.builder()
.applyConnectionString(new ConnectionString("<connection string>"))
.timeout(200L, MILLISECONDS)
.build();
MongoClient mongoClient = MongoClients.create(settings);
String uri = "<connection string>/?timeoutMS=200";
MongoClient mongoClient = MongoClients.create(uri);

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

행동

양의 정수

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

0

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

null 또는 unset

Defers the timeout behavior to the following settings:
  • waitQueueTimeoutMS

  • socketTimeoutMS

  • wTimeoutMS

  • 최대 시간 (MS)

  • maxCommitTimeMS

These settings are deprecated and are ignored if you set timeoutMS.

timeoutMS 옵션을 지정하면 운전자 각 서버 작업에 지정된 시간 제한을 자동으로 적용합니다. 다음 코드 예시 클라이언트 수준에서 200 밀리초의 시간 제한을 지정한 다음 MongoCollection.insertOne() 메서드를 호출합니다.

MongoClientSettings settings = MongoClientSettings.builder()
.applyConnectionString(new ConnectionString("<connection string>"))
.timeout(200L, MILLISECONDS)
.build();
try (MongoClient mongoClient = MongoClients.create(settings)) {
MongoDatabase database = mongoClient.getDatabase("db");
MongoCollection<Document> collection = database.getCollection("people");
collection.insertOne(new Document("name", "Francine Loews"));
}

timeoutMS 옵션을 지정하면 운전자 다른 Java 운전자 옵션과 동일한 상속 동작에 따라 시간 초과를 적용합니다. 다음 표에서는 각 수준에서 시간 초과 값이 상속되는 방식에 대해 설명합니다.

수준
상속 설명

작업

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

트랜잭션

세션, 컬렉션, 데이터베이스 또는 클라이언트 수준에서 설정하다 시간 초과 값보다 우선합니다.

Session

해당 수준에서 다른 시간 초과 값을 설정하다 하지 않는 한 해당 세션 내의 모든 트랜잭션 및 작업에 적용됩니다.

Database

해당 수준에서 다른 시간 초과 값을 설정하다 하지 않는 한 해당 데이터베이스 내의 모든 세션 및 작업에 적용됩니다.

컬렉션

해당 수준에서 다른 시간 초과 값을 설정하다 하지 않는 한 해당 컬렉션 의 모든 세션 및 작업에 적용됩니다.

고객

timeoutMS을(를) 지정하지 않는 해당 클라이언트 내의 모든 데이터베이스, 컬렉션, 세션, 트랜잭션 및 작업에 적용됩니다.

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

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

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

다음 예시 컬렉션 수준 시간 초과 구성이 클라이언트 수준 시간 초과 구성을 재정의할 수 있는 방법을 보여 줍니다.

MongoClientSettings settings = MongoClientSettings.builder()
.applyConnectionString(new ConnectionString("<connection string>"))
.timeout(200L, MILLISECONDS)
.build();
try (MongoClient mongoClient = MongoClients.create(settings)) {
MongoDatabase database = mongoClient.getDatabase("db");
MongoCollection<Document> collection = database
.getCollection("people")
.withTimeout(300L, MILLISECONDS);
// ... perform operations on MongoCollection
}

트랜잭션 구현 defaultTimeout() 위해 새 ClientSession 인스턴스 만드는 경우 인스턴스 빌드할 때 ClientSessionOptions 메서드를 사용합니다. 이 옵션을 사용하여 다음 메서드에 대한 시간 제한을 지정할 수 있습니다.

다음 코드는 ClientSession을 인스턴스화할 때 defaultTimeout 를 설정하다 방법을 보여줍니다.

ClientSessionOptions opts = ClientSessionOptions.builder()
.defaultTimeout(200L, MILLISECONDS)
.build();
ClientSession session = mongoClient.startSession(opts);
// ... perform operations on ClientSession

defaultTimeout를 지정하지 않으면 운전자 상위 MongoClient에 설정하다 시간 초과 값을 사용합니다.

TransactionOptions 인스턴스 빌드할 때 timeout() 메서드를 호출하여 트랜잭션 수준 시간 제한을 설정하다 수도 있습니다. 이 옵션을 설정하면 트랜잭션 범위에서 수행되는 모든 작업에 시간 초과가 적용됩니다.

TransactionOptions transactionOptions = TransactionOptions.builder()
.timeout(200L, MILLISECONDS)
.build();

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

클라이언트 측 필드 레벨 암호화 (CSFLE)를 사용하는 경우 운전자 timeoutMS 옵션을 사용하여 암호화 및 암호 해독 작업에 허용되는 시간을 제한합니다. ClientEncryptionSettings 인스턴스 빌드할 때 timeout() 메서드를 호출하여 ClientEncryption 인스턴스 에 대한 시간 초과 옵션을 설정하다 수 있습니다.

ClientEncryption 인스턴스 구성할 때 제한 시간을 지정하면 제한 시간이 해당 인스턴스 에서 수행되는 모든 작업의 수명을 제어합니다. ClientEncryption을(를) 인스턴스화할 때 시간 초과를 제공하지 않으면 인스턴스 는 ClientEncryption 생성자에 사용된 MongoClient 의 시간 초과 설정을 상속합니다.

클라이언트 와 ClientEncryption에서 모두 timeoutMS 을 설정하다 ClientEncryption 에 제공된 값이 우선합니다.

커서는 CSOT 기능 사용할 때 구성 가능한 시간 초과 설정을 제공합니다. 커서 수명 또는 커서 반복 모드 구성하여 커서 처리를 조정할 수 있습니다. 시간 초과 모드 구성하려면 Iterable을 반환하는 작업을 수행할 때 timeoutMode() 메서드를 사용합니다.

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

참고

상속된 시간 초과

커서 시간 초과 모드 설정하려면 MongoClientSettings, MongoDatabase 또는 MongoCollection에서 시간 초과를 설정하다 해야 합니다.

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

커서 수명 모드 시간 초과 설정을 사용하여 커서 의 전체 수명을 제한합니다. 이 모드 에서는 애플리케이션 커서 초기화하고, 커서 메서드에 대한 모든 호출을 완료하고, 지정된 시간 제한 내에 모든 문서를 반환해야 합니다. 그렇지 않으면 커서의 수명이 만료되고 운전자 시간 초과 오류가 발생합니다.

close() 메서드를 호출하여 커서 닫으면 서버 측 리소스가 정리되도록 killCursors 명령에 대한 시간 제한이 재설정됩니다.

다음 예시 커서 초기화되고 상속된 제한 시간 내에 모든 문서가 검색되도록 커서 시간 제한을 설정하다 방법을 보여 줍니다.

FindIterable<Document> cursorWithLifetimeTimeout = collection
.find(gte("age", 40))
.timeoutMode(TimeoutMode.CURSOR_LIFETIME);

커서 반복 모드 시간 초과를 설정하여 각 호출을 next(), hasNext()tryNext() 메서드로 제한합니다. 시간 초과는 각 호출이 완료될 때 새로 고침됩니다. 이는 고정 사이즈 컬렉션 또는 변경 스트림에서 find() 메서드가 반환하는 테일 커서(tailable cursor)와 같은 모든 테일 커서(tailable cursor)의 기본값 모드 입니다.

다음 코드 예시 ITERATION 시간 제한 모드 가 있는 커서 사용하여 db.people 컬렉션 의 문서를 반복한 다음 각 문서 의 name 필드 값을 검색하고 인쇄합니다.

try (MongoCursor<Document> cursorWithIterationTimeout = collection
.find(gte("age", 40))
.timeoutMode(TimeoutMode.ITERATION)
.cursor()
) {
while (cursorWithIterationTimeout.hasNext()) {
System.out.println(cursorWithIterationTimeout.next().toJson());
}
}

메서드를 사용하여 를 인스턴스화할 때 GridFS 작업에 대한 시간 초과 옵션을 설정하다 수 GridFSBucket withTimeout() 있습니다. 이 GridFSBucket 제한 시간은 데이터 업로드 및 다운로드와 같이 버킷에서 수행되는 모든 작업에 적용됩니다. 시간 제한을 설정하다 하지 않으면 인스턴스 MongoDatabase 생성에 사용한 인스턴스의 시간 제한 설정을 상속합니다.

다음 코드는 GridFSBucket을 인스턴스화할 때 시간 제한을 설정하다 방법을 보여줍니다.

GridFSBucket gridFSBucket = GridFSBuckets
.create(database)
.withTimeout(200L, MILLISECONDS);

중요

입력 스트림 시간 초과 지원

작업 시간 초과가 있는 GridFSBucket 에서 uploadFromStream() 메서드를 호출하면 InputStream 클래스에 고유한 읽기 시간 초과 지원 없기 때문에 시간 초과 위반이 발생할 수 있습니다. 이로 인해 작업이 지정된 시간 초과 제한을 초과하여 연장되어 시간 초과 예외가 발생할 수 있습니다.

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

돌아가기

Stable API