我们从“索引基数”视频 [M101J:面向 Java 开发人员的 MongoDB] 中学到的一件事是,当具有多键索引的文档被移动时,他的所有索引也必须更新,这会产生很大的开销。
我认为有可能以某种方式绕过这个约束。显而易见的解决方案是添加另一个间接级别(这是解决计算机科学问题的著名模式:-)),而不是直接从索引中引用文档,我们为每个引用该文档并获取索引的文档创建一个实体引用那个实体,现在当我们移动文档时,我们只需要修改那个实体(实体永远不会移动,因为它的 BSON 形状总是相同的)。这个解决方案的问题当然是用空间换性能(索引也有这个问题)。
但是所有的希望都没有消失;在 MongoDB 中,所有文档都有一个不可变的 _id 字段,该字段会被自动索引。鉴于这一切,我们知道如果一个文档被移动,其关联的 _id 索引也将被更新,那么为什么不让所有其他索引引用文档的相应 _id 索引呢?
鉴于此解决方案,文档移动时唯一会更新的索引是 _id 索引。
我想知道这个解决方案是否可以在 MongoDB 中实现,或者是否有一些隐藏的陷阱使它不切实际?
谢谢