(我不确定这是否是发布此问题的最佳地点。如果不是,请将我重定向到适当的堆栈交换站点。)
我希望为多个客户端部署 Web 应用程序。这个想法是每个客户端只能访问他或她自己的数据。假设客户端是应用程序安装的所有者。每个安装可以有多个用户。所有安装都将在我自己的主机上,这样我就可以更好地控制代码和业务模型(它是一种 SaaS 的东西)。
我正在寻找执行此类部署的技术选项。
[选项 1] - 共享单一数据库
这样做的简单选择是:
- 更改数据库以使每个相关表知道其“所有者 ID”。
- 更改所有 SQL 查询,以便每个用户只会获取与其“所有者 ID”相关的数据(我不要求一个用户对多个客户端/安装是通用的)。
但是,此解决方案有一些缺点:
- 需要更改大部分 SQL 代码;
- 可能会对性能产生一些影响,因为数据库将包含更多数据(所有安装的数据)。
- 在同一个数据库中混合不同客户端的数据可能会导致一些问题(如果存在错误,则更容易让某人最终访问其他人的数据);
因此,我更喜欢将数据隔离的替代方案。
[选项 2] - 多个数据库
我正在考虑的一种选择是:
- 对于每次安装,从托管公司购买一个数据库
- 想出一个配置方案,允许将每个安装与应该执行连接的数据库相关联。
- 例如,如果用户访问http://very-nice-app.com/client-3/,代码知道它必须连接到 database-name-for-client-3。
这解决了数据泄漏的潜在问题,但需要我维护多个数据库(如果数据库表发生变化,则必须跨多个安装来完成)。这可能可以以某种方式自动化。
[问题]
什么是更好的方法?有没有比我提到的更好的选择?
在此先感谢您的帮助。
[附加信息]
- 数据库引擎可能是 MySQL。
- 这是一家初创公司,所以我们正在尝试商业模式。我们不知道我们将拥有多少客户 - 一段时间内它将为零。现在我们正在寻找为少数客户(比如说最多 10 个)部署和扩展的能力。
- 此应用程序针对小型企业,数据量不应在数百万条记录中。最大的表每年(每个客户)应该有大约 10.000 条记录。该值基于与我们一起制作原型的公司(这是一家从事 x 业务领域的中型公司)。