MongoDB中有向无环图的设计模式

时间:2013-09-26 08:56:39

标签: mongodb database-design design-choices nosql

问题

像往常一样,问题是在数据库中显示directed acyclic graph。我拥有的数据库的选择是关系数据库,如 mysql mongodb 。我选择了mongoDb,因为关系数据库中的DAG是a mess但是如果有一个技巧我就是没找到,请告诉我。

目标是在一个或多个MongoDB文档中映射DAG。因为我们有多个孩子父母 SubDocuments ,这是不可能的。我遇到了多种设计模式,但我不确定哪种模式最适合。


具有祖先数组的树结构

祖先阵列是suggested by the mongoDB docs。而且很容易理解。据我了解,我的文档看起来像这样:

{
    "_id" : "root",
    "ancestors" : [ null ],
    "left": 1
}
{
    "_id" : "child1",
    "ancestors" : [ "root" ],
    "left": 2
}
{
    "_id" : "child2",
    "ancestors" : [ "root", "child1" ],
    "left": 1
}

这允许我find这样一个元素的所有孩子:

db.Tree.find({ancestors: 'root'}).sort({left: -1})

所有的父母都这样:

db.Tree.findOne({_id: 'child1'}).ancestors

DBRefs而不是Strings

我的第二种方法是用DBRef替换字符串键。但是除了更长的数据库记录之外,我没有看到比祖先数组更多的优势。

包含childrenparents

的基于字符串的数组

最后一个想法是不仅要存储每个文档的children,还要存储parents。这会给我所有我想要的功能。缺点是我将通过存储所有关系两次创建的大量信息开销。此外,我担心管理的数量。例如。如果文档被删除,我必须在多个字段中检查所有其他文档以供参考。


我的问题

  • 为此目的,MongoDb是关系数据库的正确选择吗?
  • 我错过了任何模式的上升/下降吗?
  • 您会建议哪种模式?为什么?你有没有经历过其中一个?

1 个答案:

答案 0 :(得分:1)

为什么不使用图表数据库?检查ArangoDB,您可以使用MongoDB等文档以及图形。 MongoDB是一个很棒的数据库,但不适用于存储面向图形的文档。 ArangoDB确实如此。

https://www.arangodb.com/

相关问题