Postgresql 多数据库 VS 多模式

Posted

技术标签:

【中文标题】Postgresql 多数据库 VS 多模式【英文标题】:Postgresql Multiple Database VS Multiple Schemas 【发布时间】:2015-05-11 04:28:36 【问题描述】:

我们正在为工作中的托管服务构建集群,最终产品将用于托管多个单独的服务。我们正在决定如何设置我们的数据库。我们正在运行一个 postgresql 数据库服务器,集群中的所有服务都将使用它。现在的争论是,是在单个数据库中为每个服务提供自己的架构,还是为每个服务提供自己的数据库。

我们只是不确定哪种解决方案更适合我们。我们的所有服务都没有共同的结构,也不需要共享数据。我们更关心的是易用性。

这是我们最关心的,我们真的希望得到一个客观与基于意见的答案。

备份

灾难恢复 - 所有服务与个人

服务之间的安全性

性能

有关其他信息,集群托管在 AWS 中,我们的数据库是一个 RDS 实例。

【问题讨论】:

【参考方案1】:

灾难恢复 - 所有服务与个人

您一次可以转储和恢复一个数据库。您可以一次转储和恢复一个模式。您还可以转储与模式匹配的模式。

服务之间的安全性

我认为您的意思是数据库之间的隔离和模式之间的隔离。对于关心“易用性”的开发人员来说,数据库之间的隔离更加强大,更加“自然”。例如,如果您为每个服务使用一个数据库,则每个开发人员都可以只使用公共模式进行所有开发。这似乎比在搜索路径中添加模式“更容易”,或者比在编程时使用schema.object 更“容易”。

这部分取决于您如何管理用于开发的角色的权限,以及您如何管理每个数据库或架构中的权限。你可以change default privileges。

性能

我没有看到可衡量的差异。 YMMV。

【讨论】:

【参考方案2】:

这是 PostgreSQL 官方文档所说的:

数据库在物理上是分开的,访问控制在连接级别进行管理。如果一个 PostgreSQL 服务器实例要容纳应该是独立的并且在大多数情况下彼此不知道的项目或用户,因此建议将它们放入单独的数据库中。如果项目或用户是相互关联的,并且应该能够使用彼此的资源,则它们应该放在同一个数据库中,但可能放在单独的模式中。 Schemas 是一种纯粹的逻辑结构,谁可以访问权限系统管理的内容。

来源:http://www.postgresql.org/docs/8.0/static/managing-databases.html

【讨论】:

以上是关于Postgresql 多数据库 VS 多模式的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL 用于多租户应用程序的模式

PostgreSQL学习总结—— PostgreSQL 基于数据库和基于模式(schema)的多租户分析

使用 PostgreSQL 的模式和 Rails 创建多租户应用程序

postgresql数据库和mysql数据库的对比分析

进程 vs. 线程

在 laravel 中使用多对多关系同步:PostgreSQL 数据透视表不更新