当前位置: 首页 > 面试题库 >

多租户PHP SaaS-每个客户端使用单独的数据库,还是对它们进行分组?

归和惬
2023-03-14
问题内容

您可能需要在这里与我联系,以免使某些术语有些错误,因为我什至没有意识到它属于整个“多租户”“软件即服务”类别,但是在这里确实如此。

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

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

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

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

选项3-
与选项2完全相同,不同之处在于每个客户端都有1个数据库,将它们与其他客户端完全隔离,并且从理论上讲,它提供了更多的保护,如果1个客户端的表被黑客入侵或以其他方式损坏,则不会影响其他任何人。最大的缺点是,在部署新客户端时,需要设置整个数据库,用户和密码等。这是否可能还会导致相当多的开销,或者就像您将每个人都放在一个桌面中一样数据库?

还有几点-这些客户中的一些将拥有5000+个“客户”以及这些客户的所有详细信息-这就是为什么选项1可能会有点问题的原因-
如果我有100个客户,那可能等于1个表中超过500万行。

在客户数据(和付款信息)的安全性是关键的情况下,我认为选项3将是最好的方法,我是否正确。根据我的建议,有些人说选择1是因为“更容易”,但是我真的不这么认为。我认为这是一个潜在的瓶颈,因为如果客户拥有自己的数据库,无疑可以使客户迁移变得容易得多。

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


问题答案:

选项3具有最大的可扩展性。虽然乍一看似乎比较复杂,但是它可以完全自动化,并且可以免除您对未来的麻烦。您还可以通过将客户端数据库放在多个服务器上来提高性能,从而更有效地扩展规模。



 类似资料:
  • 我们正在开发一个多租户应用程序。在体系结构方面,我们为业务逻辑设计了共享中间层,为数据持久性设计了每个租户一个数据库。也就是说,业务层将与每个租户的数据库服务器建立一组连接(连接池)。这意味着应用程序为每个租户维护单独的连接池。如果我们预计约有5000个租户,那么这个解决方案需要高资源利用率(每个租户的应用服务器和数据库服务器之间的连接),这会导致性能问题。 我们已经通过保持公共连接池解决了这个问

  • 我有一个支持多租户的Spring Boot应用程序(请参阅https://medium.com/swlh/multi-tenancy-implementation-using-spring-boot-hibernate-6a8e3ecb251a)每个数据库都有一堆jpa实体。不过,我有一个实体表租户,它应该只存在于默认数据库中,并存储关于各种租户的信息(例如数据库名称)。如何在租户/数据库设置中修

  • 问题内容: 我正在使用RMI编写密码系统的原型。 我有一个问题,因为当我启动两个客户端时,它们从OneTimePad类的服务器中的一个对象获得了响应。 因此客户端A获取为客户端b保留的密钥,由于特定的算法,这种情况不会发生。 服务器仅向客户端发送E和N变量(例如在RSA中),因此我无法序列化OneTimePad对象并通过网络发送它(因为它将具有所有密钥)。 如何为每个客户端创建OneTimePad

  • 我正在使用Netty4创建一个需要为多个客户端连接提供服务的服务器。ServerBootstrap由父线程组和工作线程组构成。根据ServerBootStrap上的文档。group()方法it “为父(接收器)和子(客户端)设置EventLoopGroup。这些EventLoopGroup用于处理SocketChannel和Channel的所有事件和IO。” 据我所知,ParentExecutor

  • 你好,我有一个与SAAS模型和多租户相关的问题。 据我所知,SAAS多租户应用程序意味着所有客户机的通用功能,以及一些用户界面和功能的定制。 如果我需要为一些客户进行额外的客户特定定制,我如何实现它? 我了解SalesForce的方法 至于答案,我很高兴看到你们在数据库级别的定制,后端架构,或者这个主题的任何链接方面都有经验。

  • 我正在构建一个应用程序,它应该服务于多个租户,并存储他们非常敏感的数据。每个租户都有多个用户。我的后端堆栈是用spring boot Hibernate5构建的。我希望hibernate处理多租户问题,所以我有两个问题要问专家: 如果我使用的是每租户模式范式,如何在登录时将用户名与租户关联?每个租户都有自己的用户表,那么我如何知道用户名属于哪个租户呢? 在注册时,什么是正确的方法来动态创建新模式?