Overview
Los controladores de MongoDB pueden comprimir los mensajes enviados y recibidos desde el servidor de MongoDB. Esto reduce la cantidad de datos transferidos en cada operación. La compresión puede mejorar el rendimiento en redes con recursos limitados y disminuir los costos de transferencia de datos asociados con la ejecución de MongoDB Atlas.
La compresión opera a nivel de protocolo de red, por lo que se aplica a todas las operaciones que realiza su aplicación. Si especifica más de un algoritmo, el controlador utilizará el primero de la lista que también sea compatible con MongoDB Server.
Algoritmos de compresión
Los controladores de MongoDB admiten los siguientes algoritmos de compresión:
Beneficios de la compresión de red
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.
La compresión de red también ofrece ventajas en cuanto a productividad. Los mensajes comprimidos tardan menos en transferirse a través de la red, lo que puede mejorar los tiempos de respuesta de su aplicación. Además, la compresión reduce el ancho de banda que utiliza el tráfico de MongoDB, lo que deja más ancho de banda disponible para otras aplicaciones en la misma red.
Al elegir un algoritmo de compresión, tenga en cuenta las siguientes pautas:
Utilice Zstandard para lograr un equilibrio entre la eficiencia de compresión y el uso de recursos. Zstandard es una buena opción predeterminada para la mayoría de las aplicaciones.
Utilice Snappy para aplicaciones sensibles a la latencia que requieren una mínima sobrecarga computacional.
Utilice Zlib para una amplia compatibilidad con los controladores y entornos de MongoDB.
Tip
Monitorear el uso de la 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.
Compatibilidad de versiones
El controlador C++ utiliza el controlador C de MongoDB para comprimir el tráfico de red. La siguiente tabla enumera la versión mínima del controlador C y del servidor MongoDB compatibles para cada algoritmo de compresión:
Algoritmo de compresión | Versión mínima del controlador C | Versión mínima del servidor |
|---|---|---|
1.7 | 4.2 | |
1.7 | 4.2 | |
1.15 | 4.2 |
Para saber qué versión del controlador C requiere su versión del controlador C++, consulte la sección de compatibilidad de libmongoc.
Habilitar la compresión de red
Para habilitar la compresión de red para su conexión a MongoDB, instale las dependencias necesarias y especifique los algoritmos de compresión que desea utilizar.
Instale las dependencias
Dado que el controlador C++ utiliza el controlador C de MongoDB para implementar la compresión de red, debe compilar el controlador C con las dependencias necesarias. Para ver estas dependencias, consulte la sección "Instalar dependencias" en la documentación del controlador C.
Especificar algoritmos de compresión
Para habilitar la compresión en la conexión a tu instancia de MongoDB, incluye la opción de conexión compressors en tu URI y especifica los algoritmos de compresión que deseas utilizar. El siguiente código muestra cómo especificar los algoritmos snappy, zstd y zlib, en ese orden:
int main() { mongocxx::instance instance; mongocxx::uri uri("mongodb://<hostname>:<port>/?compressors=snappy,zstd,zlib"); mongocxx::client client(uri); }
Configure el nivel de compresión zlib
Si especificas zlib como uno de tus algoritmos de compresión, también puedes usar la opción zlibCompressionLevel para especificar un nivel de compresión. Esta opción acepta un valor entero entre -1 y 9:
-1: (por defecto). zlib utiliza su nivel de compresión por defecto (generalmente
6).0: Sin compresión.
1: La velocidad más rápida, pero la compresión más baja.
9: Mejor compresión pero la velocidad más lenta.
El siguiente ejemplo de código especifica el algoritmo de compresión zlib y un valor de 1 para la opción zlibCompressionLevel:
int main() { mongocxx::instance instance; mongocxx::uri uri("mongodb://<hostname>:<port>/?compressors=zlib&zlibCompressionLevel=1"); mongocxx::client client(uri); }
Documentación de la API
Para obtener más información sobre los tipos y opciones utilizados en esta página, consulta la siguiente documentación de la API: