Overview
MongoDB 驱动程序可以压缩与 MongoDB Server 之间发送和接收的消息。这会减少每次操作的数据传输量。压缩可以提高在受限网络上的性能,并降低与运行 MongoDB Atlas 相关的数据传输费用。
压缩在传输协议级别运行,因此它适用于您的应用程序执行的每项操作。如果您指定了多种算法,驱动程序将使用列表中 MongoDB Server 也支持的第一种算法。
压缩算法
MongoDB 驱动程序支持以下压缩算法:
网络压缩优势
MongoDB Atlas 对跨云区域、云提供商以及您的基础设施与 MongoDB Atlas 之间的数据传输收费。网络压缩可减少您的应用程序发送和接收的数据量,这可以降低这些数据传输费用。要了解有关定价的更多信息,请参阅数据传输费用。
网络压缩还能提高生产力。压缩后的消息在网络上传输所需的时间更短,这可以缩短应用程序的响应时间。压缩还可以减少 MongoDB 流量所使用的带宽,从而为同一网络上的其他应用程序留出更多可用带宽。
当您选择压缩算法时,请考虑以下指南:
使用 Zstandard 可在压缩效率和资源使用之间取得平衡。对于大多数应用程序,Zstandard 是一个不错的默认选择。
对于对延迟敏感且需要最小计算开销的应用程序,请使用 Snappy。
使用 zlib 以实现 MongoDB 驱动程序和环境之间的广泛兼容性。
提示
监控 CPU 使用率
压缩以 CPU 使用率为代价换取网络带宽。启用网络压缩后,请监控应用程序的 CPU 利用率,以确认这种权衡是否对您的工作负载有利。要了解有关这些权衡的更多信息,请参阅MongoDB 中的 CPU 利用率和网络压缩博客文章。
版本兼容性
Laravel Integration 的所有版本都支持每种网络压缩算法。
下表列出了每种算法支持的最低 MongoDB Server 版本:
启用网络压缩
要为您的 MongoDB 连接启用网络压缩,请执行以下步骤:
构建 MongoDB PHP 扩展并安装所需的依赖项。该扩展处理网络压缩,而不是 Laravel 集成。
指定您要使用的压缩算法。
安装依赖项
由于 Laravel 集成使用 MongoDB PHP 扩展和 MongoDB C 驱动程序来实现网络压缩,因此您必须安装带有所需依赖项的 C 驱动程序。要查看这些依赖项,请参阅 C 驱动程序文档中的 安装依赖项。
指定压缩算法
要启用用于连接到 MongoDB 实例的压缩,请更新应用程序 config/database.php 配置文件中的 connections 数组。您可以采用以下方式之一指定压缩算法:
在
options数组中包含compressors选项在
dsn连接字符串中使用compressors参数
选择 Options Array 或 Connection String 标签页以查看示例,该示例指定了所有可用的压缩器:
'connections' => [ 'mongodb' => [ 'dsn' => 'mongodb+srv://mongodb0.example.com/', 'driver' => 'mongodb', 'database' => 'sample_mflix', 'options' => [ 'compressors' => 'snappy,zstd,zlib', ], ],],'connections' => [ 'mongodb' => [ 'dsn' => 'mongodb+srv://mongodb0.example.com/?compressors=snappy,zstd,zlib', 'driver' => 'mongodb', 'database' => 'sample_mflix', ],],设置 zlib 压缩级别
如果您将 zlib 指定为压缩算法之一,则可以使用 zlibCompressionLevel 选项来指定压缩级别。此选项接受在 -1 和 9 之间的整数值,并且值具有以下效果:
-1: (默认) zlib 使用其默认压缩级别 (通常为
6)0 :无压缩。
1 :速度最快,但压缩率最低。
9 :压缩最佳,但速度最慢。
选择 Options Array 或 Connection String 标签页,查看将 zlibCompressionLevel 选项设置为 1 的示例:
'connections' => [ 'mongodb' => [ 'dsn' => 'mongodb+srv://mongodb0.example.com/', 'driver' => 'mongodb', 'database' => 'sample_mflix', 'options' => [ 'compressors' => 'zlib', 'zlibCompressionLevel' => 1, ], ],],'connections' => [ 'mongodb' => [ 'dsn' => 'mongodb+srv://mongodb0.example.com/?compressors=zlib&zlibCompressionLevel=1', 'driver' => 'mongodb', 'database' => 'sample_mflix', ],],