在这样的评论到我的一个问题之后,我在想是否使用X模式的数据库更好,反之亦然。
我正在开发一个web应用程序,当人们注册时,我创建(实际上)一个数据库(不,这不是一个社交网络:每个人都必须访问自己的数据,永远不会看到其他用户的数据)。这就是我在我的应用程序的前一个版本(仍然在MySQL上运行)中使用的方式:通过Plesk API,对于每个注册,我做:
现在,我需要对PostgreSQL做同样的事情(项目越来越成熟,MySQL不能满足所有的需求)。我需要让所有的数据库/模式备份独立:pg_dump
在两种方式下都能完美地工作,对于可以配置为只访问一个模式或一个数据库的用户也是如此。
那么,假设你是比我更有经验的PostgreSQL用户,你认为对我的情况最好的解决方案是什么,为什么?使用$x数据库而不是$x模式会有性能差异吗?将来维护哪种解决方案(可靠性)更好?我的所有数据库/模式将总是具有相同的结构!
对于备份问题(使用pg_dump),可能更好的方法是使用一个数据库和多个模式,一次性转储所有模式:恢复将非常简单,在开发机器中加载主转储,然后转储和恢复所需的模式:有一个额外的步骤,但转储所有模式似乎比逐个转储更快。
在过去的两年里,应用程序的结构和设计发生了很大的变化。我仍然在使用“一个数据库多模式”。-方法,但仍然,我有一个数据库对于每个版本我的应用程序:
Db myapp_01
\_ my_customer_foo_schema
\_ my_customer_bar_schema
Db myapp_02
\_ my_customer_foo_schema
\_ my_customer_bar_schema
对于备份,我定期转储每个数据库,然后将备份移动到开发服务器上。我也在使用PITR/WAL备份,但是,正如我之前所说,我不太可能必须立即恢复所有数据库。所以今年它可能会被取消(在我的情况下,这不是最好的方法)。
从现在起,即使应用程序结构完全改变,单数据库多模式方法也非常适合我。我几乎忘了:我所有的数据库/模式总是都具有相同的结构!现在,每个模式都有自己的结构,可以根据用户数据流动态变化。