1

MySQL / PHP:次の状況があります。1つのサーバーに約70のテーブルが何度もインストールされている1つのソフトウェアがあります(明確にするために、これはMyBBフォーラムです)。たとえば、これを500回インストールします(たとえば、例として、10の異なるテーマと5つの異なる言語の500の異なるフォーラム)。

私は次のオプションを見ています:

  1. すべてのフォーラムを1つのスキーマに保存し、フォーラムごとにプレフィックスを変更します。
  2. すべてのフォーラムを異なるスキーマ、同じプレフィックスで保存します。
  3. 70個のテーブルのセットを1つだけ作成し、選択のためにすべてのテーブルに「forumID」を追加します。
  4. 70個のテーブルのセットを多数作成し、すべてのテーブルにforumIDを追加し、1セットのテーブルを最大10〜100個のフォーラムに使用します。

1と2の場合、MyBBコードの多くを変更する必要はありません(メンテナンスが簡単です)。3と4の場合、選択されたすべてのテーブルを検出するために、すべてのクエリで使用される検索パターンを作成する必要があります。 WHERE句を追加(または存在しない場合は作成)して、forumID(困難な保守)も考慮します。

MyBBのメンテナンスでこれを判断すると、最初の2つの選択肢の1つになります。ただし、次のことも考慮する必要があります。MySQLサーバーのパフォーマンスが高く、高速なものは何ですか。

ありがとう、クリス

/ edit:すべてのフォーラムが同じコードを使用します。私はこのことの500の異なるインストールを維持する必要はありません...

4

3 に答える 3

1

スキーマprを複製するだけです。フォーラム。

引数:

  1. これは簡単に自動化できるプロセスであり、「forumid」列を使用するようにすべての SQL ステートメントを書き直すよりも、自動化する方が速いでしょう。
  2. このソリューションにより、新しいハードウェアに簡単に拡張できます。データベースのスケーリングは常に複雑でコストがかかります (インスタンス Web サーバーのスケーリングと比較して)。
  3. 各フォーラムを個別にすることで、たとえば上位 5 つのフォーラムを別のマシンに移動することもできます。これがお金を稼ぐものであれば、「プレミアムフォーラム」(サーバーごとに10、x $ /月)と「フリーミアムフォーラム」(無料ですが、すべて1つのサーバー上にあり、パフォーマンスの保証はありません)を持つことができます。
  4. 500 の異なるフォーラムがある場合、それぞれの使用率には大きな違いがあります。フォーラムごとに異なるテーブルを使用できるソリューションは、より効率的にキャッシュできるため、データベース サーバーでのキャッシュ ヒット率が高くなります (キャッシュ ヒット率は、高いキーです。データベースでのパフォーマンス)
于 2012-06-15T20:04:49.473 に答える
1

次の理由から、オプション 3 と 4 については忘れた方がよいと思います。

  • 公演

テーブルが大きくなり、インデックスも大きくなります。インデックスが大きいほど、挿入が遅くなります。選択はあまり影響を受けないかもしれません。

私の知る限り、すべてのバッファとキャッシュはインスタンス全体に適用されるため、この点に関してはすべてのオプションが同等です。

  • 管理

コードをリファクタリングする手間と、アップグレードのたびに作業をやり直す必要があることは、(私にとって) アイデアを捨てるのに十分です。さらに、アップグレード手順でさえ、カスタム レイアウトを考慮して微調整する必要があるでしょう。

おそらく、フォーラムを個別にバックアップおよび復元することをお勧めします。次に、バックアップ スクリプトを自分で作成する必要がありますmysqldump。この場合は役に立ちません。また、新しいテーブルが追加されるたびにバックアップ スクリプトを更新します (アップグレード中に発生する可能性があります)。

アップグレード中に、データベース構造が変更される場合があります。構造全体を一度に変更すると、一見ぞっとするように聞こえるかもしれません。しかしその後、500 のフォーラムすべてを同時に停止し、500 の小規模で迅速な変更ではなく、非常に長い構造変更を行う必要があります。

  • スケーラビリティ

(主にオプション 4 に適用されます) 必要に応じて、個々のフォーラム データベースを別のサーバーに移動することはより困難に思えます。

  • 安全

侵入者があなたのアプリケーションを侵害した場合、すべてのフォーラムへのアクセスを取得する方が簡単だと思いますが、これは単なる推測です.


テーブルが同じデータベース上にあるかどうかは構文の問題であり、オプション 1 と 2 は同じようにうまく機能します。

データベースごとにアクセス権を付与する方が簡単なので、オプション 2 を好みます。

于 2012-06-15T20:13:52.307 に答える
0

代替案 3 (Forum テーブルを作成し、他のテーブルに forumID 列を作成する) を選択します。

このようにして、さまざまなスキーマやテーブルを管理する必要なく、アプリケーションから新しいフォーラムを作成できます。

私の意見では、スキーマを変更することは、フォーラム テーブルに新しい行を作成するよりも桁違いに悪いことです。

于 2012-06-15T18:52:11.363 に答える