我想使用mongodb和锂构建一个web服务。更好的是:
将所有客户的数据存储在一个集合中(例如,一个集合事务中多个客户的所有交易文档)
创建多个集合,例如transactions_client1,transactions_client2等。
每个客户一个数据库
系统必须可扩展且必须易于部署
答案 0 :(得分:2)
为了提供方向,人们必须更多地了解你想要实现的目标。
但是,我排除了选项2(多个集合),因为我没有看到这种方法的任何优点:你必须在运行时确定集合名称,写起来有点棘手您的查询以及您可以拥有的集合数量有严格限制(大约1.5M集合,2GB namespace file)
选项1可以帮助隔离客户端并可能提高安全性,但在选择数据库时仍存在编程错误的风险。但是,隔离该代码很容易。
这两个选项都有缺点,您无法在所有集合中进行查询。但是,您总是希望能够访问一些基本上在所有客户端共享的集合(例如日志,统计信息等),因此您需要额外负担将这些集合分开。
这就是我通常选择选项1的原因。
答案 1 :(得分:1)
我建议从一个db和一个集合开始。它通常更简单地管理一个数据库。将来,如果您需要创建单独的数据库(以加速某些客户端),您可以dump此客户端的数据并将其放入单独的数据库服务器(或仅在单独的集合中)。在设计应用程序的体系结构时,请记住这个功能。所以,我的意见是选项1 。从另一个角度来看,您可以通过分片和复制来扩展一个集合。
系统必须可扩展且必须易于部署
您的数据库可以扩展,因为您使用的mongodb是专为扩展而设计的。您可以轻松部署数据库,因为它是无模式的。通常,您可能需要将一些数据从一个服务器简单地复制到另一个服务器。有很多方法可以做到:copy collection,数据import/export,copy database。