Visão geral
Drivers do MongoDB podem compactar as mensagens enviadas para e recebidas do MongoDB Server. Isso reduz a quantidade de transferência de dados para cada operação. A compactação pode melhorar o desempenho em redes restritas e reduzir o custo de transferência de dados associado à execução do MongoDB Atlas.
A compactação opera no nível do wire protocol, portanto, aplica-se a todas as operações que seu aplicativo executa. Se você especificar mais de um algoritmo, o driver usará o primeiro algoritmo da sua lista que o MongoDB Server também suporta.
Algoritmos de compressão
Os drivers do MongoDB suportam os seguintes algoritmos de compactação:
Benefícios da compactação de rede
MongoDB Atlas charges for data transferred across cloud regions, cloud providers, and between your infrastructure and MongoDB Atlas. Network compression reduces the amount of data that your application sends and receives, which can lower these data transfer costs. To learn more about pricing, see Data Transfer Costs.
A compactação de rede também traz benefícios de produtividade. Mensagens compactadas levam menos tempo para serem transferidas pela rede, o que pode melhorar os tempos de resposta do seu aplicativo. A compactação também reduz a largura de banda que o tráfego do MongoDB utiliza, o que deixa mais largura de banda disponível para outros aplicativos na mesma rede.
Ao escolher um algoritmo de compactação, considere as seguintes diretrizes:
Use o Zstandard para um equilíbrio entre eficiência de compactação e uso de recursos. O Zstandard é uma boa escolha padrão para a maioria dos aplicativos.
Use Snappy para aplicativos sensíveis à latência que exigem sobrecarga computacional mínima.
Use o zlib para ampla compatibilidade entre drivers e ambientes do MongoDB.
Dica
Monitorar o uso da CPU
Compression trades network bandwidth for CPU usage. After you enable network compression, monitor your application's CPU utilization to confirm that the trade-off benefits your workload. To learn more about these trade-offs, see the CPU Utilization and Network Compression in MongoDB blog post.
Compatibilidade de versão
A tabela a seguir lista o driver mínimo compatível e a versão do MongoDB Server para cada algoritmo de compactaçã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.9.1" features = ["snappy-compression"]
[dependencies.mongodb] version = "3.9.1" features = ["zlib-compression"]
[dependencies.mongodb] version = "3.9.1" 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 .Setting the
compressorsfield of aClientOptionsinstance. You can then pass the options to thewith_options()method when instantiating aClient. To see an example that enables compression this way, see the ClientOptions section.
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: