产品 Web 应用程序的数据库 - 多租户

Database for a Product Web App - Multitenancy

多个客户在单个实例上使用了一个 Web 应用程序(具有 ASP.Net Web API 的 AngularJS 前端)。每个客户可以有任意数量的用户。一个客户的数据对其他人不可见。对于这种情况,最好的方法是什么?

1) 单数据库。在所有表上都有客户 ID 并控制数据可见性。

2) 多个数据库。在登录过程中,select 数据库。

还有其他方法吗?

这个SO answer led me to this article

我已尝试根据需要缩短和总结该文章。

单一数据库(所有客户共享数据库)

优点: 1) 具有较低的维护、设备和备用成本 2)开发难度相对较大

缺点: 1)根据应用程序,一些客户甚至可能不考虑使用共享数据库的应用程序。 2) 在发生故障时从备份中恢复客户的数据是相对困难的。 3) 在安全领域投入额外的开发工作,以确保客户永远无法访问其他客户的数据,即使发生意外错误或攻击

多个数据库(每个客户单独的数据库)

优点: 1) 可以轻松扩展应用程序的数据模型(稍后讨论)以满足客户的个性化需求 2) 在发生故障时从备份中恢复客户数据是一个相对简单的过程

缺点: 1) 导致维护设备和备份客户数据的成本更高 2) 给定数据库服务器上可容纳的客户数量受服务器可支持的数据库数量的限制。

选择方法

经济考虑:初始开发成本高,但持续运营成本往往较低。

安全注意事项:潜在客户对安全有很高的期望,您的服务水平协议 (SLA) 需要提供所需的条款

客户考虑因素:您希望服务的客户的数量、性质和需求 - 所有这些都需要考虑。

监管注意事项:公司通常受到可能影响其安全和记录存储需求的监管法律的约束

技能集注意事项:设计单实例、多租户架构仍然是一项非常新的技能,因此很难获得主题专业知识。