Visão geral
Os drivers do MongoDB podem compactar as mensagens enviadas e recebidas do MongoDB Server. Isso reduz a quantidade de dados transferidos para cada operação. A compressão pode melhorar o desempenho em redes restritas e reduzir os custos de transferência de dados associados à execução do MongoDB Atlas.
A compressão opera no nível do protocolo de conexão , portanto, ela se aplica a todas as operações que seu aplicação executa. Se você especificar mais de um algoritmo, o driver usará o primeiro algoritmo da sua lista que o MongoDB Server também suportará.
Algoritmos de compressão
Os drivers do MongoDB suportam os seguintes algoritmos de compressão:
Benefícios da compressão de rede
O MongoDB Atlas cobra por dados transferidos entre regiões de nuvem, provedores de nuvem e entre sua infraestrutura e o MongoDB Atlas. A compactação de rede reduz a quantidade de dados que seu aplicação envia e recebe, o que pode reduzir esses custos de transferência de dados . Para saber mais sobre preços, consulte Custos de transferência de dados.
A compactação de rede também gera benefícios de produtividade. As mensagens compactadas levam menos tempo para serem transferidas pela rede, o que pode melhorar o tempo de resposta do seu aplicativo. A compactação também reduz a largura de banda usada pelo tráfego do MongoDB , o que deixa mais largura de banda disponível para outros aplicativos na mesma rede.
Ao escolher um algoritmo de compressão, considere as seguintes diretrizes:
Use o Zstandard para obter um equilíbrio entre eficiência de compactação e uso de recursos. O Zstandard é uma boa opção padrão para a maioria dos aplicativos.
Use o Snappy para aplicativos sensíveis à latência que exigem sobrecarga computacional mínima.
Use o Zlib para ampla compatibilidade entre drivers e ambientes MongoDB .
Dica
Monitore o uso da CPU
A compressão troca a largura de banda da rede pelo uso da CPU. Depois de ativar a compactação de rede, monitore a utilização da CPU do aplicativo para confirmar se a compensação beneficia o volume de trabalho. Para saber mais sobre essas compensações, consulte a postagem do blog Utilização da CPU e Compressão de Rede no MongoDB .
Compatibilidade de versão
A tabela a seguir lista o driver mínimo suportado e a versão do MongoDB Server para cada algoritmo de compressão:
Adicionar sinalizadores de recurso de compressão
Para usar um compressor, adicione o sinalizador de mongodb feição relevante à sua lista de feições da dependência do no Cargo.toml arquivo do seu projeto.
Selecione a guia do compressor de sua preferência para ver como adicionar o sinalizador de funcionalidade necessário à sua dependência do 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"]
Dica
Para especificar vários compressores, você deve adicionar o sinalizador de feição para cada compressor à sua dependência mongodb .
Habilitar compressão de rede
Você pode habilitar a compressão na sua instância do Client especificando compressores das seguintes maneiras:
Adicionando o parâmetro
compressorsà sua string de conexão. Para ver um exemplo que habilita a compressão dessa forma, consulte a seção stringde conexão .Definindo o campo
compressorsde uma instânciaClientOptions. Você pode então passar as opções para o métodowith_options()ao instanciar umClient. Para ver um exemplo que habilita a compressão dessa forma, consulte a seção ClientOptions .
Connection string
Para habilitar a compressão utilizando uma string de conexão, especifique o parâmetro compressors . Você pode especificar um ou mais dos seguintes valores para o parâmetro compressors :
"snappy"para compressão Snappy"zlib"para compactação Zlib"zstd"para compressão padrão Z
O exemplo a seguir mostra como especificar Snappy, zlib e Zstandard como os compressores para uma conexão:
let uri = "mongodb+srv://<db_username>:<db_password>@<cluster-url>/?compressors=snappy,zlib,zstd"; let client = Client::with_uri_str(uri).await?;
Para saber mais sobre como definir opções de cliente, consulte o guia sobre Especificar opções de conexão.
ClientOptions
Para habilitar a compressão na sua instância do ClientOptions , defina o campo compressors e então passe as opções ao criar um cliente.
O campo compressors assume um valor do tipo Vec<Compressor>. O tipo Compressor tem os seguintes valores possíveis:
Compressor::SnappyCompressor::Zstd { level: <integer> }Compressor::Zlib { level: <integer> }
Para os compressores que têm um campo level , defina o valor como None para indicar o nível padrão. A tabela a seguir descreve os níveis de compressão padrão e aceitos para zlib e Zstandard:
Compressor | Nível padrão | Níveis aceitos |
|---|---|---|
zlib |
| Inteiros de |
Zstandard |
| Inteiros de |
Um valor de level maior resulta em mais compactação, que é mais lenta.
O exemplo a seguir mostra como especificar Snappy, zlib e Zstandard como os compressores para uma conexão:
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)?;
Informações adicionais
Para obter mais informações sobre os conceitos deste guia, consulte a seguinte documentação:
Opções de compactação de connection string no manual do servidor MongoDB
Documentação da API
Para saber mais sobre qualquer um dos métodos ou tipos mencionados neste guia, consulte a seguinte documentação da API: