CRUD 작업 구성
개요
이 가이드 에서는 PyMongo 에서 읽기 및 쓰기 (write) 작업을 구성하는 방법을 학습 수 있습니다.
읽기 및 쓰기 설정
읽기 설정( read preference)을 설정하여 드라이버가 읽기 작업을 라우팅하는 방법을 제어할 수 있습니다. 또한 읽기 고려 및 쓰기 고려를 설정하여 드라이버가 복제본 세트에 대한 읽기 및 쓰기 작업의 승인을 기다리는 방법에 대한 옵션을 제어할 수도 있습니다.
기본적으로 데이터베이스는 MongoClient
인스턴스에서 이러한 설정을 상속하고 컬렉션은 데이터베이스에서 설정을 상속합니다. 그러나 다음 방법 중 하나를 사용하여 데이터베이스 또는 컬렉션에서 이러한 설정을 변경할 수 있습니다.
get_database()
: 데이터베이스 를 가져오고 클라이언트의 읽기 설정 (read preference), 읽기 고려 (read concern) 및 쓰기 (write) 설정을 적용합니다.database.with_options()
: 데이터베이스 를 가져오고 현재 읽기 설정 (read preference), 읽기 고려 (read concern) 및 쓰기 (write) 설정을 적용합니다.get_collection()
: 컬렉션 을 가져오고 현재 읽기 설정 (read preference), 읽기 고려 (read concern) 및 쓰기 (write) 설정을 적용합니다.collection.with_options()
: 컬렉션 을 가져오고 데이터베이스의 읽기 설정 (read preference), 읽기 고려 (read concern) 및 쓰기 (write) 설정을 적용합니다.
앞의 메서드를 사용하여 읽기 또는 쓰기 설정을 변경하려면 메서드를 호출하고 컬렉션 또는 데이터베이스 이름과 새 읽기 설정, 읽기 고려 또는 쓰기 설정을 전달합니다.
다음 예에서는 get_database()
메서드를 사용하여 test-database
데이터베이스의 읽기 설정, 읽기 고려 및 쓰기 설정을 변경하는 방법을 보여 줍니다.
client.get_database("test-database", read_preference=ReadPreference.SECONDARY, read_concern="local", write_concern="majority")
다음 예에서는 get_collection()
메서드를 사용하여 test-collection
컬렉션의 읽기 및 쓰기 설정을 변경하는 방법을 보여 줍니다.
database.get_collection("test-collection", read_preference=ReadPreference.SECONDARY, read_concern="local", write_concern="majority")
다음 예에서는 with_options()
메서드를 사용하여 test-collection
컬렉션의 읽기 및 쓰기 설정을 변경하는 방법을 보여 줍니다.
collection.with_options(read_preference=ReadPreference.SECONDARY, read_concern="local", write_concern="majority")
팁
열거형에서 사용할 수 있는 읽기 설정 유형을 ReadPreference
확인하려면 API 설명서를 참조하세요.
읽기 및 쓰기 설정에 대해 자세히 알아보려면 MongoDB Server 매뉴얼에서 다음 가이드를 참조하세요.
태그 세트
MongoDB Server에서는 선택한 기준에 따라 복제본 세트 멤버에 키-값 태그 를 적용할 수 있습니다. 그런 다음 해당 태그를 사용하여 읽기 작업의 멤버를 한 명 이상 대상으로 지정할 수 있습니다.
기본적으로 PyMongo는 읽을 멤버를 선택할 때 태그를 무시합니다. PyMongo가 특정 태그를 선호하도록 지시하려면 해당 태그를 읽기 설정 클래스 에 매개변수로 전달하세요. 생성자.
다음 코드 예제에서 read_preference
매개변수에 전달된 태그 세트는 PyMongo가 뉴욕 데이터 센터('dc': 'ny'
)에서 읽기를 선호하고 샌프란시스코 데이터 센터('dc': 'sf'
)로 대체하도록 지시합니다.
db = client.get_database( 'test', read_preference=Secondary([{'dc': 'ny'}, {'dc': 'sf'}]))
LocalThreshold
여러 복제본 세트 멤버가 지정한 읽기 설정 및 태그 세트와 일치하는 경우, PyMongo는 핑 시간에 따라 선택된 가장 가까운 복제본 세트 멤버에서 읽습니다.
기본적으로 드라이버는 핑 시간이 가장 가까운 멤버의 15 밀리초 이내인 멤버만 쿼리에 사용합니다. 지연 시간이 더 긴 멤버 간에 읽기를 분산하려면 localThresholdMS
옵션을 MongoClient()
생성자에 전달합니다.
다음 예에서는 로컬 임계값을 35 밀리초로 지정합니다.
client = MongoClient(replicaSet='repl0', readPreference=ReadPreference.SECONDARY_PREFERRED, localThresholdMS=35)
앞의 예제에서 PyMongo는 가장 가까운 멤버의 핑 시간 35 밀리초 내에 일치하는 멤버 간에 읽기를 분산합니다.
참고
PyMongo는 mongos
인스턴스를 통해 복제본 세트와 통신할 때 localThresholdMS
값을 무시합니다. 이 경우 localThreshold 명령줄 옵션을 사용합니다.
재시도 가능 읽기 및 쓰기
PyMongo 네트워크 또는 서버 오류로 인해 특정 읽기 및 쓰기 (write) 작업이 실패할 경우 자동으로 한 번만 자동으로 재시도합니다.
MongoClient()
생성자에서 retryReads
또는 retryWrites
옵션을 False
로 설정하여 재시도 가능 읽기 또는 재시도 가능 쓰기를 명시적으로 비활성화할 수 있습니다. 다음 예시 클라이언트 에 대해 재시도 가능 읽기 및 쓰기를 비활성화합니다.
client = MongoClient("<connection string>", retryReads=False, retryWrites=False)
지원되는 재시도 가능 읽기 작업에 대해 자세히 학습 MongoDB Server 매뉴얼의 재시도 가능 읽기를 참조하세요. 지원되는 재시도 가능 쓰기 (write) 작업에 대해 자세히 학습 MongoDB Server 매뉴얼의 재시도 가능 쓰기 참조하세요.
데이터 정렬
컬렉션 만들 때 컬렉션 에서 수행하는 모든 작업에 대한 기본값 데이터 정렬을 지정할 수 있습니다.
다음 예시 이전 예시 와 동일한 컬렉션 생성하지만 기본값 데이터 정렬은 fr_CA
입니다.
from pymongo.collation import Collation database = client["test_database"] database.create_collection("example_collection", collation=Collation(locale='fr_CA'))