Mongodb的compact实际上是做什么的?

Tom*_*ich 1 padding mongodb compact-database

好吧,可能这应该从文档中清楚地看出,遗憾的是,情况并非如此。我的猜测是,该压缩文件会对集合进行某种碎片整理 - 这样集合的 paddingfactor 就会低于给定的值。然而,这似乎不是真的:

> db.aaa.stats().paddingFactor
1.9980000000000002
> db.runCommand ( { compact: 'aaa', paddingFactor: 1.1 } )
{ "ok" : 1 }
> db.aaa.stats().paddingFactor
1.9980000000000002
> db.runCommand ( { compact: 'aaa', paddingFactor: 3 } )
{ "ok" : 1 }
> db.aaa.stats().paddingFactor
1.9980000000000002
Run Code Online (Sandbox Code Playgroud)

如果这不是更改集合填充因子的方法,是否还有其他方法可以这样做?

Bat*_*eam 5

我的猜测是,这种紧凑型对系列进行了某种去碎片化

是的。它重写、对集合中的所有数据和索引进行碎片整理。

这样集合的填充因子

不会。它不会改变集合的填充因子。

文档

compact 压缩现有文档,但不会重置集合的 paddingFactor 统计信息。在为该集合中的文档分配新记录时,压缩后 MongoDB 将使用现有的 paddingFactor。

所以当你执行下面的命令时,

db.runCommand ( { compact: 'aaa', paddingFactor: 1.1 } )
Run Code Online (Sandbox Code Playgroud)

使用指定的填充因子更改集合中现有文档的记录大小。也就是说,所有现有记录现在都将具有10%它们document sizepadding大小。

因此,在 DE 分片之后,所有现有记录的大小都将更改为,

record size = document size + (10% of document size)
Run Code Online (Sandbox Code Playgroud)

并且它不会影响或更改整个集合的填充因子。

更改集合填充因子的方法,还有其他方法吗?

不可以。您不能选择或更改集合的填充因子。从文档

填充因子:一个自动校准的常量,用于确定 MongoDB 应该为磁盘上的每个文档容器分配多少额外空间。填充因子为 1 意味着 MongoDB 将仅分配文档所需的空间量。填充因子为 2 意味着 MongoDB 将分配文档所需空间量的两倍。