1. ホーム
  2. database

[解決済み] 複数のデータベースをそれぞれ1つのスキーマで使用するのと、1つのデータベースを複数のスキーマで使用するのと、どちらが良いですか?

2022-05-05 20:55:26

質問

このコメント 私の質問に対して、1つのデータベースでX個のスキーマを使用するのが良いのか、それともその逆が良いのか考えています。

私は、人々が登録するときに、(実際には)データベースを作成するWebアプリケーションを開発しています(いいえ、それはソーシャルネットワークではありません:誰もが自分自身のデータにアクセスする必要があり、他のユーザーのデータを見ることはありません)。これは、私のアプリケーションの以前のバージョン(まだMySQLで動作している)で使用した方法です:Plesk APIを通じて、すべての登録について、私は行います。

  1. 制限された権限を持つデータベースユーザーを作成します。
  2. 前回作成したユーザーとスーパーユーザー(メンテナンス用)だけがアクセスできるデータベースを作成する。
  3. データベースを作成する

今度は、PostgreSQLで同じことをする必要があります(プロジェクトは成熟してきており、MySQLではすべてのニーズを満たすことはできません)。すべてのデータベース/スキーマのバックアップを独立させる必要があります。 pg_dump はどちらの方法でも完璧に機能しますし、1つのスキーマまたは1つのデータベースにのみアクセスするように設定できるユーザーについても同じです。

そこで、私よりも経験豊富なPostgreSQLユーザーであることを前提に、私の状況にとって最良の解決策は何だと思いますか、そしてその理由は?xスキーマの代わりに$xデータベースを使用することで、パフォーマンスの違いはあるのでしょうか?また、どのようなソリューションが将来的なメンテナンス(信頼性)に優れているのでしょうか?私のデータベース/スキーマはすべて 常に は同じ構造を持っています。

バックアップの問題(pg_dumpの使用)については、1つのデータベースと多くのスキーマを使用して、すべてのスキーマを一度にダンプする方が良いかもしれません。リカバリは、開発マシンにメインのダンプをロードして、必要なスキーマだけをダンプしてリストアするだけなので、1つ追加のステップがありますが、すべてのスキーマをダンプする方が一つずつダンプするよりも速く見えます。

2012年最新版

この2年間で、アプリケーションの構成やデザインは大きく変わりました。私はまだquot;one db with many schemas" -のアプローチを使っていますが、それでも、私は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データベース・1スキーマのアプローチは、これまでと同じようにうまく機能しています。忘れるところだった:私のデータベース/スキーマはすべて 常に は同じ構造を持っています。現在では、すべてのスキーマが独自の構造を持ち、ユーザーのデータフローに動的に反応するようになっています。

どのように解決するのか?

PostgreSQLのquot;スキーマは、MySQLのquot;データベースとほぼ同じものです。PostgreSQLのインストールで多くのデータベースを持つことは問題になりますが、多くのスキーマを持つことは問題なく動作します。そのため、1つのデータベースとそのデータベース内の複数のスキーマを使用することをお勧めします。