【发布时间】: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