개요
이 가이드 에서는 timeout_ms
옵션을 사용하여 서버 작업에 대한 시간 제한을 설정하다 방법을 학습 수 있습니다.
Ruby 운전자 사용하여 서버 작업을 수행할 때 서버 작업을 완료하는 데 허용되는 기간을 제한할 수 있습니다. 이렇게 하려면 클라이언트 사이드 작업 시간 제한(CSOT)을 지정합니다. 제한 시간은 서버 선택, 연결 체크아웃 및 서버 측 실행을 포함하여 작업을 완료하는 데 필요한 모든 단계에 적용됩니다. 작업이 완료되기 전에 제한 시간이 만료되면 Ruby 운전자 제한 시간 예외를 발생시킵니다.
timeout_ms 옵션
MongoDB deployment 에 연결할 때 제한 시간을 지정하려면 timeout_ms
연결 옵션을 제한 시간 길이(밀리초)로 설정하다 . 다음과 같은 방법으로 시간 초과 값을 지정할 수 있습니다.
timeout_ms
클라이언트 옵션을Mongo::Client
생성자에 전달합니다.timeoutMS
연결 문자열 옵션을 연결 문자열 에 매개 변수로 전달합니다.
다음 탭에서 선택하여 timeout_ms
클라이언트 옵션 또는 timeoutMS
연결 문자열 옵션을 사용하여 시간 제한을 30 초로 지정하는 방법에 대한 예제를 볼 수 있습니다.
uri = "<connection string>" options = { timeout_ms: 30000 } client = Mongo::Client.new(uri, options)
uri = "mongodb://<hostname>:<port>?timeoutMS=30000" client = Mongo::Client.new(uri)
timeout_ms
옵션을 지정하면 운전자 각 서버 작업에 지정된 시간 제한을 자동으로 적용합니다.
참고
timeout_ms
연결 옵션은 대부분의 시간 초과 관련 옵션을 통합합니다. 다음 시간 초과 옵션은 더 이상 사용되지 않습니다.
socket_timeout
wait_queue_timeout
wtimeout
max_time_ms
max_commit_time_ms
timeout_ms
연결 옵션이 더 이상 사용되지 않는 시간 초과 옵션보다 우선합니다.
시간 초과 상속
timeout_ms
옵션을 지정하면 운전자 다른 Ruby 운전자 옵션과 동일한 상속 동작에 따라 시간 제한을 적용합니다. 다음 표에서는 각 수준에서 시간 초과 값이 상속되는 방식에 대해 설명합니다.
수준 | 상속 설명 |
---|---|
작업 | 가장 높은 우선 순위를 가지며 다른 수준에서 설정하다 |
트랜잭션 | 세션, 컬렉션, 데이터베이스 또는 클라이언트 수준에서 설정하다 |
Session | 해당 수준에서 설정하다 옵션으로 옵션을 재정의하지 않는 한 해당 세션 내의 모든 트랜잭션 및 작업에 적용됩니다. |
Database | 해당 수준에서 설정하다 옵션으로 옵션을 재정의하지 않는 한 해당 데이터베이스 내의 모든 세션 및 작업에 적용됩니다. |
컬렉션 | 해당 수준에서 설정하다 옵션으로 옵션이 재정의되지 않는 한 해당 컬렉션 의 모든 세션 및 작업에 적용됩니다. |
고객 |
|
시간 초과 옵션 재정의 및 다른 옵션 설정에 대해 자세히 학습하려면 다음 재정의 섹션을 참조하세요.
재정의
작업 수준에서 timeout_ms
옵션을 지정하여 특정 작업에 대한 클라이언트 수준 구성을 재정의할 수 있습니다. 이를 통해 개별 쿼리의 요구 사항에 따라 시간 초과를 사용자 지정할 수 있습니다.
다음 예시 작업 수준 timeout_ms
구성이 클라이언트 수준 timeout_ms
구성을 재정의할 수 있는 방법을 보여 줍니다.
require 'mongo' # Replace the placeholder with your connection string uri = "<connection string>" # Sets a client-level timeout configuration options = { timeout_ms: 30000 } Mongo::Client.new(uri, options) do |client| db = client.use('test-db') collection = db[:test-collection] # Performs a query with an operation-level timeout configuration, # overriding the client-level configuration docs = collection.find({}, timeout_ms: 10000).to_a docs.each { |doc| puts doc } end
트랜잭션
default_timeout_ms
클라이언트 옵션을 사용하여 트랜잭션에 대한 시간 제한을 설정하다 수 있습니다.
트랜잭션 구현 위해 새 Mongo::Session
인스턴스 만들 때 default_timeout_ms
클라이언트 옵션을 설정하다 다음 메서드에 대해 timeout_ms
값을 지정할 수 있습니다.
default_timeout_ms
를 지정하지 않으면 운전자 상위 Mongo::Client
에 설정하다 timeout_ms
값을 사용합니다.
start_session
에 대한 호출에 대해 Mongo::Client
의 timeout_ms
값을 재정의할 수 없습니다.
timeout_ms
옵션을 사용해야만 start_transaction 메서드에 대한 시간 초과 값을 설정하다 수 있습니다.
with_transaction
콜백 에서 제공하는 트랜잭션 세션의 작업에 timeout_ms
옵션을 설정하여 default_timeout_ms
을(를) 재정의할 수 없으며, 그렇지 않으면 운전자 오류가 발생합니다.
클라이언트 암호화
클라이언트 측 필드 레벨 암호화 (CSFLE)를 사용하는 경우 운전자 timeout_ms
옵션을 사용하여 암호화 및 암호 해독 작업에 허용되는 시간을 제한합니다.
ClientEncryption
인스턴스 구성할 때 timeout_ms
옵션을 지정하면 해당 인스턴스 에서 수행되는 모든 작업의 수명을 제어합니다. timeout_ms
를 제공하지 않으면 인스턴스 는 ClientEncryption
생성자에 사용된 Mongo::Client
의 timeout_ms
설정을 상속합니다.
클라이언트 와 ClientEncryption
모두에서 timeout_ms
를 설정하다 하면 ClientEncryption
에 제공된 값이 우선합니다.
Cursors
커서는 CSOT 기능 사용할 때 구성 가능한 시간 초과 설정을 제공합니다. 필요한 경우 커서 수명 또는 커서 반복 모드 구성하여 커서 처리를 조정할 수 있습니다. 모드 구성하려면 timeoutMode
옵션을 기본값 인 cursorLifetime
또는 iteration
로 설정하다 .
커서 수명 모드
커서 수명 모드 timeout_ms
를 사용하여 커서 의 전체 수명을 제한합니다. 이 모드 에서는 커서 초기화와 커서 메서드에 대한 모든 후속 호출이 timeout_ms
옵션에 지정된 제한 내에서 완료되어야 합니다. 모든 문서는 이 한도 내에서 반환되어야 합니다. 그렇지 않으면 커서의 수명이 만료되고 시간 초과 오류가 발생합니다.
to_a
또는 close
메서드를 호출하여 커서 닫으면 서버 측 리소스가 정리되도록 시간 제한이 재설정됩니다.
다음 예시 커서 초기화되고 모든 문서가 10 초 이내에 검색되도록 timeout_ms
옵션을 설정하다 방법을 보여 줍니다.
docs = collection.find({}, timeout_ms:10000).to_a
커서 반복 모드
커서 반복 모드 timeout_ms
옵션을 사용하여 각 호출을 try_next
메서드로 제한합니다. 시간 초과는 각 호출이 완료될 때마다 새로 고침됩니다. 이는 고정 사이즈 컬렉션 또는 변경 스트림에서 find
메서드가 반환하는 테일 커서(tailable cursor)와 같은 모든 테일 커서(tailable cursor)의 기본값 모드 입니다.
다음 코드 예시 반복 가능한 커서 사용하여 샘플 컬렉션 의 문서를 반복한 다음 각 영화 문서 에 대한 title
정보를 가져오고 기록합니다.
cursor = collection.find() cursor.each do |movie| puts movie['title'] end
API 문서
Ruby 운전자 에서 시간 초과를 사용하는 방법에 대해 자세히 학습 다음 API 문서를 참조하세요.