我正在node.js中构建一个SaaS应用程序,并希望将MongoDB用于Mongoose ODM的数据库。我需要支持数百到数千(希望)的多个客户,并且每个客户的数据之间没有交互。
我的想法是为每个客户和一个拥有全球信息的“主”数据库创建一个新的数据库。例如,应用程序将有一个登录页面,因此我希望将所有用户/密码信息存储在“主”数据库中,但是将所有用户的配置文件信息存储在客户所属的数据库中。我觉得这将是一个很好的设计,因为它可以完全隔离每个客户的数据,并使您可以轻松地单独备份/恢复客户。
我关心的是从node.js连接到多个数据库对性能的影响。有谁知道这会对该应用程序产生什么影响,或者对该体系结构的任何意见?
奖金问题:您是否知道在SaaS解决方案中执行相反的操作以及将所有客户的数据存储在单个数据库(使用customerid分隔)中的任何审计影响?
答案 0 :(得分:5)
不是一个简单的答案,因为很大程度上取决于您的应用程序架构,使用情况和查询模式,客户端之间的分配(即:客户端的使用级别大致相同,或者您有10%的客户端使用90资源的百分比),您可以花费多少代码与操作管理以及其他一系列问题。以下是一些需要考虑的事项:
1)拥有一个数据库将使您的操作管理变得更容易,需要更少的计算资源,并且可以让您更好地扩展,但是对访问层进行编码会更加困难,而且您必须很好地构建您的安全层原因。您还将在客户端/ Web服务器端消耗更少的资源,因为连接将会少得多。
在接近一个整体数据库时,有两种流行的架构选项:
2)每个客户端的数据库选项将为您提供更多操作管理难题,并且因为您需要更多的计算资源而需要更多成本。另一方面,编码成本应该更低,因为代码更容易编写。它还可以让您在重度和轻度用户之间更好地分配资源。例如,您可以将大量使用客户端移动到功能更强大的计算机上,并根据每个客户提供分片。
3)你可以提供两个选项的组合 - 高端用户的专用数据库(支付更多的帐户),然后是一个共享数据库,数据由低端客户端和测试/免费增值帐户的集合分隔。请注意,如果您执行了许多数据库路由,则应查看--smallfiles启动选项。这将帮助您解决许多人设置“测试帐户”但不会对他们做很多事情的情况。
无论如何,希望上面的内容能让你深思。在https://groups.google.com/forum/?fromgroups#!searchin/mongodb-user/multitenant上进行搜索,因为Mongo论坛就此问题进行了多次讨论。
至于审计影响,取决于您需要遵守的审计合规性级别。如果你期望财富1000的客户,你的合规要求将远高于(并且成本更高 - 想想10美元到100美元的数千美元),而不是你的客户是可能从未听说过SAS70的初创公司等。答案还取决于您存储的数据类型 - 用户财务数据,还是仅用户论坛?基本上,如果对将来需要通过大型公司的安全审计存在任何疑虑,甚至不要考虑共享数据库方法。