Mongodb Mongo树数据模型设计
我的目标是设计一个可伸缩的递归树数据模型,该模型与垂直大小、水平大小、树不平衡和总体大小无关 在Mongo的网站上,他们在这里讨论树结构数据: 有趣的是,它们呈现的每个数据模型都表示一个集合中的新条目;即使对于子元素也是如此 让我们从mongodb.org调用以下示例A:Mongodb Mongo树数据模型设计,mongodb,tree,schema,Mongodb,Tree,Schema,我的目标是设计一个可伸缩的递归树数据模型,该模型与垂直大小、水平大小、树不平衡和总体大小无关 在Mongo的网站上,他们在这里讨论树结构数据: 有趣的是,它们呈现的每个数据模型都表示一个集合中的新条目;即使对于子元素也是如此 让我们从mongodb.org调用以下示例A: db.categories.insert( { _id: "MongoDB", parent: "Databases" } ) db.categories.insert( { _id: "dbm", parent: "Dat
db.categories.insert( { _id: "MongoDB", parent: "Databases" } )
db.categories.insert( { _id: "dbm", parent: "Databases" } )
db.categories.insert( { _id: "Databases", parent: "Programming" } )
db.categories.insert( { _id: "Languages", parent: "Programming" } )
db.categories.insert( { _id: "Programming", parent: "Books" } )
db.categories.insert( { _id: "Books", parent: null } )
现在,让我们把这个例子称为B:
singleEntry =
{
_id: "Books",
children:
[
{
_id: "Programming",
parent: "Books",
children:
[
{
_id: "Languages",
parent: "Programming"
},
{
_id: "Databases",
parent: "Programming",
children:
[
{
_id: "MongoDB",
parent: "Databases"
},
{
_id: "dbm",
parent: "Databases"
}
]
}
]
}
]
}
db.categories.insert(singleEntry)
我真的很喜欢例子B;尽管双重引用父子关系是令人不安的冗余,但在实际使用中我无法找到避免这种情况的方法。此外,查询更为复杂:
db.categories.find(
{
'children.children.children._id' : 'MongoDB'
}
)
但我不介意,只要示例A中的所有内容在示例B中都是可能的
我感觉可能不是这样。我担心的其他问题包括:
关于例子A的某些东西似乎太过相关;这正是我想要摆脱的。如果我使用示例A,为什么不使用SQL呢?如果我使用示例B,我会遇到什么问题?您将遇到的一个问题是。对于示例B中的方法来说,除了非常小的数据库之外,这是一个绝对的杀手 NoSQL和MongoDB的数据建模工作原理与SQL数据库的数据建模工作原理有根本不同。下面的内容稍微简化了一点,但你可以理解 使用SQL数据库,您可以根据实体对数据进行建模,并确定它们之间的关系。在下一步中,您将尝试确定如何回答用例中出现的问题 在MongoDB数据建模中,首先确定用例中出现的问题,然后对数据进行相应建模,以最有效的方式回答问题 此外,在一些用例中,NoSQL数据库通常或MongoDB都不是理想的。然而,在SQL数据库中建模树结构通常也是一件棘手的事情。使用像Neo4J这样的树数据库可能更适合于高度结构化的树。然而,商店系统或某物的类别结构几乎可以用任何数据库构建。我会根据项目的几乎任何其他功能性和非功能性需求来选择数据库