私の質問の 1 つに対するこのコメントの後、X スキーマで 1 つのデータベースを使用する方が良いか、またはその逆かを考えています。
私は、人々が登録するときに (実際には) データベースを作成する Web アプリケーションを開発しています (いいえ、それはソーシャル ネットワークではありません。誰もが自分のデータにアクセスでき、他のユーザーのデータを見ることはありません)。これは、以前のバージョンのアプリケーション (まだ MySQL で実行されている) で使用した方法です。登録ごとに、Plesk API を使用して、次のことを行います。
- 権限が制限されたデータベース ユーザーを作成します。
- 前回作成したユーザーとスーパーユーザーだけがアクセスできるデータベースを作成する(メンテナンス用)
- データベースにデータを入力する
今度は、PostgreSQL で同じことを行う必要があります (プロジェクトは成熟しつつあり、MySQL はすべてのニーズを満たしていません)。すべてのデータベース/スキーマのバックアップを独立させる必要があります。pg_dump
両方の方法で完全に機能し、1 つのスキーマまたは 1 つのデータベースのみにアクセスするように構成できるユーザーに対しても同じです。
では、あなたが私よりも経験豊富な PostgreSQL ユーザーであると仮定すると、私の状況に最適なソリューションは何だと思いますか? またその理由は? $x スキーマの代わりに $x データベースを使用すると、パフォーマンスに違いはありますか? また、将来維持するのに適したソリューションはどれですか (信頼性)? すべてのデータベース/スキーマは常に同じ構造になります!
バックアップの問題 (pg_dump を使用) については、1 つのデータベースと多くのスキーマを使用して、すべてのスキーマを一度にダンプする方がよいかもしれません: 回復は非常に簡単で、メイン ダンプを開発マシンにロードしてから、必要なスキーマだけをダンプして復元します。は 1 つの追加ステップですが、すべてのスキーマをダンプする方が、1 つずつダンプするよりも高速に思えます。
2012年更新
アプリケーションの構造とデザインは、この 2 年間で大きく変化しました。私はまだ「多くのスキーマを持つ1つのデータベース」アプローチを使用していますが、それでも、アプリケーションのバージョンごとに1つのデータベースがあります。
Db myapp_01
\_ my_customer_foo_schema
\_ my_customer_bar_schema
Db myapp_02
\_ my_customer_foo_schema
\_ my_customer_bar_schema
バックアップについては、各データベースを定期的にダンプしてから、バックアップを開発サーバーに移動しています。PITR/WAL バックアップも使用していますが、前に述べたように、すべてのデータベースを一度に復元する必要はほとんどありません。したがって、今年はおそらく却下されるでしょう(私の状況では、最善のアプローチではありません)。
アプリケーション構造が完全に変更されたとしても、1 db 多スキーマ アプローチは今では非常にうまく機能しています。私はほとんど忘れていました: すべてのデータベース/スキーマは常に同じ構造を持ちます! 現在、すべてのスキーマには独自の構造があり、ユーザーのデータ フローに動的に反応して変化します。