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
O MongoDB Atlas cobra pela transferência de dados 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 aplicativo envia e recebe, o que pode diminuir 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 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
A compactação troca largura de banda de rede por uso de CPU. Depois de ativar a compactação de rede, monitore a utilização da CPU do seu aplicativo para confirmar se a compensação beneficia sua carga de trabalho. Para aprender mais sobre essas compensações, consulte a publicação no blog Utilização de CPU e compactação de rede no MongoDB.
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:
Habilitar compressão de rede
Para habilitar a compactação de rede para sua conexão com o MongoDB, instale as dependências necessárias e especifique os algoritmo de compactação que você deseja usar.
Instalar dependências
A tabela a seguir lista as dependências necessárias para cada algoritmo de compactação:
Algoritmo de compactação | Dependência |
|---|---|
Snappy | Requer o pacote python-snappy. |
zlib | Requer o módulo zlib, incluído na biblioteca padrão do Python. |
Zstandard | Requer o pacote zstandard. |
Especifique algoritmos de compactação
Para habilitar a compressão para a conexão com sua instância do MongoDB, use a opção de conexão compressors e especifique os algoritmos de compressão que deseja usar. Você pode fazer isso de duas maneiras:
Passe os algoritmos como um argumento para o construtor
MongoClient.Especifique os algoritmos em sua string de conexão.
O seguinte exemplo de código mostra ambas as opções:
As seguintes guias demonstram como especificar todos os compressores disponíveis durante a conexão ao MongoDB:
client = pymongo.MongoClient("mongodb://<db_username>:<db_password>@<hostname>:<port>", compressors = "snappy,zstd,zlib")uri = ("mongodb://<db_username>:<db_password>@<hostname>:<port>/?" "compressors=snappy,zstd,zlib")client = pymongo.MongoClient(uri)client = pymongo.AsyncMongoClient("mongodb://<db_username>:<db_password>@<hostname>:<port>", compressors = "snappy,zstd,zlib")uri = ("mongodb://<db_username>:<db_password>@<hostname>:<port>/?" "compressors=snappy,zstd,zlib")client = pymongo.AsyncMongoClient(uri)Se você não especificar um algoritmo de compressão, o PyMongo não comprimirá o tráfego de rede. Se você especificar vários algoritmos de compressão, o driver selecionará o primeiro na lista compatível com sua instância do MongoDB.
Especifique o nível de compressão da zlib
Se você especificar zlib como um dos algoritmos de compressão, também poderá usar a opção zlibCompressionLevel para especificar um nível de compressão. Esta opção aceita um valor inteiro entre -1 e 9:
-1: (padrão). zlib usa seu nível de compressão padrão (geralmente
6).0: sem compressão.
1: velocidade mais rápida, mas menor compressão.
9: a melhor compactação, mas a velocidade mais lenta.
O seguinte exemplo de código especifica o algoritmo de compressão zlib e um valor de 1 para a opção zlibCompressionLevel :
client = pymongo.MongoClient("mongodb://<db_username>:<db_password>@<hostname>:<port>", compressors = "zlib", zlibCompressionLevel=1)uri = ("mongodb://<db_username>:<db_password>@<hostname>:<port>/?" "compressors=zlib" "zlibCompressionLevel=1")client = pymongo.MongoClient(uri)client = pymongo.AsyncMongoClient("mongodb://<db_username>:<db_password>@<hostname>:<port>", compressors = "zlib", zlibCompressionLevel=1)uri = ("mongodb://<db_username>:<db_password>@<hostname>:<port>/?" "compressors=zlib" "zlibCompressionLevel=1")client = pymongo.AsyncMongoClient(uri)Documentação da API
Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a documentação da API do MongoClient.