首页
学习
活动
专区
工具
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

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-11 05:26:07

选项3是可伸缩性最强的。虽然一开始它可能看起来更复杂,但它可以完全自动化,并在未来省去你的头疼。您还可以通过将客户端数据库放在多个服务器上来更有效地进行扩展,以提高性能。

票数 18
EN

Stack Overflow用户

发布于 2013-04-04 00:41:57

我同意Ozzy的观点--我这样做是为了一个在线数据库产品。我们有一个主数据库,基本上有一个美化的用户表。每个客户都有自己的数据库。它的伟大之处在于,我可以轻松地将一个客户数据库从服务器A移动到服务器B,mysql还可以在必要时使用命令行工具做到这一点。此外,在大型表上进行维护、删除/添加索引都会导致应用程序崩溃,特别是在添加索引锁定mysql表的情况下。它会影响到每个人。对于较小的数据库,您可能对此更有免疫力,并且在需要推出模式级别更改时有更多的选择。我只是喜欢它的灵活性。

票数 2
EN

Stack Overflow用户

发布于 2015-05-21 01:41:33

多年前,当我设计了一个用PHP语言构建SaaS应用程序的平台时,我选择了第三种选择:多租户代码单租户数据库

在我的经验中,这是最具伸缩性的选项,但它还需要一组脚本来在更新代码、DB方案、启用应用程序到租户等时传播更改。

因此,我花了很多精力来构建一个基于组件的可扩展引擎,以完全自动化所有这些任务,并最大限度地减少系统管理工作。如果您想采用第三种选择,我强烈建议您构建这样的架构。

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

https://stackoverflow.com/questions/13325383

复制
相关文章

相似问题

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