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

6
我想使用mongodb和lithium构建一个webservice。哪种做法更好呢:
  • 将所有客户的数据存储在一个集合中(例如,多个客户的所有交易文档都在一个集合transactions中)

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

  • 每个客户一个数据库

该系统必须具备可扩展性和易于部署的特点。
2个回答

4
为了给出具体的建议,我们需要更多地了解您想要实现的目标。
然而,我会排除选项2(多个集合),因为我并没有看到这种方法的任何优点:您必须在运行时确定集合名称,编写查询有些棘手,并且您可以拥有的集合数量有一个硬性限制(大约1.5M个集合,使用2GB的命名空间文件)。
选项1可以帮助隔离客户端,并可能提高安全性,但仍存在选择数据库时编程错误的风险。不过,隔离该代码很容易。
这两个选项都有一个缺点,即您无法跨所有集合进行查询。但是,您始终希望访问一些基本上在所有客户端之间共享的集合(例如日志、统计信息等),因此您还需要将这些内容分离出来。
这就是为什么我通常会选择选项1的原因。

1

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

系统必须具有可扩展性,并且必须易于部署

你的数据库将具有可扩展性,因为你正在使用被设计为可扩展的mongodb。而且你可以轻松部署数据库,因为它是无模式的。一般来说,你可能需要简单地将一些数据从一个服务器复制到另一个服务器。有很多方法可以做到这一点:复制集合,数据导入/导出复制数据库


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接