개요
MongoDB 드라이버는 MongoDB Server 와 주고받는 메시지를 압축할 수 있습니다. 이렇게 하면 각 작업에 대해 전송되는 데이터 양이 줄어듭니다. 압축은 제한된 네트워크에서 성능을 향상시키고 MongoDB Atlas 실행 과 관련된 데이터 전송 비용을 낮출 수 있습니다.
압축은 유선 프로토콜 수준에서 작동하므로 애플리케이션 수행하는 모든 작업에 적용됩니다. 알고리즘 두 개 이상 지정하는 경우 운전자 MongoDB Server 도 지원하는 목록의 첫 번째 알고리즘 사용합니다.
압축 알고리즘
MongoDB 드라이버는 다음 압축 알고리즘을 지원 .
네트워크 압축의 이점
MongoDB Atlas cloud 리전, cloud 제공자 간, 인프라와 MongoDB Atlas 간에 전송되는 데이터에 대해 요금을 부과합니다. 네트워크 압축은 애플리케이션 보내고 받는 데이터의 양을 줄여서 이러한 데이터 전송 비용을 낮출 수 있습니다. 요금에 대해 자세히 학습 데이터 전송 비용을 참조하세요.
네트워크 압축은 생산성 이점도 있습니다. 압축된 메시지는 네트워크를 통해 전송되는 데 시간이 덜 걸리므로 애플리케이션의 응답 시간을 개선할 수 있습니다. 또한 압축은 MongoDB 트래픽이 사용하는 대역폭을 줄여 동일한 네트워크의 다른 애플리케이션에서 사용할 수 있는 대역폭을 더 많이 확보합니다.
압축 알고리즘 선택할 때 다음 지침을 고려하세요.
압축 효율성 과 리소스 사용량의 균형을 맞추려면 Zstandard를 사용하세요. Zstandard는 대부분의 애플리케이션에 적합한 기본값 선택입니다.
최소한의 계산 오버헤드 필요한 지연 시간에 민감한 애플리케이션에는 Snappy를 사용하세요.
MongoDB 드라이버 및 환경 전반에서 광범위한 호환성을 위해 Zlib를 사용하세요.
팁
CPU 사용량 모니터링
압축은 네트워크 대역폭을 CPU 사용량과 교환합니다. 네트워크 압축을 활성화 후 애플리케이션의 CPU 사용률을 모니터 이러한 균형이 워크로드 도움이 되는지 확인합니다. 이러한 장단점에 대해 자세히 학습 MongoDB 블로그 포스트 의 CPU 사용률 및 네트워크 압축을 참조하세요.
버전 호환성
다음 표에는 각 압축 알고리즘 에 대해 지원되는 최소 운전자 및 MongoDB Server 버전이 나열되어 있습니다.
압축 기능 플래그 추가
압축기를 사용하려면 프로젝트의 Cargo.toml 파일에 있는 mongodb 종속성 기능 목록에 관련 기능 플래그를 추가하세요.
선호하는 압축기의 탭을 선택하여 mongodb 종속성에 필요한 기능 플래그를 추가하는 방법을 확인합니다.
[dependencies.mongodb] version = "3.8.2" features = ["snappy-compression"]
[dependencies.mongodb] version = "3.8.2" features = ["zlib-compression"]
[dependencies.mongodb] version = "3.8.2" features = ["zstd-compression"]
팁
여러 압축기를 지정하려면 각 압축기에 대한 기능 플래그를 mongodb 종속성에 추가해야 합니다.
네트워크 압축 활성화
다음과 같은 방법으로 압축기를 지정하여 Client 인스턴스에서 압축을 활성화할 수 있습니다.
연결 string 에
compressors매개변수를 추가합니다. 이러한 방식으로 압축을 활성화하는 예시 를 보려면 연결 string 섹션을 참조하세요.ClientOptions인스턴스의compressors필드를 설정합니다. 그런 다음Client을 인스턴스화할 때with_options()메서드에 옵션을 전달할 수 있습니다. 이러한 방식으로 압축을 활성화하는 예를 보려면 ClientOptions 섹션을 참조하세요.
연결 문자열
연결 문자열을 사용하여 압축을 사용하려면 compressors 매개 변수를 지정합니다. compressors 매개변수에 대해 다음 값 중 하나 이상을 지정할 수 있습니다.
"snappy"Snappy 압축의 경우"zlib"Zlib 압축용"zstd"Zstandard 압축의 경우
다음 예제에서는 Snappy, Zlib 및 Zstandard를 연결의 압축기로 지정하는 방법을 보여줍니다.
let uri = "mongodb+srv://<db_username>:<db_password>@<cluster-url>/?compressors=snappy,zlib,zstd"; let client = Client::with_uri_str(uri).await?;
클라이언트 옵션 설정에 대한 자세한 학습은 연결 옵션 지정가이드를 참조하세요.
ClientOptions
ClientOptions 인스턴스 내에서 압축을 활성화하려면 compressors 필드를 설정한 다음 클라이언트를 생성할 때 옵션을 전달합니다.
compressors 필드는 Vec<Compressor> 유형의 값을 사용합니다. Compressor 유형에는 다음과 같은 값이 있을 수 있습니다.
Compressor::SnappyCompressor::Zstd { level: <integer> }Compressor::Zlib { level: <integer> }
level 필드가 있는 압축기의 경우 값을 None 로 설정하여 기본 수준을 나타냅니다. 다음 표에서는 Zlib 및 Zstandard의 기본 압축 수준과 허용되는 압축 수준을 설명합니다.
압축기 | 기본 수준 | 허용 수준 |
|---|---|---|
zlib |
|
|
Zstandard |
|
|
level 값이 높을수록 압축이 많아져 속도가 느려집니다.
다음 예제에서는 Snappy, Zlib 및 Zstandard를 연결의 압축기로 지정하는 방법을 보여줍니다.
let uri = "<connection string>"; let mut client_options = ClientOptions::parse(uri).await?; let compressors = vec![ Compressor::Snappy, Compressor::Zstd { level: Some(1) }, Compressor::Zlib { level: None } ]; client_options.compressors = Some(compressors); let client = Client::with_options(client_options)?;
추가 정보
이 가이드의 개념에 대한 자세한 내용은 다음 문서를 참조하세요.
MongoDB Server 매뉴얼의 연결 string 압축 옵션
API 문서
이 가이드에 언급된 메서드나 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.