在mongodb中使用数据库中的不同集合是否合适?

时间:2017-03-20 12:20:40

标签: node.js mongodb

我打算用nodejs和mongodb做一个项目。我们正在设计数据库模式,我们不确定是否需要使用不同的集合或相同的集合来存储数据。因为每个人都有自己的优点和缺点。 如果我们使用单一集合,每当调用数据库时,总集合将被加载到内存中,这会降低RAM容量。如果我们使用不同的集合然后检索数据,我们需要编写不同的查询。通过使用一个集合检索将很容易,并通过使用不同的集合应用程序将变得更快。我们很困惑是使用单个集合还是多个集合。请指导哪一个更好。

3 个答案:

答案 0 :(得分:0)

通常您会针对不同的事物使用不同的集合。例如,当您在系统中拥有用户和文章时,通常会创建一个"用户"用户和"文章"文章集。您可以创建一个名为" objects"或类似的东西,把所有东西放在那里,但这意味着你将不得不添加一些类型字段,并用它来搜索和存储数据。您可以在数据库中使用单个集合,但这会使使用更加复杂。当然,它可以让您立即加载整个集合,但是它是否与您的应用程序的性能相关,这是必须进行分析和测试的,以便为您的特定用例提供性能影响。

答案 1 :(得分:0)

通常,开发人员为不同的东西创建不同的集合。与邮政管理一样,人们创造' post'收集并保存帖子集合中的帖子,并为用户和所有人保存相同的内容。

为不同的目的使用不同的集合是一个很好的实践。

MongoDB非常适合水平扩展。它可以在动态集群中对集合进行分片,以生成快速,可排队的数据集合。

所以拥有较小的集合大小并不是真正的专业人士,我不确定这个理论来自何处,它不是在SQL中而且它不在MongoDB中。如果做得好,分片的性能应该与查询单个小数据集的性能相关(具有小的开销)。如果它不是那么你设置了分片错误。

MongoDB在垂直扩展方面表现不佳,正如@Sushant所引用的那样,MongoDB的ns大小将是一个严重的限制。引用没有提到的一件事是索引大小和计数也影响ns大小,因此它描述了:

  

默认情况下,MongoDB的每个命名空间大约有24,000个   数据库。每个命名空间为628字节,.ns文件为16MB   默认值。

     

每个集合都被视为命名空间,每个索引也是如此。因此如果   每个集合都有一个索引,我们可以创建多达12,000个   集合。 --nssize参数允许您增加此限制   (见下文)。

     

请注意每个集合有一定的最小开销 - a   几KB。此外,任何索引都需要至少8KB的数据空间   b树的页面大小为8KB。如果有的话,某些操作会变慢   是很多集合,元数据被分页。

如果您的用户超出命名空间限制,那么您将无法优雅地处理它。随着用户群的增长,它的性能也不会很高。

更新

对于使用WiredTiger存储引擎的Mongodb 3.0或更高版本,它将不再是限制。

答案 2 :(得分:0)

是的,我个人认为在数据库中拥有多个集合可以让它保持干净整洁。我唯一担心的是收藏的大小。很多开发人员都使用集合来将他们的数据库分成例如帖子,评论和用户。

对不起我的语法,我手机上没有解释