我打算用nodejs和mongodb做一个项目。我们正在设计数据库模式,我们不确定是否需要使用不同的集合或相同的集合来存储数据。因为每个人都有自己的优点和缺点。 如果我们使用单一集合,每当调用数据库时,总集合将被加载到内存中,这会降低RAM容量。如果我们使用不同的集合然后检索数据,我们需要编写不同的查询。通过使用一个集合检索将很容易,并通过使用不同的集合应用程序将变得更快。我们很困惑是使用单个集合还是多个集合。请指导哪一个更好。
答案 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)
是的,我个人认为在数据库中拥有多个集合可以让它保持干净整洁。我唯一担心的是收藏的大小。很多开发人员都使用集合来将他们的数据库分成例如帖子,评论和用户。
对不起我的语法,我手机上没有解释