Mongodb的契约实际上有什么作用?



嗯,可能这应该从文档中清楚,可悲的是,事实并非如此。我的猜测是,该紧凑对集合进行了某种碎片整理 - 这样集合的填充因子就会低于给定值。然而,这似乎不是真的:

> 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

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

我的猜测是,该紧凑使集合的某种碎片化

是的。它重写、DE 对集合上的所有数据和索引进行碎片化。

这样集合的填充因子

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

从文档中:

紧凑压缩现有文档,但不重置填充因子 集合的统计信息。在紧凑的MongoDB之后将使用 现有填充为文档分配新记录时的因素 这个集合。

因此,当您执行以下命令时,

db.runCommand ( { compact: 'aaa', paddingFactor: 1.1 } )

集合中现有文档的记录大小将使用指定的填充因子进行更改。也就是说,所有现有记录现在都将10%document size作为其padding大小。

因此,在碎片整理之后,所有现有记录的大小都将更改为:

record size = document size + (10% of document size)

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

更改集合的填充因子的方法,还有其他方法可以做到这一点吗?

不。不能选择或更改集合的填充因子。从文档中:

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

最新更新