多租户应用程序:Mongodb分片所有租户的数据库VS每个租户的数据库

问题描述 投票:0回答:1

我正在构建一个多租户SaaS应用程序,在这里我有很多客户(范围从数百到数千)。这些客户中的每一个都有自己的客户,他们可以在我们的应用程序上进行帐户和互动。我将Node用于服务器,将MongoDB用于数据库。

当前,我存储租户数据的方法是将其所有数据放置在一个数据库中,并使用Mongodb Sharding对我所有租户的数据进行分区,并在将来需要时进行扩展。在我看来,MongoDB分片似乎是一种分区和管理数据的好方法。

但是,有些人建议我为每个租户建立一个数据库。他们说这样做更好,因为更容易“迁移/管理/扩展”和“更安全”。我想对此发表第二意见。

向每个租户提供数据库会增加我的应用程序的复杂性,所以我想知道它是否真的必要。

我将不胜感激。预先感谢您的回答!

node.js mongodb multi-tenant sharding
1个回答
0
投票

这些是我的观点,很想讨论。

有几种众所周知的方法来存储基于租户的数据。我认为这取决于您的解决方案,预算,团队规模以及您要放置复杂性的位置。

  • 每个租户的数据库系统实例:我们通常将此方法用于on-premise解决方案。租户在自己的服务器/云上使用和管理自己的数据库实例。
  • 每个租户的数据库:对于云解决方案,这是将租户的数据彼此隔离的最安全的方法。但是需要额外的维护和管理工作(备份,开发变更,重新编制索引等)。此外,应用程序应该能够处理/合并每个数据库的连接。
  • 每个租户的架构(在MongoDb世界中,由于它没有架构,因此将无法实现)
  • 每个租户的表/集合
  • 行/每个租户的文档:降低性能并降低隔离度。但是,最简单的维护方法。

考虑一个由非常小的团队(2或3人)维护的解决方案:我将使用document-based isolation (with a field tenantId)并具有多个分片群集,以租户的姓名缩写作为分片键来扩展租户数据。

  • 集群#01:名称以A-H开头的租户
  • 集群#02:名称以H-S开头的租户
  • ...

考虑成千上万的客户使用并由大型团队维护的云解决方案:也许我会选择database per tenant来获得最安全的隔离。

考虑企业解决方案:我更愿意向客户提供on-premise

© www.soinside.com 2019 - 2024. All rights reserved.