Mongodb单个数据库vs每个客户端的集合与每个客户端的数据库

时间:2011-11-29 08:17:43

标签: mongodb lithium

我想使用mongodb和锂构建一个web服务。更好的是:

  • 将所有客户的数据存储在一个集合中(例如,一个集合事务中多个客户的所有交易文档)

  • 创建多个集合,例如transactions_client1,transactions_client2等。

  • 每个客户一个数据库

系统必须可扩展且必须易于部署

2 个答案:

答案 0 :(得分:2)

为了提供方向,人们必须更多地了解你想要实现的目标。

但是,我排除了选项2(多个集合),因为我没有看到这种方法的任何优点:你必须在运行时确定集合名称,写起来有点棘手您的查询以及您可以拥有的集合数量有严格限制(大约1.5M集合,2GB namespace file

选项1可以帮助隔离客户端并可能提高安全性,但在选择数据库时仍存在编程错误的风险。但是,隔离该代码很容易。

这两个选项都有缺点,您无法在所有集合中进行查询。但是,您总是希望能够访问一些基本上在所有客户端共享的集合(例如日志,统计信息等),因此您需要额外负担将这些集合分开。

这就是我通常选择选项1的原因。

答案 1 :(得分:1)

我建议从一个db和一个集合开始。它通常更简单地管理一个数据库。将来,如果您需要创建单独的数据库(以加速某些客户端),您可以dump此客户端的数据并将其放入单独的数据库服务器(或仅在单独的集合中)。在设计应用程序的体系结构时,请记住这个功能。所以,我的意见是选项1 。从另一个角度来看,您可以通过分片和复制来扩展一个集合。

  

系统必须可扩展且必须易于部署

您的数据库可以扩展,因为您使用的mongodb是专为扩展而设计的。您可以轻松部署数据库,因为它是无模式的。通常,您可能需要将一些数据从一个服务器简单地复制到另一个服务器。有很多方法可以做到:copy collection,数据import/exportcopy database