具有多个应用程序的一台机器的 Postgres 架构

Postgres architecture for one machine with several apps

我有一台机器,上面托管了多个应用程序。应用程序处理分离的数据并且不交互 - 每个应用程序只需要访问自己的数据。我想使用 PostgreSQL 作为 RDBMS。以下哪一项最好,为什么?

  1. 一个全球 Postgres 服务器,一个全球数据库,每个应用程序一个模式。
  2. 一个全球 Postgres 服务器,每个应用程序一个数据库。
  3. 每个应用程序一个 Postgres 服务器。

如果您认为其他架构比上述架构更好,请随时提出建议。

解决方案 1 很愚蠢:SQL 架构不是数据库。为一个应用程序使用 SQL 模式,该应用程序具有多个“部分”,如“生产”、“销售”、“营销”、“财务”...

虽然最终数据量不会太大,用户数也不会太多,但只使用一个PG集群,方便管理工作

如果数据量或用户数量增加,则需要在新的不同 PG 集群上分离不同的数据库....

您需要问自己的问题:是否有任何应用程序需要从另一个应用程序访问数据(在同一个 SQL 语句中)。如果您可以明确回答“否”,那么您至少应该使用单独的数据库。 Cross-database 查询不是 Postgres 中的 straight-forward,因此如果不同的应用程序确实需要来自其他应用程序的大量数据,那么解决方案 1 可能是需要考虑的部署布局。如果这只涉及很少的表,那么使用不同数据库的外部数据包装器可能仍然是更好的解决方案。

方案二和方案三从各个应用的角度来看,大同小异。在 2 和 3 之间做出决定时要记住的一件事是可用性。对 Postgres 的一些配置更改需要重新启动服务。在那种情况下是否可以接受所有应用程序的中断,即使更改只对一个应用程序是必要的?

但您始终可以从选项 2 开始,然后将数据库移动到不同的服务器。

要问的另一个问题是,是否所有应用程序始终使用相同(主要)Postgres 版本对于解决方案 2,如果其中一个应用程序想要升级,您必须确保所有应用程序都与新的 Postgres 版本兼容,例如因为应用程序想要使用的新功能。