首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >多租户PHP SaaS -为每个客户端单独的数据库,或将它们分组?

多租户PHP SaaS -为每个客户端单独的数据库,或将它们分组?
EN

Stack Overflow用户
提问于 2012-11-11 03:33:31
回答 3查看 12.4K关注 0票数 26

你必须容忍我在这里可能会把一些术语弄错,因为我甚至没有意识到这属于整个“多租户”“软件即服务”类别,但在这里它确实如此。

我已经为一个客户开发了一个会员系统(用PHP)。我们现在正在考虑将其作为完全托管的解决方案提供给我们的其他客户,提供一个子域(甚至是他们自己的域)。

就数据存储而言,我似乎拥有的选项有:

选项1 -将所有内容存储在一个大型数据库中,在需要它的表上有一个'client_id‘字段(大约有30个表可以应用它),并有一个'clients’表来存储它们的主要设置、详细信息等以及要映射到它们的域。然后,这只是设置一个全局可访问的变量,其中包含它们各自的客户端id -显然,我必须修改每个查询来检查client_id列。

选项2 -有一个包含“共享引用”表和“客户端”表的主表。然后有其他数据库的“块”,每个数据库包含10个客户端。客户端将获得自己的数据库表,并以客户端ID为前缀。这增加了一点安全性,以防止在出现真正的错误时看到其他客户端数据。

选项3 -与选项2完全相同,不同之处在于您为每个客户端都有一个数据库,将它们与其他客户端完全隔离,并且理论上提供了更多的保护,即使1个客户端的表被黑客攻击或以其他方式损坏,也不会影响其他任何人。最大的缺点是,在部署新的客户端时,需要设置整个数据库、用户和密码等。这是否也可能导致大量的开销,或者这是否与每个人都在一个数据库中的情况基本相同?

还有几点-其中一些客户端将拥有5000+ ' customers‘以及这些客户的所有详细信息-这就是为什么选项1可能有点问题-如果我有100个客户端,这可能相当于1个表中超过50万行。

在客户数据(和支付信息)安全是关键的情况下,选项3是最好的方法,我的想法是正确的吗?从我收到的建议来看,有一些人说选择1是因为“它更容易”,但我真的不这么认为。我认为这是一个潜在的瓶颈,因为如果他们有自己的数据库,我肯定可以更容易地移动客户。

(仅供参考,系统是基于PHP的MySQL)

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13325383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档