对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

压缩网络流量

MongoDB驱动程序可以压缩发送到 MongoDB Server 和从MongoDB Server接收的消息。这减少了每次操作传输的数据量。压缩可以提高受限网络上的性能,并降低与运行MongoDB Atlas相关的数据传输成本。

压缩在传输协议级别运行,因此它适用于应用程序执行的每个操作。如果指定多个算法,驾驶员将使用列表中MongoDB Server也支持的第一个算法。

MongoDB驱动程序支持以下压缩算法:

MongoDB Atlas对跨云区域、云提供商以及基础架构和MongoDB Atlas之间传输的数据收费。网络压缩可减少应用程序发送和接收的数据量,从而降低数据传输成本。要学习;了解有关定价的更多信息,请参阅数据传输成本。

网络压缩还有助于提高工作效率。压缩后的消息通过网络传输的时间更短,这可以缩短应用程序的响应时间。压缩还可以减少MongoDB流量使用的带宽,从而为同一网络上的其他应用程序留出更多带宽。

选择压缩算法时,请考虑以下准则:

  • 使用 Zstandard 在压缩效率和资源使用之间取得平衡。对于大多数应用程序来说,Zstandard 是一个不错的默认选择。

  • Snappy 用于需要最小计算开销的延迟敏感型应用程序。

  • 使用 Zlib 实现跨MongoDB驱动程序和环境的广泛兼容性。

提示

监控 CPU 使用率

压缩以网络带宽换取 CPU 使用率。启用网络压缩后,监控应用程序的 CPU 利用率,以确认这种权衡是否有利于您的工作负载。要学习;了解有关这些权衡的更多信息,请参阅MongoDB中的 CPU 利用率和网络压缩博文。

下表列出了每种压缩算法支持的最低驾驶员和MongoDB Server版本:

压缩算法
最低驱动程序版本
最低服务器版本

2.1

4.2

2.1

4.2

2.1

4.2

要使用压缩器,请将相关功能标志添加到项目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实例上启用压缩:

  • compressors 参数添加到连接string中。 要查看以这种方式启用压缩的示例,请参阅连接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实例中启用压缩,请设置compressors字段,然后在创建客户端时传递选项。

compressors字段采用Vec<Compressor>类型的值。 Compressor类型具有以下可能的值:

  • Compressor::Snappy

  • Compressor::Zstd { level: <integer> }

  • Compressor::Zlib { level: <integer> }

对于具有level字段的压缩器,将该值设置为None以指示默认级别。 下表描述了 Zlib 和 Zstandard 的默认和可接受的压缩级别:

Compressor
默认级别
已接受级别

zlib

6

09None的整数

Zstandard

3

122None的整数

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)?;

有关本指南中概念的更多信息,请参阅以下文档:

要进一步了解本指南所提及的任何方法或类型,请参阅以下 API 文档: