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

MongoDB Server 실행 시간 제한

이 가이드 에서는 timeout_ms 옵션을 사용하여 서버 작업에 대한 시간 제한을 설정하다 방법을 학습 수 있습니다.

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

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 운전자 옵션과 동일한 상속 동작에 따라 시간 제한을 적용합니다. 다음 표에서는 각 수준에서 시간 초과 값이 상속되는 방식에 대해 설명합니다.

수준
상속 설명

작업

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

트랜잭션

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

Session

해당 수준에서 설정하다 옵션으로 옵션을 재정의하지 않는 한 해당 세션 내의 모든 트랜잭션 및 작업에 적용됩니다.

Database

해당 수준에서 설정하다 옵션으로 옵션을 재정의하지 않는 한 해당 데이터베이스 내의 모든 세션 및 작업에 적용됩니다.

컬렉션

해당 수준에서 설정하다 옵션으로 옵션이 재정의되지 않는 한 해당 컬렉션 의 모든 세션 및 작업에 적용됩니다.

고객

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

시간 초과 옵션 재정의 및 다른 옵션 설정에 대해 자세히 학습하려면 다음 재정의 섹션을 참조하세요.

작업 수준에서 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::Clienttimeout_ms 값을 재정의할 수 없습니다.

timeout_ms 옵션을 사용해야만 start_transaction 메서드에 대한 시간 초과 값을 설정하다 수 있습니다.

with_transaction 콜백 에서 제공하는 트랜잭션 세션의 작업에 timeout_ms 옵션을 설정하여 default_timeout_ms 을(를) 재정의할 수 없으며, 그렇지 않으면 운전자 오류가 발생합니다.

클라이언트 측 필드 레벨 암호화 (CSFLE)를 사용하는 경우 운전자 timeout_ms 옵션을 사용하여 암호화 및 암호 해독 작업에 허용되는 시간을 제한합니다.

ClientEncryption 인스턴스 구성할 때 timeout_ms 옵션을 지정하면 해당 인스턴스 에서 수행되는 모든 작업의 수명을 제어합니다. timeout_ms를 제공하지 않으면 인스턴스 는 ClientEncryption 생성자에 사용된 Mongo::Clienttimeout_ms 설정을 상속합니다.

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

커서는 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

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

돌아가기

TLS 구성

다음

AWS Lambda

이 페이지의 내용