多租户应用程序:Mongodb共享所有租户的一个数据库VS每个租户一个数据库



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

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

但是,有些人建议我为每个租户提供一个数据库。他们说这更好,因为它更容易"迁移/管理/扩展",而且"更安全"。我想对这件事有另一种看法。

给每个租户一个数据库会增加我的应用程序的复杂性,所以我想知道这是否真的有必要。

如果有任何见解,我将不胜感激。提前感谢您的回答!

这些是我的意见,很乐意讨论。

有几种众所周知的方法可以存储基于租户的数据。我认为这取决于你的解决方案、预算、团队规模以及你想把复杂性放在哪里。

  • 每个租户的数据库系统实例:我们通常将此方法用于on-premise解决方案。租户在自己的服务器/云上使用和管理自己的数据库实例
  • 每个租户的数据库:对于云解决方案,这是将租户的数据相互隔离的最安全方法。但是需要额外的维护和管理工作(备份、开发更改、重新索引等(。此外,应用程序应该能够处理/池化每个数据库的连接
  • 每个租户的架构(在MongoDb世界中,这是不可能的,因为它没有架构(
  • 每个租户的表/集合
  • 每个租户的行/文档:提供弱隔离。并且必须针对每种查询进行良好的优化。然而,最简单的维护方法

考虑由一个非常小的团队(2或3人(维护的解决方案:我会使用document-based isolation (with a field tenantId),并有几个sharded clusters通过使用租户名称的首字母缩写作为分片密钥来扩展租户数据。

  • cluster#01:名称为A-H的租户
  • 集群#02:名称为H-S的租户

考虑一个由全球数千名客户使用并由大型团队维护的云解决方案:我可能会使用sharded clusters(在不同的国家/地区位置(,并根据租户的位置将租户分散到各自的分片集群中,并使用database per tenant

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

除此之外:我可以考虑使用从replica sets来执行读取操作,而不是使用主实例。

相关内容

最新更新