KJ *_*Ang 1 sharding multi-tenant mongodb node.js
我正在构建一个多租户 SaaS 应用程序,其中有许多客户(可以从数百到数千)。每个客户都有自己的客户,他们可以在我们的应用程序上创建帐户并进行交互。我使用 Node 作为我的服务器,使用 MongoDB 作为数据库。
目前,我存储租户数据的方法是将他们的所有数据放在一个数据库中,并使用Mongodb Sharding对所有租户的数据进行分区,并在将来需要时进行扩展。在我看来,MongoDB 分片是一种分区和管理数据的好方法。
然而,有些人建议我应该为每个租户拥有一个数据库。他们说它更好,因为它更容易“迁移/管理/扩展”并且“更安全”。我想就此征求第二意见。
为每个租户提供一个数据库会增加我的应用程序的复杂性,因此我想知道它是否真的有必要。
如果有任何见解,我将不胜感激。预先感谢您的答复!
这些是我的意见,很乐意讨论。
有几种众所周知的方法来存储基于租户的数据。我认为这取决于您的解决方案、预算、团队规模以及您想要将复杂性放在哪里。
on-premise解决。租户在自己的服务器/云上使用和管理自己的数据库实例。考虑由一个非常小的团队(2 或 3 人)维护的解决方案:我将使用document-based isolation (with a field tenantId)并拥有多个sharded clusters通过使用租户姓名首字母作为分片键来扩展租户数据。
考虑到全球成千上万的客户使用并由大型团队维护的云解决方案:可能我会选择having sharded clusters(在不同的国家/地区位置),并按租户的位置将租户分散到相应的分片集群中并拥有database per tenant。
考虑企业解决方案:我更喜欢提供on-premise给客户。
除此之外:我可以考虑使用从属实例replica sets来执行读取操作,而不是使用主实例。