我们正处于新的多租户SaaS应用程序的规划阶段,并且已经达到了决定性的一步。在设计多租户应用程序时,最好是选择一个包含所有客户数据的单片数据库(使用'customer_id'列),还是每个客户拥有一个独立的数据库更好?无论数据库决策如何,所有租户都将使用相同的代码库。
在我看来,拥有单独的数据库使备份/恢复变得更容易,但代价是开发和升级的复杂性增加(更容易升级1个数据库对500个)。如果情况保证移动,也可以更容易/可能将个别客户拆分为单独的专用服务器。同时,在试图全面了解客户如何使用该软件时,汇总数据变得更加困难。
我们预计在推出后至少一年内会有不到250名客户,但他们将成为大客户,之后会有更多客户跟进。
由于这是我们第一次进入SaaS,我们一定希望从一开始就做到这一点。
答案 0 :(得分:2)
评论时间有点长。
在大多数情况下,您希望一个数据库在相应的表中具有单独的客户ID列。这使得维护应用程序变得更加容易。例如,在一个数据库中替换存储过程要比在250个数据库中更容易。
就可扩展性而言,可能没有问题。如果你真的想,你可以按客户端对表进行分区。
为什么您希望每个客户端都有一个单独的数据库,这有一些原因:
但是,由于可维护性和一致性,我认为默认值应该是一个数据库。
顺便说一下,至于备份和恢复。如果客户端需要此功能,您可能还是想编写自定义脚本。虽然您可以使用数据库级备份和还原,但您可能有一些特殊需求,例如保持与未存储在数据库中的数据的一致性。