【问题标题】:is it good to use different collections in a database in mongodb在mongodb的数据库中使用不同的集合好吗
【发布时间】:2017-03-20 23:30:29
【问题描述】:

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

【问题讨论】:

  • 你的意思是在一些更大的文档中使用内联文档还是将这些内部文档放入单独的集合中?

标签: node.js mongodb


【解决方案1】:

通常您对不同的事物使用不同的集合。例如,当您在系统中有用户和文章时,您通常为用户创建一个“用户”集合,为文章创建一个“文章”集合。您可以创建一个名为“对象”或类似的集合并将所有内容放在那里,但这意味着您必须添加一些类型字段并将其用于搜索和存储数据。您可以在数据库中使用单个集合,但这会使使用更加复杂。当然,它可以让您一次加载整个集合,但无论它是否与应用程序的性能相关,都必须对其进行分析和测试,以便对您的特定用例产生性能影响。

【讨论】:

    【解决方案2】:

    通常,开发人员为不同的事物创建不同的集合。与帖子管理一样,人们创建“帖子”集合并将帖子保存在帖子集合中,对用户和所有人都是如此。

    为不同的目的使用不同的集合是一种很好的做法。

    MongoDB 擅长水平扩展。它可以跨动态集群对集合进行分片,以生成快速、可查询的数据集合。

    因此,拥有较小的集合大小并不是真正的专家,我不确定这个理论来自哪里,它不在 SQL 中,也不在 MongoDB 中。分片的性能,如果做得好,应该与查询单个小数据集合的性能相关(开销很小)。如果不是,那么您的分片设置错误。

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

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

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

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

    因此,如果您的用户超出命名空间限制,您将无法正常处理它。此外,随着用户群的增长,它的性能也不会很高。

    更新

    对于使用WiredTiger存储引擎的Mongodb 3.0或以上版本,不再是限制。

    【讨论】:

      【解决方案3】:

      是的,我个人认为在数据库中有多个集合可以保持它的整洁。我唯一担心的是收藏的大小。许多开发人员使用集合将他们的数据库分割成帖子、cmets、用户等。

      对不起我的语法和缺乏解释我在我的手机上

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-04-18
        • 1970-01-01
        • 2018-11-27
        • 2020-08-08
        • 1970-01-01
        • 2017-03-14
        • 1970-01-01
        相关资源
        最近更新 更多