多租户:每个租户的单个数据库或数据库?

时间:2015-04-14 00:28:25

标签: mysql database multi-tenant

我们正处于新的多租户SaaS应用程序的规划阶段,并且已经达到了决定性的一步。在设计多租户应用程序时,最好是选择一个包含所有客户数据的单片数据库(使用'customer_id'列),还是每个客户拥有一个独立的数据库更好?无论数据库决策如何,所有租户都将使用相同的代码库。

在我看来,拥有单独的数据库使备份/恢复变得更容易,但代价是开发和升级的复杂性增加(更容易升级1个数据库对500个)。如果情况保证移动,也可以更容易/可能将个别客户拆分为单独的专用服务器。同时,在试图全面了解客户如何使用该软件时,汇总数据变得更加困难。

我们预计在推出后至少一年内会有不到250名客户,但他们将成为大客户,之后会有更多客户跟进。

由于这是我们第一次进入SaaS,我们一定希望从一开始就做到这一点。

1 个答案:

答案 0 :(得分:2)

评论时间有点长。

在大多数情况下,您希望一个数据库在相应的表中具有单独的客户ID列。这使得维护应用程序变得更加容易。例如,在一个数据库中替换存储过程要比在250个数据库中更容易。

就可扩展性而言,可能没有问题。如果你真的想,你可以按客户端对表进行分区。

为什么您希望每个客户端都有一个单独的数据库,这有一些原因:

  • 访问控制:在数据库级别维护访问控制比在行级别更容易。
  • 自定义:如果您可以在单一环境中工作,则可以更轻松地为客户端自定义软件。
  • 性能瓶颈:如果数据非常大和/或系统上存在大量事务,则在不同服务器上分发数据库而不是维护庞大的数据库可能更简单(也更便宜)。

但是,由于可维护性和一致性,我认为默认值应该是一个数据库。

顺便说一下,至于备份和恢复。如果客户端需要此功能,您可能还是想编写自定义脚本。虽然您可以使用数据库级备份和还原,但您可能有一些特殊需求,例如保持与未存储在数据库中的数据的一致性。