web-dev-qa-db-ja.com

データベースを一元化するか、アプリケーションごとにデータベースを用意する必要がありますか?

私の会社では、クライアントごとに異なるWebアプリケーションを開発しています。
新しいクライアント(または重要なプロジェクト)ごとに、新しいMySQLデータベースを備えた新しいサーバーを使用します。

このようにして、アプリケーションはデータベースにのみアクセスでき、データベースはプロジェクトに直接リンクされます(同じサーバーにあるため、基本的には同じディレクトリにあるため)。今まで特に問題はありませんでした。

メソッドを変更しているときに、同僚はすべてのプロジェクトが含まれているデータベースを1つだけ使用して、マスター/スレーブレプリケーションを使用できるかどうか疑問に思っています。

私たちのさまざまなデータベースにはいくつかのテーブルが共通していますが、それぞれのアプリに属しているため、データが異なります。


私はこの問題についていくつかの研究をしました:
これらの理由で、アプリケーションごとにデータベースを使用することを推奨する投稿を主に見つけます。

  • 各プロジェクトの個別のログファイルとバックアップ
  • 各データベースのニーズを調査できるため、スケーラビリティが向上します
  • データを変更したりビューを作成したりする必要なく、アプリケーションから簡単に使用できます。

私がこれについて読んだもののほとんどは5〜10年前のものなので、他のソリューションの欠点がまだ関連しているかどうかはわかりません。

この種の場合の一意のデータベースソリューションとマスター/スレーブレプリケーションの使用に関する正確な情報と利点を見つけるのに苦労しています。

私はこのアイデアに不慣れです。ここではマスター/スレーブの概念を理解していますが、それについての技術的な知識はありません。


(独自のデータベースを使用することは有益でしょうか?)

必要があります:

  • アプリと同じサーバー上のアプリのデータベース、
  • すべてのデータベースに単一のサーバーを使用し、アプリを他のホストに保持しますか?

MySQLを使用していますが、アプリごとに異なるスキーマを持つ単一のデータベースを使用することを選択した場合、PostgreSQLが可能なオプションであることに注意してください。

1
Charles Okolms

あなたが読んだものは(それが古くても)まだ非常に関連があります

あなたの問題はマルチテナンシーと呼ばれています-それを行うかどうか-consensusは「そうではない」ように見えますが、ビューには大きな相違がありますこの問題は、「部分的にマルチテナント」にすることができます。つまり、たとえば、実質的に変更されない参照テーブルを共通に保つなどですが、「部分的な」マルチテナントには、以下で概説するのと同じ問題が当てはまります。

私のアドバイス-可能であれば、個別のデータベースを使用してください!

  • 1つのアプリがダウンしても、少なくとも他のアプリは中央データベースで引き続き機能します。1つのアプリがサーバーをダウンさせた場合、あなたは束ねられます(何も機能しません)。

  • また、移行の場合、たとえば、アプリの1つを移行する必要がある場合(サイズ/速度/その他の問題-または1つのアプリでクラウドテストにつま先を浸したい場合)、アプリを分離することが困難になります。 、別のシステムを使用している場合は、そのスコアに問題はありません!

あなたがこれをより詳細に探求したいのであれば、私は以前にこの問題に関する質問に答えました-それらをチェックしてください( 12 and =およびその中のリンク)。明らかにコストと、すぐに利用できる専門知識の性質が問題なので、決定に至る前にオプションを確認する価値があります。

時々賢い頭は確かに古い肩の上にあります! :-)

別の推奨事項-可能であればPostgreSQLを使用してください!それはvastlyMySQLに無数の方法で優れています-SQLコンプライアンス、JSON、地理空間、CHECK制約、SET演算子...長いリスト...あなたはそれを後悔しないでしょう!

3
Vérace

単一のデータベースを避けます。私の推奨事項は、同じサーバー上の別々のデータベースから開始する-メンテナンスコストを含むコストを削減することです。ワークロードが増加した場合は、新しいマシンをセットアップして一部のデータベースを移動できます。 1つのアプリケーションのワークロードのみが増加した場合は、その1つだけを移動できます。これを行うには、さまざまなアプリケーションのワークロードを監視することが重要です。そのため、PerconaのUser Statisticsプラグインをインストールすることをお勧めします。

そして、はい、ワークロードを分散してクラッシュに直面する良い方法は、レプリケーションまたはクラスターを使用することです(レプリケーションははるかに簡単です)。今日では、単一障害点はありません。 MySQLを使用すると、コストを削減する別の方法もあります。3台のサーバーにアプリケーションがある場合、それらすべてのデータベースを1台のスレーブに複製できます。これはマルチソース複製と呼ばれます。

複数のデータベースを使用する他の利点は次のとおりです。

  • 大きなテーブルでのALTER TABLEは痛みを伴う可能性があります
  • 顧客のデータを1つ削除すると、簡単かつ高速になります
  • 顧客ごとに構成が異なる場合があります(信頼性を高めるために速度を上げるか、またはその逆)。
  • 一部のメトリックの監視がはるかに簡単になります
  • 大きなテーブルは遅い
0

databaseserverを区別する必要があります。

単一の物理マシン(別名Host)は、DBMSエンジンであるserversを実行できます。少数のMySQL、少数のPostgreSQL、少数のMongoDB、および少数のRediseを同じマシンで同時に実行できます。ただし、単一の専用エンジンを実行できます。

各DBMSエンジンには、多数のデータベース(数百のデータベースから数百のWebサイトなど)を含めることができます。

各データベース別名スキームには、いくつかのプロジェクトの多くのテーブル、ストアドルーチン、イベント、ビューを含めることができます。

文字通り、プロジェクトの山のすべてのデータを単一のデータベース内だけでなく、単一のテーブル内にも保存できます。しかし実際には、少なくとも個別のデータベースによってプロジェクトを互いに分離する方がはるかに便利です。ただし、一部のプロジェクトがホストのリソースを使い果たした場合、プロジェクトをホストごとに分離する必要があります。

特定の戦略は、プロジェクトのリソース消費と間接的な要素の数に依存します。

0
Kondybas