英文:
How to enable data compression in MongoDB
问题
在MongoDB中,WiredTiger提供了Zlib压缩选项。
要启用Zlib压缩选项,我使用以下代码创建了一个集合。
db.createCollection("questions", { storageEngine: {
wiredTiger: { configString: "blockCompressor=zlib" }}})
我运行了一些简单的测试来测量压缩性能,并使用以下数据集来存储字符串。
{
'_id': <ObjectID>,
'question_id': <五个字符的字符串>,
'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/
英文:
In MongoDB, WiredTiger provides the Zlib compression option.
To enable the Zlib compression option, I created a collection using the following code.
db.createCollection( "questions", { storageEngine: {
wiredTiger: { configString: "blockCompressor=zlib" }}})
I ran some simple tests to measure compression performance and used following data sets storing strings
{
'_id': <ObjectID>,
'question_id': <Five character string>,
'question': <My question>
}
I created another one collection with any compression option using the following code.
db.createCollection( "questions")
Measured the data size using following comment
db.stats(1024*1024).dataSize + db.stats(1024*1024).indexSize
But I can't able to see the compression difference between these two collections. I referred the following links to achieve my process.
https://www.mongodb.com/blog/post/new-compression-options-mongodb-30
https://scalegrid.io/blog/enabling-data-compression-in-mongodb-3-0/
答案1
得分: 6
不要使用 dataSize
进行此比较,因为它是未压缩的大小。请改用 storageSize
。
以 MongoDB 4.2.2 为例:
// 创建集合
> db.createCollection('snappy')
> db.createCollection('zlib', {storageEngine: {wiredTiger: {configString: 'block_compressor=zlib'}}})
// 向两个集合插入可压缩文档
> doc = {_id:0, text:<一段文本>}
> db.snappy.insert(doc)
> db.zlib.insert(doc)
// 存储大小比较
> db.snappy.stats().storageSize
20480
> db.zlib.stats().storageSize
4096
// 数据大小比较
> db.snappy.dataSize()
697
> db.zlib.dataSize()
697
因此,zlib 的存储大小比默认的 snappy 要小得多,但它们之间的数据大小相同。
注意:如果您仍在使用 MongoDB 3.0,它已经非常过时,并且自 2018 年 2 月 起不再受支持。请使用更新的版本(截止到 2020 年 1 月的最新版本为 4.2.2)。
英文:
Don't use dataSize
for this comparison since it's the uncompressed size. Use storageSize
instead.
Using MongoDB 4.2.2 for example:
// 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
So the storage size of zlib is much smaller than default (snappy), but data size are the same between them.
Note: If you're still using it, MongoDB 3.0 is very much outdated and not supported anymore since February 2018. Please use a more recent version (latest as of Jan 2020 is 4.2.2).
答案2
得分: 0
db.createCollection("questions", { storageEngine: { wiredTiger: { configString: "blockCompressor=zlib" } } })
错误 -- 抛出无效参数
改用
db.createCollection("email", { storageEngine: { wiredTiger: { configString: "block_compressor=zlib" } } })
英文:
db.createCollection( "questions", { storageEngine: {
wiredTiger: { configString: "blockCompressor=zlib" }}})
ERROR -- throws invalid argument
use instead
db.createCollection( "email", { storageEngine: {wiredTiger: { configString: "block_compressor=zlib" }}})
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论