gpt4 book ai didi

node.js - 用于 SaaS 的 MongoDB 中的多个数据库

转载 作者:IT老高 更新时间:2023-10-28 12:29:12 25 4
gpt4 key购买 nike

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

我的想法是为每个客户创建一个新数据库和一个保存全局信息的“主”数据库。例如,应用程序只有一个登录页面,所以我想将所有用户/密码信息存储在“主”数据库中,但所有用户的个人资料信息都存储在他们所属的客户数据库中。我觉得这将是一个很好的设计,因为它可以完全隔离每个客户的数据,并且可以轻松地单独备份/恢复一个客户。

我担心从 node.js 连接到多个数据库的性能影响。有谁知道这将如何影响该应用程序,或者对总体架构有什么看法?

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

最佳答案

这不是一个简单的答案,因为很大程度上取决于您的应用架构、使用和查询模式、客户端之间的分布(即:客户端之间的使用水平是否大致相同,或者您是否有 10% 的客户端使用 90 % 的资源),您可以在代码与操作管理以及一大堆其他问题上花费多少。以下是一些需要考虑的事项:

1) 拥有一个数据库将使您的操作管理更容易,需要更少的计算资源,并且可以让您更好地横向扩展,但是对访问层进行编码会更加困难,并且您确实必须很好地构建您的安全层,以便显而易见原因。您还将在客户端/网络服务器端消耗更少的资源,因为连接会更少。

在处理一个单体数据库时,有两种流行的架构选项:

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

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

3) 您可以提供两个选项的组合 - 为高端用户(支付更多费用的帐户)提供专用数据库,然后为低端客户和测试/免费增值帐户提供按集合分隔数据的共享数据库。

请注意,如果您确实采用多数据库路线,则应查看 --smallfiles 启动选项。这将帮助您解决有很多人设置“测试帐户”但他们不经常使用它们的情况。

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

至于审计影响,取决于您需要遵守什么级别的审计合规性。如果您期望财富 1000 强的客户,您的合规要求将会高得多(而且成本更高——想想 10 美元到 100 美元的数千美元),如果您的客户是可能从未听说过 SAS70 的初创公司等。答案还取决于您存储的数据类型 - 是用户财务数据,还是只是用户论坛?基本上,如果对 future 需要通过大公司的安全审计有任何顾虑,那就别想共享数据库的方法了。

关于node.js - 用于 SaaS 的 MongoDB 中的多个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12361854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com