【发布时间】:2014-02-28 09:22:23
【问题描述】:
我们从“索引基数”视频 [M101J:面向 Java 开发人员的 MongoDB] 中学到的一件事是,当具有多键索引的文档被移动时,他的所有索引也必须更新,这会产生很大的开销。
我认为有可能以某种方式绕过这个约束。显而易见的解决方案是添加另一个间接级别(这是解决计算机科学问题的著名模式:-)),而不是直接从索引中引用文档,我们为每个引用该文档并获取索引的文档创建一个实体引用那个实体,现在当我们移动文档时,我们只需要修改那个实体(实体永远不会移动,因为它的 BSON 形状总是相同的)。这个解决方案的问题当然是用空间换性能(索引也有这个问题)。
但所有的希望都不会消失;在 MongoDB 中,所有文档都有一个自动索引的不可变 _id 字段。鉴于这一切,我们知道如果一个文档被移动,其关联的 _id 索引也会更新,那么为什么不让所有其他索引都引用文档的相应 _id 索引呢?
鉴于此解决方案,唯一会在文档移动时更新的索引是 _id 索引。
我想知道这个解决方案是否可以在 MongoDB 中实现,或者是否有一些隐藏的陷阱使它不切实际?
谢谢
【问题讨论】:
-
这看起来像是在 jira.mongodb.org 或一些 mongo 讨论列表上发布的内容。
-
这不需要加载 BSON 文档来检查索引吗?
-
这正是我们在 TokuMX(一个改进了存储的 MongoDB 发行版)中所做的,而我的同事实际上刚刚在这里写过:tokutek.com/2014/02/…