MongoDB-_id索引大小的怪异差异

问题描述

我在12个分片上有两个分片集合,文件数量相同。 Collection1的分片键是复合键(使用两个字段),其文档由4个字段组成。 Collection2的分片键为单个,其文档由5个字段组成。

通过 db.collection.stats()命令,可以获得有关索引的信息。 在我看来,奇怪的是,对于Collection1, _id 索引的总大小为1342MB。 而是,Collection2的 _id 索引的总大小为2224MB。这种差异合理吗?我在等的是,由于文档数量相同,所以总大小会更小。请注意,两个集合的分片键均未集成 _id 字段。

解决方法

MongoDB对索引使用前缀压缩。

这意味着,如果索引中的顺序值以相同的字节序列开头,则将为第一个值存储字节,而随后的值将包含指示前缀长度的标记。

根据_id值的数据类型,可能会很多。

也可能orphaned documents导致一个节点的_id索引中有更多条目。