【问题标题】:MongoDB data modelling: any drawbacks in using lots of databases?MongoDB 数据建模:使用大量数据库有什么缺点吗?
【发布时间】:2013-02-19 16:51:51
【问题描述】:

我最近搬到了 Web 应用程序后端的 MongoDB 部分,Web 应用程序本身就是一个验证工具,工作流程如下:

  • 用户上传一个文件(通常有几十万行)
  • 验证器检查它是否输出了大量消息(每行可能不止一条)
  • ...最后提供一些统计数据

我对我的应用程序进行了建模,以便每个用户都有自己的数据库,其中包含:

  • 文件(通过 GridFS 保存)
  • 包含消息的集合(在某些情况下可能超过一百万行)
  • 包含统计信息的集合

我们有几百个用户,所以 MongoDB 最终会有几百个数据库

当然,我可以将所有数据保存在同一个数据库中,使用命名空间将来自不同用户的数据分开。但是,我觉得在连接 URI 中发送数据库很方便,而且我发现发出“删除数据库”语句来清除用户更直观,而不是在大型数据库中搜索和删除其数据。

我对 MongoDB 很陌生,所以我的问题是:在同一个 MongoDB 实例中拥有多个数据库有什么缺点吗?或者我应该对这个问题给予什么特别的考虑?

【问题讨论】:

  • AFAIK,数据库的最大数量设置为 24000 - 但可以提高。从这个数字来看,几百个 DB 应该不是问题。
  • @ppeterka - 我可能错了,但我相信这个数字是每个对象的最大命名空间数,因此拥有单独的数据库实际上使我能够存储比拥有单个数据库更多的数据每个用户有 3 个命名空间(userA.messages,userA.statistics` 等)......但也许我误解了相关文档?
  • @ppeterka 该限制适用于每个数据库 ns 文件,MongoDB 对其数据库数量没有明确限制。
  • 我想到了一个:文件数和打开文件的数量,所有操作系统都倾向于对您可以打开的文件数量有某种限制,一个数据库上有很多数据库服务器可能会达到该限制,然后您会看到问题。我能想到的其他问题通过您将数据库作为完全独立的实体使用而得到缓解。
  • 这种方法的一个缺点可能不会影响到您,那就是对多个用户运行统计数据会更加困难,您需要从每个用户那里提取数据,然后以某种方式将其组合起来.

标签: mongodb database-design data-modeling


【解决方案1】:

我对 MongoDB 并不特别熟悉。通常,打开与数据库的连接是一个相对较慢的操作,并且会占用系统资源。我不能说这对你的情况是否足够重要。

为每个用户使用不同的数据库会使执行访问多个用户数据的查询变得困难。也许你不需要这样做。

不过,我认为通常只在每条记录中放置一个用户 ID 而不是创建一个单独的数据库会简单得多。单独的数据库有什么好处?好的,删除用户意味着说“删除数据库”。但是从单个数据库中删除用户应该意味着说“从 user=? 的 tableX 中删除;从 user=? 的 tableY 中删除”等等,无论您拥有多少相关表格。我无法想象它是数百,对吧?大概六行代码左右?

【讨论】:

  • 嗨,杰。我希望像 Mongo 这样缺少模式的数据存储在打开数据库方面比关系数据库更有效......但也许我在这个方面完全错了?关于您的第二段:在我的场景中,无法混合来自不同用户的数据是一个优势。除此之外,由于 MongoDB URI 的工作方式 [host:port/dbname],每个用户拥有一个 DB 的优点之一是我可以在 URI 中传递信息(对于进程间通信特别方便)。但是,是的:如果优势是压倒性的,我一开始就懒得问了! :)
  • 来自多个用户的 RE 数据:我在想,在某些时候您可能想要运行查询来回答诸如“我们从所有用户上传的文件的总数是多少?”之类的问题。 “最常见的验证消息是什么?我们是否有从未使用过的验证消息?” “哪些用户在过去一周内上传了文件?”等等。也许你不关心这些事情,而且永远不会关心,但如果可能的话,使用单个数据库会容易得多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-05
  • 2019-09-15
  • 1970-01-01
  • 2012-08-29
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
相关资源
最近更新 更多