【问题标题】:Multi-tenant DB in one DB using Postgres & AWS一个数据库中的多租户数据库,使用 Postgres 和 AWS
【发布时间】:2020-12-21 10:48:20
【问题描述】:

我是一名全栈软件开发人员,我一直渴望创建自己的软件来获得被动收入和职业发展。我越是深入杂草,我就越欣赏/尊重 DevOps 和一般应用程序的基础架构方面。我正在尝试以一种可扩展的方式构建此应用程序(最多可容纳 10/000 名客户)并且启动成本不高。该堆栈是 angular/node,利用带有 aws 基础架构的 postgres。

根据我所做的研究,一些方法是:1 db,每个客户的表(便宜/不可扩展) 1 db,每个客户的架构(更便宜/更具可扩展性) n db,每个客户 db(昂贵,无限可扩展) )

我想选择选项 2,或者如果有其他混合选项。有人可以向我解释选项 2 将如何工作吗?我计划将应用程序托管在 ec2 实例上,然后将数据库托管在 aurora aws 中,每个客户都有复制的表,但在 1 db 以内。有没有人对如何实施有任何建议。任何输入都会很棒。

提前致谢!

【问题讨论】:

  • 您为什么不能在同一个数据库中拥有所有客户数据,甚至在同一个表中?这是 Salesforce 在构建多租户系统时采用的方法。对数据库的查询使用客户标识符,因此在查询中只使用他们的行,而无需使用单独的表。然后,他们对数据库进行分片以处理增长和性能。
  • 如果您正在寻找“意见”,您可能会得到更好的回复:reddit.com/r/aws
  • @JohnRotenstein 在 reddit 链接上的好主意,我会试试的。基本上,如果确实需要将其拆分为拥有其数据库的每个租户,那么我的想法是后来的结果,该数据基本上已经以这种方式构造了。我可能完全错了,我不是专家,但这只是一个想法。我会研究分片,这看起来很有帮助。

标签: postgresql amazon-web-services express multi-tenant knex.js


【解决方案1】:

我想知道您是如何得出“便宜”和“可扩展”的估算值的。

为所有 1000 个客户的数据创建一个表可以很好地工作。这完全取决于数据量、您运行的查询和您创建的索引。索引扫描的速度与表的大小无关。

为每个客户使用一个数据库与为每个客户使用一个架构一样可扩展,也就是说,它不会很好地扩展超过一定数量的用户。在这里很难说出一个具体的数字,但 1000 可能仍然可以。

我对“便宜”和“可扩展”的判断是:

  • 两种建议的解决方案都同样便宜或昂贵

  • 单个表将随着客户数量的增加而更好地扩展

如果可扩展性是一个问题,我会考虑分片。找到一条规则,在多个不同的数据库中平均分配您的客户。在每个数据库中,您为该分片上的所有客户使用一个表。如果不同的数据库可以驻留在不同的机器上,那么您几乎可以无限制地扩展。

【讨论】:

  • 谢谢,上面有人也提到了分片,我会调查的。所以回答便宜且可扩展。有 3 个解决方案,1 DB 1 Schema(所有租户),1 DB 多模式(每个租户的模式),和/或多个 DB(每个租户 1 个 DB)。据我了解,在 AWS 中运行每个数据库需要花费每 n 个数据库的费用,所以我想运行一个数据库。从可扩展性的角度来看,我认为将它们放在自己的架构中会更容易,因此数据与其他租户分开,我觉得这可能会建立较少的关系。我可能都错了
  • 我认为就所需资源而言“便宜”。只要您没有太多架构,您就可以将您的想法与每个租户的架构一起使用。
猜你喜欢
  • 1970-01-01
  • 2020-08-03
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-19
  • 2012-02-19
相关资源
最近更新 更多