我们正在为工作中的托管服务构建集群,最终产品将用于托管多个单独的服务。我们正在决定如何设置数据库。我们正在运行一个postgresql数据库服务器,集群中的所有服务都将使用该服务器。现在的争论是,是否在一个数据库中为每个服务提供自己的模式,或者为每个服务提供自己的数据库。
我们无法确定哪种解决方案对我们来说更好。我们的服务都没有共同的结构,也不需要共享数据。我们更关心的是易用性。
在这里,我们最关心的是,我们真的希望得到一个客观的,基于意见的答案。
备份
灾难恢复 - 所有服务与个人
服务之间的安全性
性能
对于某些其他信息,群集托管在AWS中,我们的数据库是RDS实例。
答案 0 :(得分:6)
这是PostgreSQL官方文档所说的:
数据库在物理上是分开的,并且在连接级别管理访问控制。如果一个PostgreSQL服务器实例要容纳应该是独立的项目或用户,并且大多数情况下彼此不了解,则建议将它们放入单独的数据库中。如果项目或用户是相互关联的并且应该能够使用彼此的资源,那么它们应该放在同一个数据库中,但可能放在单独的模式中。模式是纯逻辑结构,可以访问权限系统管理的内容。
来源:http://www.postgresql.org/docs/8.0/static/managing-databases.html
答案 1 :(得分:2)
灾难恢复 - 所有服务与个人
您可以一次转储和恢复一个数据库。您可以一次转储和还原一个架构。您还可以转储与模式匹配的模式。
服务之间的安全性
我认为你的意思是数据库之间的隔离和模式之间的隔离。数据库之间的隔离更强大,更自然"对于那些关注&易于使用的开发人员而言#34;例如,如果每个服务使用一个数据库,则每个开发人员都可以使用公共模式进行所有开发。这可能看起来更容易"而不是将模式添加到搜索路径,或者更容易"而不是在编程时使用schema.object
。
部分取决于您如何管理用于开发的角色的权限,以及如何管理每个数据库或模式中的权限。你可以change default privileges。
性能
我没有看到可衡量的差异。 YMMV。