ホームページ > php教程 > php手册 > PHP + MySQL を使用してデータベースの過負荷の問題に対処することに関する考えと概要

PHP + MySQL を使用してデータベースの過負荷の問題に対処することに関する考えと概要

WBOY
リリース: 2016-06-21 08:57:48
オリジナル
1439 人が閲覧しました

以下は、PHP + MySQL を使用してデータベースの過負荷の問題を処理することについての私の考えと概要です。経験不足の部分がたくさんあるはずです。専門家の方々にアドバイスをいただければ幸いです。

設計時には、合理的なテーブル構造と対応するテーブルがどの程度のアクセス圧力に耐えられるか、テーブルを分割する必要があるかどうか、テーブルを分割する必要がある場合は各テーブルに何件のレコードを配置するかを考慮します。 ;

サブテーブルの実装には、PHP または MySQL に付属の MERGE テーブル タイプ (つまり、MRG_MyISAM) を使用できます。

⑴PHP を使用している場合は、次の 2 つの状況があります:

① データのない新しいデータベースとテーブルは、圧力に耐えられるように準備する必要があります。たとえば、チャット ルームの開始時には、いくつかの条件に基づいて、複数のサブチャット ルームが存在する可能性があることを考慮する必要があります。主キーや ID 範囲など、アルゴリズムが作成されると、対応するアルゴリズムに従って同じ構造の異なる名前のテーブルに割り当てられ、保存されます。

② 解凍が必要なデータがすでに大量に存在するデータベースの場合は、アクセス頻度に応じて、よく使用するデータを 1 つのテーブルに配置し、あまりアクセスされないデータは別のテーブルに配置するなど、一定のルールに従うことができます。テーブルの 。データにアクセスするときは、最初によく使用されるテーブルにアクセスし、見つからない場合は次に一般的ではないテーブルにアクセスします。

⑵ MySQL 独自のテーブル分割方法を使用する場合は、MySQL の MERGE テーブル タイプ (つまり、MRG_MyISAM) を使用します。現時点では、教育大学内にすでに大量のデータがあり、単一のデータ テーブルでは負荷に耐えられない場合に、この方法が一般的に使用されます。phpMyadmin などのツールを使用して、これに関連するテーブルのタイプを変更できます。ただし、最初のテーブル分割を除いて、後続のデータが最後のサブテーブルに追加されるため、この操作は注意して行う必要があります。 -table テーブルを再度分割する場合は、テーブルを手動で処理し、関連する「indicates.MRG」ファイルを編集すると同時に、新しいサブテーブルの「ALTER TABLE tablename AUTO_INCREMENT = xxx」を編集する必要があります。処理する必要があります。

MERGE テーブルを使用する場合、マニュアルに記載されているいくつかの問題に注意する必要があります。 ① ALTER TABLE を使用して MERGE テーブルを他のテーブル タイプに変更すると、基になるテーブルへのマッピングが失われます。代わりに、基になる MyISAM テーブルの行が置換されたテーブルにコピーされ、新しいタイプが割り当てられます。

②REPLACEが効かない。

③WHERE 句のない DROP TABLE や、開いている MERGE テーブル、ALTER TABLE、DELETE FROM にマップされているテーブルで REPAIR TABLE、TRUNCATE TABLE、OPTIMIZE TABLE、ANALYZE TABLE を使用することはできません。これを行うと、MERGE テーブルは元のテーブルを指したままになるため、予期しない結果が生じる可能性があります。この欠点に対する最も簡単な解決策は、これらの操作を実行する前に FLUSH TABLES ステートメントを発行して、開いたままの MERGE テーブルがないようにすることです。

④MERGE テーブルはテーブル全体の UNIQUE 制約を維持できません。 INSERT を実行すると、データは最初または最後の MyISAM テーブルに挿入されます (INSERT_METHOD オプションの値に応じて)。 MySQL は、一意のキー値がその MyISAM テーブル内で一意であることを保証しますが、コレクション内のすべてのテーブル間では一意ではありません。

⑤MERGE テーブルを作成するとき、基になるテーブルが存在し、同じ構造であることを確認するチェックはありません。 MERGE テーブルが使用される場合、MySQL はマップされた各テーブルのレコード長が等しいことをチェックしますが、これはあまり信頼できません。異なる MyISAM テーブルから MERGE テーブルを作成すると、奇妙な問題が発生する可能性が高くなります。

⑥MERGE テーブル内のインデックスの順序は、基になるテーブル内のインデックスと同じである必要があります。 ALTER TABLE を使用して MERGE テーブルで使用されているテーブルに UNIQUE インデックスを追加し、次に ALTER TABLE を使用して MERGE テーブルに非一意のインデックスを追加する場合 (基礎となるテーブルに非一意のインデックスがすでに存在する場合) table、テーブルのインデックス 順序が異なります。 (これは、重複キーの迅速な検出を容易にするために、ALTER TABLE が非一意のインデックスの前に UNIQUE インデックスを配置するためです)。したがって、そのようなインデックスを使用するテーブルに対するクエリでは、予期しない結果が返される可能性があります。

⑦ Windows では、MERGE エンジンのテーブル マッピングが MySQL の上位層から隠蔽されているため、MERGE テーブルで使用されるテーブルに対して DROP TABLE は機能しません。 Windows では開いているファイルの削除が許可されていないため、このテーブルを削除する前に、最初にすべての MERGE テーブルを (FLUSH TABLES を使用して) 更新するか、MERGE テーブルを削除する必要があります。



関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート