我需要使用一个PostgreSQL安装来托pipe多个客户站点。 什么是最好的方式来分裂他们 – 通过架构或实例?
这些因素将使pipe理员更容易(特别是个别站点的备份/恢复),站点的性能以及内存使用的整体效率。
感谢Jason
“最好”的方式很大程度上取决于你的用例,但是在我的托pipedate间,我们只是给每个客户端自己的数据库用户,这是他们的数据库上的DBO,具有适当的权限和login限制(在Postgres和pg_hba.conf
),所以他们不能混淆别人的数据。
可以使用pg_dump
来处理备份/恢复(单独转储每个数据库,这样就可以轻松恢复,而无需select转储文件),性能/调优与任何大中型Postgres实例相同。
按模式拆分(在同一个数据库中)也是一种select,但是它并不像一个单独的数据库那样执行相同的分离级别,而且显然不能让客户创build自己的模式(或者做其他任何需要DBO的模式)如果你这样做。
通过实例拆分(为每个客户端分离Postgres服务器)是最终的分离级别,但是真正需要每个客户端都有一个单独的OS用户(所以Postgres在完全独立的用户下运行)。 这也是一个巨大的内存/资源汇:Postgres(像大多数数据库系统)理想情况下应该是唯一的一个服务器上运行,只有一个实例。