多租户SaaS的PHP - 独立数据库的每个客户端,或将它们分组?(Multi-tenant PH

2019-07-03 17:18发布

你必须在这里和我一起承担可能得到一些术语稍有不当,因为我根本不知道这掉进了整个“多租户”“软件即服务”类的,但是在这里。

我已经开发了客户端的会员制(在PHP)。 现在我们正在提供它作为我们的其它客户的完全托管解决方案,提供了一个子域(甚至自己的域名)。

我似乎选项有在桌子上,尽可能的数据存储云是:

选项1 -存储所有信息1名大的数据库,并且对需要它的表一“的client_id”字段(将有大约30桌,它将应用到),并有一个“客户”表中存储的主要设置,细节等,并映射到他们的域。 这就只是设置一个包含其个人客户端ID的全局访问的变量 - 我明明已经修改每一个查询来检查CLIENT_ID列。

选项2 -有一个主表与所述的共享参考'表,和“客户”表。 然后有其他数据库,其中每一个都包含“块”,说10个客户端。 客户端会得到自己的数据库表,与他们的客户ID前缀。 这增加了安全性,以防止看到其他客户的数据,一旦发生真的错了一点点。

选择3 -完全一样的选项2,除非你对每一位客户1个数据库,完全从其他客户隔离开来,并从理论上提供更多的保护,如果1个客户的表被黑客攻击或其他损坏,也不会影响其他人。 最大的缺点是,部署新的客户端时,整个数据库,用户名和密码需要设置,等等。难道这也可能导致开销相当数量的,或者这将是几乎一样的,如果你在一个有大家数据库?

有几个点,以及 - 一些客户将有5000多个“客户”与这些客户的所有细节一起 - 这就是为什么选项1可能是有点问题 - 如果我有100个客户,这可能等于50多万行1个表。

我在想方案3是在一个情况下客户数据(和支付信息)的安全性是关键,最好的方式去纠正。 从建议我有,有几个人表示,与选项1去,因为“它更容易”,但是我真的不这么认为。 我认为这是一个潜在的瓶颈的路线,这是肯定的,我可以围绕容易得多,如果他们有自己的数据库移动客户端。

(FYI该系统是基于与MySQL PHP)

Answer 1:

方案3是最具可扩展性。 虽然起初,它可能看起来比较复杂,它可以完全自动化,将节省您对未来头痛。 您也可以通过让多个服务器上以提高性能数据库客户规模更有效。



Answer 2:

我同意奥兹 - 我这样做的一个在线数据库产品。 我们有一个主数据库,基本上有一个荣耀的用户表。 每个客户都有自己的数据库。 什么是伟大的关于这是我能轻而易举地[MySQL的]从服务器A一个客户数据库移动到服务器B,并可能在紧要关头的命令行工具这样做。 也做得大表的维护,删除/添加索引才能真正搞砸了你的应用程序,特别是如果说,添加索引锁定表[mysql的。 它影响着每一个人。 随着,据推测,较小的数据库,你更能抗这一点,有更多的选择,当你需要推出架构水平的变化。 我只是想的灵活性。



Answer 3:

当很多年前我设计Innomatic ,开源平台,在PHP构建SaaS应用程序,我选择了第三个选项: 多租户码单租户数据库

根据我的经验,这是最可扩展的选项,但它也需要一组脚本传播更新代码,DB计划时的变化,使应用程序租客等

所以,我的很多努力建设一个基于组件的,可扩展的引擎完全自动化所有这些任务,并最大限度地降低系统管理的东西去了。 我强烈建议建立这样的架构,如果你想采取第三种选择。



文章来源: Multi-tenant PHP SaaS - Separate DB's for each client, or group them?