MongoDB 서버 선택 사용자 지정
개요
모든 MongoDB 드라이버는 읽거나 쓸 서버를 선택할 때 정의된 알고리즘을 따릅니다. MongoClient
의 server_selector
속성을 사용하면 이 알고리즘을 사용자 지정하여 애플리케이션에 가장 적합한 서버를 선택할 수 있습니다.
중요
서버 선택 알고리즘 을 사용자 지정하면 읽기 또는 쓰기 (write) 성능이 저하되는 등 의도하지 않은 결과가 발생할 수 있습니다.
사용자 지정 선택 알고리즘
PyMongo 는 읽기 작업을 실행할 때 MongoDB deployment 를 선택하기 위해 다음 단계를 순서대로 수행합니다.
PyMongo는 알려진 서버 목록에서 활성 읽기 설정과 일치하는 모든 서버를 선택합니다.
읽을 수 있는 서버가 하나 이상 있는 경우 PyMongo는 사용자 정의 서버 선택기 함수를 호출하고 이전 단계의 목록을 전달합니다.
PyMongo는 함수에서 반환된 서버 목록에
localThresholdMS
연결 설정을 적용합니다.PyMongo 는 목록에 있는 서버 에서 무작위로 서버를 선택하고 이 서버 에 대해 작업을 실행합니다.
PyMongo 는 쓰기 (write) 작업을 실행할 때 활성 읽기 설정 (read preference) 과 일치하는 서버뿐만 아니라 쓰기 가능한 모든 서버를 선택하는 것으로 시작합니다. 나머지 단계는 동일합니다.
server_selector
인수를 사용하지 않을 때 운전자 가 사용하는 기본값 서버 선택 알고리즘 에 학습 보려면 MongoDB Server 매뉴얼에서 서버 선택 알고리즘 을 참조하세요.
예시: 다음에서 서버 선택 localhost
여러 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)
API 문서
PyMongo의 서버 선택 알고리즘 사용자 지정에 대한 자세한 내용은 다음 API 문서를 참조하세요.