Overview
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 利用率和网络压缩博文。
版本兼容性
所有版本的Kotlin Sync驾驶员支持Snappy、Zlib 和 Zstandard 压缩。
下表列出了每种算法支持的最低MongoDB Server版本:
启用网络压缩
要为MongoDB连接启用网络压缩,请安装所需的依赖项并指定要使用的压缩算法。
安装依赖项
下表列出了每种算法及其所需的依赖项(如果有):
压缩算法 | 依赖 |
|---|---|
snappy | 下载 |
zlib | 无。驾驶员原生支持 Zlib 压缩。 |
Zstandard | 下载 |
指定压缩算法
您可以通过以下方式之一指定算法,为MongoDB实例的连接启用压缩:
将
compressorList()方法链接到MongoClientSettings.builder()方法。在连接 URI 中使用
compressors参数。
以下示例演示了如何在连接到MongoDB时指定所有可用的压缩器。选择 MongoClientSettings 或 Connection URI标签页,查看相应的语法:
val settings = MongoClientSettings.builder() .applyConnectionString(ConnectionString("<connection string>")) .compressorList( listOf( MongoCompressor.createSnappyCompressor(), MongoCompressor.createZlibCompressor(), MongoCompressor.createZstdCompressor()) ) .build() val mongoClient = MongoClient.create(settings)
val uri = ConnectionString("mongodb+srv://<db_username>:<db_password>@<cluster-url>/?compressors=snappy,zlib,zstd") val mongoClient = MongoClient.create(uri)
指定zlib压缩级别
如果您指定 Zlib 作为其中一种压缩算法,则还可以使用 MongoCompressor.LEVEL属性指定压缩级别。此选项接受 -1 和 9 之间的整数值:
-1:默认压缩(通常为
6)0:无压缩
1:速度最快,但压缩率最低
9:压缩最佳,但速度最慢
以下示例演示如何指定 zlib 压缩器的压缩级别。选择 MongoClientSettings 或 Connection URI标签页,查看相应的语法:
val zlib = MongoCompressor.createZlibCompressor() val settings = MongoClientSettings.builder() .applyConnectionString(ConnectionString(uri)) .compressorList(listOf(zlib.withProperty(MongoCompressor.LEVEL, <level>))) .build() val mongoClient = MongoClient.create(settings)
val uri = "mongodb://<db_username>:<db_password>@<hostname>:<port>/?" + "compressors=zlib" + "zlibCompressionLevel=<zlib compression level>" val mongoClient = MongoClient.create(uri)
API 文档
要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档: