压缩在任何数据库是必要的,因为它有很多优势,如减少存储、数据传输时间等。
减少存储结果明显地节约成本,我们可以节省更多的数据在同一个空间。随着数据量的增长,有效的数据压缩的必要性变得越来越重要为了节省存储空间,降低I / O开销,提高查询性能。
在这个博客中,我们将讨论数据和网络级压缩在MongoDB。我们将讨论时髦和zstd数据块和zstd压缩在一个网络。
雷竞技下载官网MongoDB Percona服务器(PSMDB)支持所有类型的压缩和企业级功能免费。我用PSMDB6.0.4这里。
数据压缩
MongoDB提供各种块WiredTiger存储引擎使用的压缩方法,像上口,zlib, zstd。
当数据写入磁盘,MongoDB用指定块压缩方法压缩,然后将它写到磁盘。读取此数据块时,它解压缩它在内存中并提出传入的请求。
块压缩是一种压缩压缩的数据块,而不是压缩整个数据集。数据块压缩可以提高性能通过允许读和写在小块。
默认情况下,MongoDB提供一个时髦的块压缩存储和网络通信的方法。
时髦的压缩是关于内存使用设计为快速和高效,使它适合MongoDB工作负载。时髦是一个压缩库由谷歌开发的。
在MongoDB时髦的压缩的好处:
- 压缩和解压缩速度快
- CPU使用率较低
- streamable格式,允许快速处理
- 对查询性能的影响最小
Zstandard压缩或zstd,另一个新块v4.2 MongoDB开始提供的压缩方法,提供了更高的压缩率。Zstd Facebook开发的是一个压缩库。
Zstd通常提供了一个更高的压缩比上口,也就是说它可以更有效地压缩数据,实现一个更小的压缩大小相同的输入数据。
MongoDB zstd压缩的好处:
- 更高的压缩比时髦的比率
- 高度可配置的压缩级别
- 压缩和解压缩速度快
- 对查询性能的影响最小
使zstd块压缩,您需要指定块压缩机作为“zstd”配置文件:
|
1
2
3
4
5
6
7
8
|
存储:
引擎:wiredTiger
wiredTiger:
collectionConfig:
blockCompressor:zstd
blockCompressorQuality:6 # v5.0以来(可用)
engineConfig:
cacheSizeGB:4
|
在上面的例子中,blockCompressorQuality设置为6,这是缺省设置。
blockCompressorQuality指定应用使用zstd时压缩机的压缩级别。值的范围从1到22。
zstdCompressionLevel指定值越高,越高压缩应用。所以,它变得非常重要的测试用例所需的最优实现在生产之前。
在这里,我们要测试时髦和zstd压缩使用以下配置。
主机配置:4个vcpu 14 GB RAM
数据库版本:PSMDB 6.0.4
操作系统:Linux CentOS 7
我使用mgenerate命令来插入一个示例文档。
|
1
|
mgeneratejs
{“名称”:“美元的名字”,“年龄”:“美元时代”,“电子邮件”:{“数组”美元:{“的”:“美元电子邮件”,“数量”:3}}}”
- - - - - -n
120000000
|
mongoimport
- - -uri
mongodb
:/ /本地主机
:
27017年/<
db
>
- - -集合
<
coll_name
>
- - -模式
插入
|
样品记录:
我创建了一个集合使用以下命令与一个特定的块压缩方法。这并不影响任何现有的集合或任何新的集合后被创造出来。
|
1
|
db
.createCollection
(
“用户”
,
{
storageEngine
:
{
wiredTiger
:
{
configString
:
“block_compressor = zstd”
}
}
}
)
|
如果任何新的集合中创建的默认方式,它总是会默认时髦或mongod配置文件中指定的压缩方法。
插入操作时,没有其他数据库中查询或DML操作运行。
时髦的
数据大小:14.95 gb
压缩后的数据大小:10.75 gb
Avg延迟:12.22 ms
Avg cpu使用率:34%
Avg插入行动率:16 k / s
时间进口120000000文档:7292秒

Zstd(使用默认压缩6级)
数据大小:14.95 gb
压缩后的数据大小:7.69 gb
Avg延迟:12.52 ms
Avg cpu使用率:31.72%
Avg插入行动率:14.8 k / s
时间进口120000000文档:7412秒

我们可以看到从上面的比较,我们可以节省将近3 gb的磁盘空间而不影响CPU或内存。
网络压缩
MongoDB还提供网络压缩。
这可以进一步减少需要传输的数据量之间通过网络服务器和客户端。反过来,这需要更少的带宽和网络资源,这可以提高性能和降低成本。
它支持相同的压缩算法对网络压缩,即。、时髦、zstd zlib。所有这些压缩算法有不同的压缩比和CPU需求。
启用网络压缩mongod蒙戈,您可以指定压缩算法通过将以下行添加到配置文件中。
|
1
2
3
|
净:
压缩:
压缩机:时髦的
|
我们还可以使用多种压缩算法
|
1
2
3
|
净:
压缩:
压缩机:时髦的
,zstd,zlib
|
客户机还应使用至少一个或相同的压缩方法中指定的配置数据压缩,通过网络或客户机和服务器之间的数据压缩。
在以下示例中,我使用python驱动程序连接到我的服务器没有压缩,和zstd压缩算法
我做简单的在上面所示的示例记录找到行动。
这是出站数据流量没有任何压缩方法
在这里我们可以看到数据传输大约是2.33 mb / s:

现在,我启用zstd压缩算法在服务器和客户端

|
1
|
客户端
=
pymongo
.MongoClient
(
“mongodb: / /用户:(电子邮件保护):27017 / ? replicaSet = rs1&authSource = admin&compressors = zstd”
)
|
在这里我们可以看到数据avg出站传输大约是1 mb / s几乎减少了50%。

注意,网络压缩可以产生重大影响网络性能和CPU使用率。在我的例子中,几乎没有任何其他运行,所以我没有看到任何明显的CPU使用率。
结论
选择时髦和zstd压缩依赖于特定的用例。通过理解的好处MongoDB中的每个算法和它们的实现方式,您可以选择合适的压缩设置为您的特定用例和节省磁盘空间。
选择合适的压缩算法根据您的特定需求和资源是很重要的。同样重要的是测试您的应用程序和没有网络压缩来确定最优配置用例。
我也推荐使用雷竞技下载官网MongoDB Percona服务器,它提供了MongoDB企业级特性没有任何许可证,因为它是免费的。你可以了解更多关于它的博客MongoDB:为什么你支付企业当开源覆盖吗?
雷竞技下载官网MongoDB Percona还提供了一些更伟大的产品,喜欢的雷竞技下载官网为MongoDB Percona备份,雷竞技下载官网MongoDB Percona Kubernetes运营商,raybetapp官方下载 。
雷竞技下载官网MongoDB Percona分布是一个免费的MongoDB数据库选择,给你一个解决方案,结合了最好的和最重要的开放源码社区的企业组件,设计和测试一起工作。





