如何在 MongoDB 中启用数据压缩

Sak*_*vel 5 compression zlib mongodb

在 MongoDB 中,WiredTiger 提供了 Zlib 压缩选项。

为了启用 Zlib 压缩选项,我使用以下代码创建了一个集合。

db.createCollection( "questions", { storageEngine: {
                   wiredTiger: { configString: "blockCompressor=zlib" }}})
Run Code Online (Sandbox Code Playgroud)

我运行了一些简单的测试来测量压缩性能并使用以下数据集存储字符串

{
'_id': <ObjectID>,
'question_id': <Five character string>,
'question': <My question>
}
Run Code Online (Sandbox Code Playgroud)

我使用以下代码创建了具有任何压缩选项的另一个集合。

db.createCollection( "questions")
Run Code Online (Sandbox Code Playgroud)

使用以下注释测量数据大小

db.stats(1024*1024).dataSize + db.stats(1024*1024).indexSize
Run Code Online (Sandbox Code Playgroud)

但我无法看到这两个集合之间的压缩差异。我参考了以下链接来实现我的流程。

https://www.mongodb.com/blog/post/new-compression-options-mongodb-30

https://scalegrid.io/blog/enabling-data-compression-in-mongodb-3-0/

kev*_*adi 7

不要用于dataSize此比较,因为它是未压缩的大小。storageSize代替使用。

以 MongoDB 4.2.2 为例:

// create collections
> db.createCollection('snappy')
> db.createCollection('zlib', {storageEngine: {wiredTiger: {configString: 'block_compressor=zlib'}}})

// insert a compressible document into both collections
> doc = {_id:0, text:<a paragraph of text>}
> db.snappy.insert(doc)
> db.zlib.insert(doc)

// storage size comparison
> db.snappy.stats().storageSize
20480
> db.zlib.stats().storageSize
4096

// data size comparison
> db.snappy.dataSize()
697
> db.zlib.dataSize()
697
Run Code Online (Sandbox Code Playgroud)

所以zlib的存储大小比默认的(snappy)小很多,但是它们之间的数据大小是相同的。

注意:如果您仍在使用它,MongoDB 3.0 已经过时了,自2018 年 2 月以来不再受支持。请使用更新的版本(截至 2020 年 1 月最新版本为 4.2.2)。