在我提出问题后,这条评论让我开始考虑是使用一个包含X个模式的数据库更好,还是反过来。
我正在开发一个Web应用程序,在人们注册时,我创建(实际上)一个数据库(不,这不是社交网络:每个人都必须访问自己的数据,永远不会看到其他用户的数据)。这是我用于先前版本的应用程序的方式(仍在MySQL上运行):通过Plesk API,对于每个注册,我执行以下操作:
- 创建一个有限权限的数据库用户;
- 创建一个只能由前面创建的用户和超级用户(用于维护)访问的数据库
- 填充数据库
现在,我需要在PostgreSQL中执行相同的操作(该项目正在成熟,MySQL不能满足所有需求)。我需要使所有数据库/模式备份独立:pg_dump
两种方式都可以完美工作,对于可以配置为仅访问一个模式或一个数据库的用户也是如此。
因此,假设您是比我更有经验的PostgreSQL用户,您认为什么是我情况下的最佳解决方案以及为什么?使用$x数据库而不是$x模式是否会有性能差异?什么解决方案将来更容易维护(可靠性)?我的所有数据库/模式将始终具有相同的结构!
对于备份问题(使用pg_dump),也许最好使用一个数据库和多个模式,一次转储所有模式:恢复将非常简单,在开发机器上加载主要转储文件,然后只需转储和恢复所需的模式:有一个额外的步骤,但似乎同时转储所有模式比逐个转储它们更快。
更新2012
好吧,这些最后两年应用程序的结构和设计都发生了很大变化。我仍然使用“一个带有多个模式”的方法,但仍然为我的应用程序的每个版本创建一个数据库:
Db myapp_01
\_ my_customer_foo_schema
\_ my_customer_bar_schema
Db myapp_02
\_ my_customer_foo_schema
\_ my_customer_bar_schema
为了备份,我定期转储每个数据库,然后将备份移到开发服务器上。我还使用PITR/WAL备份,但正如我之前所说的,我不太可能一次性还原所有数据库。因此,今年可能会放弃这种方法(在我的情况下不是最佳选择)。
一个数据库多个模式的方法目前对我来说非常有效,即使应用程序结构完全改变也是如此。我几乎忘记了:我所有的数据库/模式都会始终具有相同的结构!现在,每个模式都有自己的结构,根据用户数据流动动态更改。