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 匹配的条目,最好使用索引。在关系数据库中定义辅助键只不过是在这些字段上添加索引。