2015-02-23 52 views
3

我们的应用程序使用物化路径方法来存储树。我们使用这种方法,因为插入速度很快,并且允许我们很容易地查询子树。在这种方法中,我们将路径存储到mongo中称为'路径'的字段中的树中每个节点。我们正在面对即将发生的mongo问题,在那里我们的树将不能再被构建到mongo中,因为路径不能超过1024字节b/c它是一个索引字段。mongodb 3.0是否增加了主键索引限制?

mongo 3.0是否将这个任意限制增加到高于1024bytes的东西?

回答

2

关于索引关键字长度的1024 byte limit仍然适用于MongoDB 3.0。

如果您的树的materialized paths接近密钥大小限制,或许您应该考虑限制树中每个节点的树深度或描述长度。

在MongoDB文档中描述的modelling tree structures有几种替代方法,但是提到了与您当前的方法相比的显而易见的权衡。

仅供参考,您可以在MongoDB问题跟踪器中看到/ upvote:SERVER-3372: Allow indexing fields of arbitrary length

+0

注意:SERVER-3372当前的fixVersion为“3.1 Desired”。这表明它是在3.1开发周期中进行审查的候选问题,但不能保证该功能将实施。在MongoDB 3.0中添加可插拔存储API后,我认为将考虑如何将公开的索引键限制映射到底层存储引擎的任何限制(可能大于或小于1024字节)。 – Stennie 2015-02-24 01:46:48

+0

我已经审查了很多建模树结构文档。对于这种尺寸的树,唯一的另一个可行的选择是嵌套设置模式,它只是插入时的一只狗。物化路径确实是最好的选择。我也通过使用npm shortid模块与mongo对象ID来使用更短的描述符。我可能必须迁移到TokuMX,因为它们的字段可以有32k索引字段。 – 2015-02-25 04:29:16

+0

这个问题有没有什么动作?我真的很困难。在我们的应用程序中,树中有数百万个节点,查询树和子树是非常关键的。我们还在树上执行了数十亿数据库事务,并且我们发现物化路径方法是我们需要的最佳机制。是否有可能至少增加允许的长度?即使加倍允许的密钥长度也能帮助我们。 – 2016-08-19 02:32:55