MongoDB for SaaS中的多个数据库

win*_*zer 6 mongoose mongodb node.js

我正在node.js中构建一个SaaS应用程序,并希望将MongoDB用于Mongoose ODM的数据库.我需要支持数百到数千(希望)的多个客户,并且每个客户的数据之间没有交互.

我的想法是为每个客户创建一个新的数据库,以及一个拥有全局信息的"主"数据库.例如,应用程序将有一个登录页面,因此我希望将所有用户/密码信息存储在"主"数据库中,但是将所有用户的配置文件信息存储在客户所属的数据库中.我觉得这将是一个很好的设计,因为它可以完全隔离每个客户的数据,并使单独备份/恢复客户变得容易.

我关心的是从node.js连接到多个数据库对性能的影响.有谁知道这会对该应用程序产生什么影响,或者对该体系结构的任何意见?

奖励问题:您是否知道在SaaS解决方案中执行相反的操作并将所有客户的数据存储在单个数据库(使用customerid分隔)中的任何审计影响?

Ale*_*Gad 6

没有一个简单的答案,因为这主要取决于你的应用程序架构,使用和查询模式,客户端(之间的分配,即:将使用水平不相上下跨客户端,或者您有使用90%的客户中10%资源),您可以花多少钱在代码与操作管理以及其他许多问题上.这里有一些要考虑的事情:

1),具有一个数据库将使您的营运管理更轻松,需要更少的计算资源,并可以让你向外扩展更好,但编码接入层将更加困难,你真的要构建您的安全层以及出于显而易见的原因.您还将在客户端/ Web服务器端消耗更少的资源,因为连接将会少得多.

在接近一个整体数据库时,有两种流行的模式选项:

  • 您可以将所有类似的数据放在一个集合中(即:所有帐户的配置文件都放在同一个集合中),并为每个文档提供一个密钥,以识别哪些数据属于哪个帐户.这可能为您提供最佳选择(取决于您的架构架构),以便以最少的计算资源进行扩展.
  • 另一种选择是通过集合分离客户端数据 - 每个客户端将在数据库中拥有自己的集合,并使用clientid前缀(即:clientid_userprofiles)进行标识.

2)每个客户端的数据库选项将为您提供更多操作管理难题,并且因为您需要更多的计算资源而需要更多成本.另一方面,编码成本应该更低,因为代码更容易编写.它还可以让您在重度和轻度用户之间更好地分配资源.例如,您可以将大量使用客户端移动到功能更强大的计算机上,并根据每个客户提供分片.

3)你能提供的两个选项的组合 - 为高端用户的专用数据库(即支付多个账户),然后通过收集低端客户和测试/免费增值账户分离数据共享的数据库.

请注意,如果您执行了许多数据库路由,则应查看--smallfiles启动选项.这将帮助您解决许多人设置"测试帐户"但不对他们做很多事情的情况.

无论如何,希望上面的内容能让您深思.在https://groups.google.com/forum/?fromgroups#!searchin/mongodb-user/multitenant上进行搜索,因为Mongo论坛就此问题进行了多次讨论.

至于审计影响,取决于您需要遵守的审计合规性级别.如果您期望财富1000的客户,您的合规性要求将远远高于(并且成本更高 - 想想10美元到100美元的数千美元),而不是您的客户是可能从未听说过SAS70的初创公司等.答案还取决于您存储的数据类型 - 用户财务数据,还是仅用户论坛?基本上,如果对将来需要通过大型公司的安全审计存在任何疑虑,甚至不要考虑共享数据库方法.