database - CakePhp Multi-Tenancy - 单个数据库与多个数据库

标签 database cakephp saas

我们正在 CakePHP 中开发一个将被多家公司使用的应用程序。我们希望确保应用程序的性能、可扩展性、代码可管理性和安全性。

我们当前的测试版为每个客户创建了一个新的数据库。当一家新公司加入该站点时,我们运行一个 SQL 脚本来创建一个空白数据库。 这样做有以下优点: - 更好的安全性(公司用户彼此分开) - 我们可以通过子域设置数据库(即:monkey.site.com,使用site_monkey数据库) - 单一代码库。 - SQL 查询的性能通常非常好,因为数据分布在较小的数据库中。

不幸的是,这有很多缺点 - 可管理性:必须在所有现有数据库中对数据库进行更改 - 创建 SQL 脚本的方法很笨重,而且没有我们想要的那么可靠 - 我们希望允许用户从主页(例如 www.site.com)登录,但我们目前不能这样做,因为子域决定了要使用的数据库。 - 我们想要一个中心位置来保存指标/客户使用情况。

因此,对于我们的应用程序的数据库结构的最佳解决方案是什么,我们感到很纠结/犹豫不决。

目前我们看到三个选项: - 保持多数据库设计 - 将所有公司合并到一个数据库中,并通过“companyId”标识每个公司 - 某种拆分模型,其中某些表位于“核心数据库”中,而其他表位于客户特定的数据库中。

你们能否就您认为我们应该如何最好地做到这一点提供一些宝贵的建议? 任何反馈/信息将不胜感激。

非常感谢,

k伪

最佳答案

只是我的建议:

我认为你最好将客户相关数据保存在不同的数据库中,并将身份验证相关数据保存在一个公共(public)数据库中所以当用户登录时,你应该有一个包含该用户所属域的条目,并重定向到该域并访问相应的数据库和数据。

再次关注数据库的更改,您需要分别在每个数据库中实现更改。我认为这也有一些好处。有些客户可能会根据他们的流程要求进行少量更改。因此,如果您为不同的客户保留单独的数据库,这可以很容易地进行管理。

关于database - CakePhp Multi-Tenancy - 单个数据库与多个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10429256/

相关文章:

php - CakePHP 使用 JOIN 查找方法

design-patterns - SaaS 代理模式

SQL Server 过程/函数将表复制到另一个数据库

database - 图数据库 : why we need it?

javascript - CakePHP删除确认

php - Cakephp 3.0 表单验证

mysql - 相当于从多个文件读取数据的快速数据库是什么?

java - 这是允许多个用户同时访问数据库的好方法吗?

mysql - Spring Hiberbate SaaS 重新加载数据库信息

azure - 如何提供 C++ Windows 软件即服务