可能我错了一些术语,因为我甚至没有意识到这是整个“多租户”“软件即服务”类别的一部分。
我为一个客户开发了一个会员系统(使用PHP)。现在我们正在考虑将其作为完全托管的解决方案提供给其他客户,提供子域名(甚至是他们自己的域名)。
就数据存储而言,我似乎有以下几种选择:
选择1 - 将所有内容存储在一个大型数据库中,并在需要时在表上拥有一个“client_id”字段(约有30个表需要应用它),并有一个“clients”表来存储其主要设置、细节等以及与之映射的域名。然后只需设置一个全局可访问的变量包含其各自的客户ID - 我显然必须修改每个查询以检查client_id列。
选择2 - 有一个带有“共享引用”表和“客户”表的主表。然后有其他数据库的“块”,每个块包含10个客户,客户将获得其自己的数据库表,前缀为其客户ID。如果出现问题,这会增加一点安全性,以保护看不到其他客户数据。
选择3 - 与选择2完全相同,只是为每个客户有一个数据库,完全隔离它们于其他客户,并在理论上提供更多的保护,如果1个客户的表被黑客入侵或受到破坏,则不会影响任何其他人。最大的缺点是,在部署新客户时,需要设置整个数据库、用户和密码等。这可能也会导致相当大的开销,或者是否与将所有人放在一个数据库中相同?
还有一些要点-其中一些客户将拥有5000多个“客户”,以及这些客户的所有详细信息-这就是为什么选择1可能有点问题-如果我有100个客户,那可能相当于在1个表中有超过500,000行。
如果客户数据(以及付款信息)的安全性非常重要,那么我认为选项3是最好的选择。根据我得到的建议,一些人建议选择选项1,因为“它更容易”,但我并不这样认为。我认为这可能会成为未来瓶颈,因为如果客户有自己的数据库,我肯定可以更轻松地将客户转移。
(FYI该系统基于PHP和MySQL)