在MongoDB中,WiredTiger提供了Zlib压缩选项。
为了启用Zlib压缩选项,我使用以下代码创建了一个集合。
db.createCollection( "questions", { storageEngine: {
wiredTiger: { configString: "blockCompressor=zlib" }}})
我运行了一些简单的测试来测量压缩性能,并使用了以下存储字符串的数据集
{
'_id': <ObjectID>,
'question_id': <Five character string>,
'question': <My question>
}
我使用以下代码创建了一个具有任何压缩选项的另一个集合。
db.createCollection( "questions")
使用以下注释测量数据大小
db.stats(1024*1024).dataSize + db.stats(1024*1024).indexSize
但是我看不到这两个集合之间的压缩差异。我引用了以下链接以实现我的过程。
https://www.mongodb.com/blog/post/new-compression-options-mongodb-30
https://scalegrid.io/blog/enabling-data-compression-in-mongodb-3-0/
请勿使用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
因此zlib的存储大小比默认值(快照)小得多,但是它们之间的数据大小相同。
注:如果您仍在使用它,则MongoDB 3.0已非常过时,并且从February 2018开始不再受支持。请使用更新的版本(截至2020年1月的最新版本是4.2.2)。