这里只是一个快速的最佳实践问题。我怎么知道何时应该在MongoDB中创建新的集合?
我有一个查询电视节目数据的应用。每个节目是否都有自己的集合,或者它们是否应该存储在一个集合中,并在同一文档中包含相关数据。请解释您选择所采用方法的原因。 (我仍然是MongoDB的新手。我已经习惯了MySql。)
答案 0 :(得分:12)
MongoDB不支持跨集合的连接有几个原因,我不会在这里介绍所有这些。但是我们不需要连接的主要原因是因为我们可以将相关数据嵌入到单个分层JSON文档中。在我们存储数据之前,我们可以将其视为预加入数据。在关系数据库世界中,这相当于对我们的数据进行非规范化。在MongoDB中,这是我们可以做的最常规的事情。
尽管MongoDB不支持连接,但我们仍然可以将相关数据存储在多个集合中,并且仍然可以实现所有这些,尽管可以实现。这要求我们存储对另一个集合中一个集合的密钥的引用。它听起来与关系数据库类似,但MongoDB并没有像大多数关系数据库那样对我们强制执行任何关键约束。执行关键约束完全取决于我们。我们已经足够管理了,对吧?
以这种方式访问所有相关数据意味着我们需要为存储数据的每个集合至少进行一次查询。由我们每个人决定我们是否能够忍受这一点。
cities
集合。我们的应用程序如何访问和使用数据。这需要我们思考? UHG!什么数据一起使用?哪些数据主要用作只读?经常写什么数据?让您的应用程序数据访问模式驱动您的架构,而不是相反。
答案 1 :(得分:0)
你所描述的范围对于“一个集合”来说绝对不是太多。事实上,能够将所有内容存储在一个地方是MongoDB集合的重点。
在大多数情况下,您不希望像在SQL中那样考虑跨组合表进行查询。与SQL不同,MongoDB允许您避免考虑“JOIN” - 实际上MongoDB甚至不支持它们本地。
请参阅此幻灯片: http://www.slideshare.net/mongodb/migrating-from-rdbms-to-mongodb?related=1
具体看一下前面的幻灯片24。请注意MongoDB架构如何替换SQL和RDBMS习惯的多表架构。
在MongoDB中,单个文档包含有关记录的所有信息。所有记录都存储在一个集合中。