MongoDB:使用WiredTiger存储更新索引字段

问题描述:

更新索引字段对wiredTiger有任何影响吗? 我正在通过下面的问题。 问:添加索引{a:1}可能会降低以下哪个操作的速度?检查所有适用。答:MongoDB:使用WiredTiger存储更新索引字段

A. db.collection.update({b:456},{$ inc:{a:1}});

我相信上面的回答是MMAPV1正确的,但在wiredTiger不应该有任何影响,因为wiredTiger使用不可变的文件标识符,而不是存储位置的地址。有人可以证实我的理解。

我会说答案是'是'。

documentation明确指出:

添加一个索引有写操作一些负面的性能影响。

由于WiredTiger不支持就地更新,执行这个命令将有效地复制,除了将在新文件中反映给定的变化({ $inc : { a : 1 } })过滤条件({ b : 456 })发现,现有的文件,太。第二步,分配给原始文档的存储空间将被释放。

随着MMAPv1,为更新的文件所需要的空间也不会从原有的不同,所以就地更新发生。

然而,不管所使用的存储引擎,更改索引字段需要更新受影响的索引(ES),太。对于MMAPv1,“仅”索引叶的键在您的情况下发生变化 - 文档保持在同一位置。在WiredTiger的情况下,密钥和文档位置都需要在索引中更新。