我正在构建一个多租户SaaS应用程序,在这里我有很多客户(范围从数百到数千)。这些客户中的每一个都有自己的客户,他们可以在我们的应用程序上进行帐户和互动。我将Node用于服务器,将MongoDB用于数据库。
当前,我存储租户数据的方法是将其所有数据放置在一个数据库中,并使用Mongodb Sharding对我所有租户的数据进行分区,并在将来需要时进行扩展。在我看来,MongoDB分片似乎是一种分区和管理数据的好方法。
但是,有些人建议我为每个租户建立一个数据库。他们说这样做更好,因为更容易“迁移/管理/扩展”和“更安全”。我想对此发表第二意见。
向每个租户提供数据库会增加我的应用程序的复杂性,所以我想知道它是否真的必要。
我将不胜感激。预先感谢您的回答!
这些是我的观点,很想讨论。
有几种众所周知的方法来存储基于租户的数据。我认为这取决于您的解决方案,预算,团队规模以及您要放置复杂性的位置。
on-premise
解决方案。租户在自己的服务器/云上使用和管理自己的数据库实例。考虑一个由非常小的团队(2或3人)维护的解决方案:我将使用document-based isolation (with a field tenantId)
并具有多个分片群集,以租户的姓名缩写作为分片键来扩展租户数据。
考虑成千上万的客户使用并由大型团队维护的云解决方案:也许我会选择database per tenant
来获得最安全的隔离。
考虑企业解决方案:我更愿意向客户提供on-premise
。