Docs Menu
Docs Home
/ / /
PyMongo
/

MongoDB 서버 선택 사용자 지정

이 페이지의 내용

  • 개요
  • 사용자 지정 선택 알고리즘
  • 예시: 다음에서 서버 선택 localhost
  • API 문서

모든 MongoDB 드라이버는 읽거나 쓸 서버를 선택할 때 정의된 알고리즘을 따릅니다. MongoClientserver_selector 속성을 사용하면 이 알고리즘을 사용자 지정하여 애플리케이션에 가장 적합한 서버를 선택할 수 있습니다.

중요

서버 선택 알고리즘 을 사용자 지정하면 읽기 또는 쓰기 (write) 성능이 저하되는 등 의도하지 않은 결과가 발생할 수 있습니다.

PyMongo 는 읽기 작업을 실행할 때 MongoDB deployment 를 선택하기 위해 다음 단계를 순서대로 수행합니다.

  1. PyMongo는 알려진 서버 목록에서 활성 읽기 설정과 일치하는 모든 서버를 선택합니다.

  2. 읽을 수 있는 서버가 하나 이상 있는 경우 PyMongo는 사용자 정의 서버 선택기 함수를 호출하고 이전 단계의 목록을 전달합니다.

  3. PyMongo는 함수에서 반환된 서버 목록에 localThresholdMS 연결 설정을 적용합니다.

  4. PyMongo 는 목록에 있는 서버 에서 무작위로 서버를 선택하고 이 서버 에 대해 작업을 실행합니다.

PyMongo 는 쓰기 (write) 작업을 실행할 때 활성 읽기 설정 (read preference) 과 일치하는 서버뿐만 아니라 쓰기 가능한 모든 서버를 선택하는 것으로 시작합니다. 나머지 단계는 동일합니다.

server_selector 인수를 사용하지 않을 때 운전자 가 사용하는 기본값 서버 선택 알고리즘 에 학습 보려면 MongoDB Server 매뉴얼에서 서버 선택 알고리즘 을 참조하세요.

여러 mongos 서버가 있는 샤드 클러스터를 사용하는 경우 localhost 에서 배포를 실행하는 것이 좋습니다. 이러한 배포에 대한 작업은 일반적으로 지연 시간이 짧고 처리량이 높습니다. 이 예제에서는 localhost 에서 실행되는 서버를 선호하도록 서버 선택 알고리즘을 사용자 지정하는 방법을 보여 줍니다.

먼저 Python 함수를 작성하여 원하는 서버를 선택합니다. 서버 선택 함수는 다음 기준을 충족해야 합니다.

  • ServerDescription 객체 목록을 매개 변수로 허용합니다.

  • 읽기 또는 쓰기 작업에 적합한 ServerDescription 객체 목록을 반환합니다.

  • ServerDescription 객체를 생성하거나 수정하지 않습니다.

다음 예제에서는 ServerDescription 객체 목록을 허용하고 반환하는 prefer_local 함수를 정의합니다.

def prefer_local(server_descriptions):
...
return servers # list containing preferred servers

다음으로, 함수 본문에 서버 선택 로직을 구현 합니다. ServerDescription 클래스에 정의된 모든 속성 을 사용하여 원하는 서버를 선택할 수 있습니다. localhost 에서 실행 MongoDB 배포만 반환하기 위해 이 예시 에서는 server_descriptions 의 서버를 반복하여 각 서버 의 address 속성 에 "localhost" 값이 있는지 확인합니다.

def prefer_local(server_descriptions):
servers = [
server for server in server_descriptions if server.address[0] == "localhost"
]
return servers

다음으로, 알고리즘 이 일치하는 서버를 찾지 못하는 경우를 생각해 보겠습니다. 함수가 빈 목록을 반환하면 애플리케이션 이 MongoDB 와 통신할 수 없는 것입니다. 따라서 함수에서 ServerDescription 객체 를 하나 이상 포함하는 목록을 반환하세요.

이 예시 에서 일치하는 서버 를 찾을 수 없으면 prefer_local 함수는 원래 전달된 서버 목록을 인수로 반환합니다.

def prefer_local(server_descriptions):
servers = [
server for server in server_descriptions if server.address[0] == "localhost"
]
if not servers:
return server_descriptions
return servers

마지막으로 함수를 사용하도록 PyMongo에 지시합니다. 이렇게 하려면 MongoClient 생성자를 호출하고 함수 이름을 값으로 사용하여 server_selector 인수를 전달합니다.

client = pymongo.MongoClient("mongodb://<db_username>:<db_password>@<hostname>:<port>",
server_selector=prefer_local)

PyMongo의 서버 선택 알고리즘 사용자 지정에 대한 자세한 내용은 다음 API 문서를 참조하세요.

돌아가기

네트워크 트래픽 압축