首页 > 解决方案 > MongoDB - _id 索引大小的奇怪差异

问题描述

我在 12 个分片上有两个分片集合,文档数量相同。Collection1 的 shard key 是复合的(使用了两个字段),它的文档由 4 个字段组成。Collection2 2 的 shard key 是单一的,它的文档由 5 个字段组成。

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

标签: mongodbshardingmongodb-indexes

解决方案


MongoDB 对索引使用前缀压缩。

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

根据 _id 值的数据类型,这可能是相当多的。

也可能存在孤立文档导致一个节点在其 _id 索引中有更多条目。


推荐阅读