MongoDB 最适合这个一对多用例?还是关系型的?
MongoDB best for this one to many use case? Or relational instead?
我一直在学习MongoDbModel One-to-Many Relationships with Document References。使用下面的模式,我发现如果我想查询属于 oreilly
的所有记录,我将不得不实际查询存在的所有记录。
相比之下,在像 mysql 这样的关系数据库中,我会在 oreilly
上有一个主键,在记录上有一个外键。然后我只需要查询所有出版商(这将少于所有图书记录)以查找 oreilly
,而不是所有存在的图书记录(这将超过出版商)以找到属于至 oreilly
。
我没看错吗?这个用例对于关系数据库会更好吗?
{
_id: "oreilly",
name: "O'Reilly Media",
founded: 1980,
location: "CA"
}
{
_id: 123456789,
title: "MongoDB: The Definitive Guide",
author: [ "Kristina Chodorow", "Mike Dirolf" ],
published_date: ISODate("2010-09-24"),
pages: 216,
language: "English",
publisher_id: "oreilly"
}
{
_id: 234567890,
title: "50 Tips and Tricks for MongoDB Developer",
author: "Kristina Chodorow",
published_date: ISODate("2011-05-06"),
pages: 68,
language: "English",
publisher_id: "oreilly"
}
当您在 { publisher_id: 1 }
上为您的藏书创建索引时,您可以大大加快查找特定出版商的图书文档的速度。 hashed index ({ publisher_id: "hashed }
) 在大型数据集上可能更快,但只会加快对完全相等的查询,而升序索引会为您提供一些附加功能,例如按字母顺序排序或按字符串开头搜索.
顺便说一句:关系数据库中的 JOIN 并不神奇。完全相同的事情发生在内部。数据库查找第一个 table 的匹配条目,然后扫描第二个 table 以查找与第一个条目的 join-condition 匹配的条目,最好使用索引。在关系数据库中定义辅助键只不过是在这些字段上添加索引。
我一直在学习MongoDbModel One-to-Many Relationships with Document References。使用下面的模式,我发现如果我想查询属于 oreilly
的所有记录,我将不得不实际查询存在的所有记录。
相比之下,在像 mysql 这样的关系数据库中,我会在 oreilly
上有一个主键,在记录上有一个外键。然后我只需要查询所有出版商(这将少于所有图书记录)以查找 oreilly
,而不是所有存在的图书记录(这将超过出版商)以找到属于至 oreilly
。
我没看错吗?这个用例对于关系数据库会更好吗?
{
_id: "oreilly",
name: "O'Reilly Media",
founded: 1980,
location: "CA"
}
{
_id: 123456789,
title: "MongoDB: The Definitive Guide",
author: [ "Kristina Chodorow", "Mike Dirolf" ],
published_date: ISODate("2010-09-24"),
pages: 216,
language: "English",
publisher_id: "oreilly"
}
{
_id: 234567890,
title: "50 Tips and Tricks for MongoDB Developer",
author: "Kristina Chodorow",
published_date: ISODate("2011-05-06"),
pages: 68,
language: "English",
publisher_id: "oreilly"
}
当您在 { publisher_id: 1 }
上为您的藏书创建索引时,您可以大大加快查找特定出版商的图书文档的速度。 hashed index ({ publisher_id: "hashed }
) 在大型数据集上可能更快,但只会加快对完全相等的查询,而升序索引会为您提供一些附加功能,例如按字母顺序排序或按字符串开头搜索.
顺便说一句:关系数据库中的 JOIN 并不神奇。完全相同的事情发生在内部。数据库查找第一个 table 的匹配条目,然后扫描第二个 table 以查找与第一个条目的 join-condition 匹配的条目,最好使用索引。在关系数据库中定义辅助键只不过是在这些字段上添加索引。