MongoDB for SaaS中的多个数据库

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

我的想法是为每个客户创build一个新的数据库和一个拥有全球信息的“主”数据库。 例如,应用程序会有一个单一login页面,所以我想将所有用户/密码信息存储在“主”数据库中,但是所有用户的configuration文件信息都存储在它们所属的客户数据库中。 我觉得这是一个很好的devise,因为它可以完全隔离每个客户的数据,并且可以很容易地单独备份/恢复客户。

我关心的是从node.js连接到多个数据库的性能影响。 有没有人知道这将如何影响该应用程序,或一般的架构的任何意见?

奖金问题:您是否知道在SaaS解决scheme中做出相反的审计意义,并将所有客户的数据存储在单个数据库中,并与客户分开?

不是一个简单的答案,因为很大程度上取决于您的应用程序体系结构,使用情况和查询模式,客户端之间的分配(即:客户端的使用率水平大致相同,还是10%的客户使用了90%资源),可以花多less钱在代码和操作pipe理以及其他一系列问题上。 这里有一些要考虑的事情:

1)拥有一个数据库将使您的操作pipe理更加简单,所需的计算资源更less,并且可能允许您更好地扩展,但对访问层进行编码将更加困难,而且由于显而易见的原因,您确实必须构build安全层。 您还将在客户端/ Web服务器端消耗更less的资源,因为会有更less的连接。

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

  • 您可以将所有类似数据放在一个集合中(即:所有帐户的configuration文件进入同一个集合),并为每个文档分配一个密钥,以确定哪些数据属于哪个帐户。 这可以为您提供最好的select(取决于您的架构体系结构),以最less的计算资源进行扩展。
  • 另一个select是按集合分隔客户端数据 – 每个客户端在数据库中都有自己的集合,用clientid前缀(即:clientid_userprofiles)标识。

2)每个客户端的数据库选项会给你更多的操作pipe理头痛和成本更多,因为你将需要更多的计算资源。 另一方面,编码成本应该更低,因为代码会更容易编写。 它还可以让你更好地分配你的重量和轻量级用户之间的资源。 例如,您可以将大量使用客户端转移到function更强大的机器上,并根据每个客户提供分片。

3)您可以提供两个选项的组合 – 专门为高端用户(支付更多的账户)提供数据库,然后提供一个共享数据库,其中包含为低端客户和testing/免费账户收集的数据。

请注意,如果您确实执行了许多数据库路由,则应该查看–smallfiles启动选项。 这将有助于你有很多人设置“testing账户”,但他们没有做太多的情况。

无论如何,希望上述给你的思想。 在https://groups.google.com/forum/?fromgroups#!searchin/mongodb-user/multitenant上进行search,因为在Mongo论坛上有关于这个特定问题的一些讨论。

至于审计方面的影响,取决于您需要遵守的审计合规程度。 如果您预计财富1000的客户,您的合规要求将远高于(如果您的客户是可能从来没有听说过SAS70的创业公司,那么您的合规要求将会更高(而且成本更高 – 想想几十美元到几千美元)。答案还取决于你正在存储什么types的数据 – 是用户财务数据,还是只是用户论坛? 基本上,如果将来需要通过大型公司的安全审计,那么千万不要想到共享数据库的方法。