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

标签 mongodb database-design nosql

问题

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

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


带有祖先数组的树形结构

祖先数组是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})

所有的 parent 都这样:

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

DBRefs 代替字符串

我的第二种方法是将 string-keys 替换为 DBRef。但除了较长的数据库记录之外,我认为与 祖先数组相比没有太多优势。

带有childrenparents的基于字符串的数组

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


我的问题

  • MongoDb 是否是用于此目的的关系数据库的正确选择?
  • 我错过的任何模式是否有任何优点/缺点?
  • 您会建议哪种模式?为什么?您可能对其中之一有经验吗?

最佳答案

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

https://www.arangodb.com/

关于mongodb - MongoDB中的有向无环图设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19023653/

相关文章:

node.js - 我如何使用mongoose、nodejs从Mongodb获取数据

mongodb - 将 mongodump 或 mongorestore 命令输出打印到日志文件

node.js - 推送新对象不会在回调中返回

performance - 如何提高neo4j基础数据库的性能

database - 使用部分多键唯一索引时出现 E11000 (DuplicateKey) 错误

hadoop - 在 Hbase 中,尽量减少行和列的大小,为什么?

c# - 使用C#聚合$ lookup

mysql - 用户地理位置数据库设计

python - Django/SQL : keeping track of who who read what in a forum

ios - Firebase 是这个应用程序的好解决方案吗?