表の目的プロジェクトの開発中に、データベースのデータがどんどん大きくなり、その結果、1 つのテーブルにデータが多すぎる状態になります。その結果、データクエリが遅くなり、テーブルロックメカニズムによりアプリケーション操作が深刻な影響を受け、データベースパフォーマンスのボトルネックが発生します。 このような状況では、テーブルを分割すること、つまり、単一のデータベース テーブルを複数のデータ テーブルに分割することを検討できます。その後、ユーザーがデータにアクセスすると、特定のアルゴリズムに従って異なるテーブルにアクセスできます。このようにして、データは複数のデータ テーブルに分散され、単一のデータ テーブルへのアクセス負荷が軽減されます。データベース アクセス パフォーマンスが向上しました。 例えばたとえば、最も一般的なユーザーテーブル(ユーザーテーブル)
通常、user_id を使用して対応するユーザー情報をクエリしますが、ビジネスが拡大するにつれて、このテーブルはどんどん大きくなり、数億に達することもあり、クエリのパフォーマンスに重大な影響を与えます。 そこで、クエリの負荷を軽減するために、このテーブルを複数のテーブルに分割します。 テーブル分割戦略10 個のテーブルを例にとると (具体的なテーブル数は実際の状況に基づいて見積もる必要があります)、最初に user1、user2、user3 の 10 個のテーブルを作成します。 。 。 。 。ユーザー10 通常、モジュロ処理にはインデックス フィールド (user_id) を使用します。テーブルを必要な数だけ分割したい場合は、係数を自由に使用できます。たとえば、この場合は 10 です。 $table_name = $user_id % 10; 上記の係数式によれば
「上記のテーブル検索の戦略に従って、毎回CURDが実行される」、これは大きな問題ではないので、今はこれについては触れません。 すでにオンラインになっている実行中のテーブルはどうすればよいですか?実際、上記の方法の使い方は誰もが知っているはずですが、問題があります。すでにオンラインになっているテーブルをどうすればいいのでしょうか?そのテーブル内のデータは常にオンラインで検索または変更されています。ユーザーに気付かれずにテーブルをスムーズに分割するにはどうすればよいでしょうか? 方法1 直接オンラインになり、事前にスクリプトを記述します。スクリプトの内容は、古いテーブル(ユーザー)のデータをuser1テーブルとuser10テーブルに同期することです。オンラインになったらすぐに実行します この方法は、主に以下の問題により、明らかに実現不可能である。
これは明らかに機能せず、オンライン コミュニティに大きな影響を与えます。 方法2 まず、データを同期するためのスクリプトを作成します。スクリプトの内容は、古いテーブル (ユーザー) のデータを user1 テーブルと user10 テーブルに同期することです。スクリプトの同期が完了したら、オンラインになります。 この方法はより親切であるように思えますが、いくつか問題もあります。
「上記の2つの方法は実行不可能なようですので、別の方法をとらなければならないようです。結論から先にいきましょう。」 ステップ1: デュアル書き込みを開始するまず、二重書き込みをネット上に載せましょう。これはどういう意味でしょうか?たとえば、user_id=123 の場合、追加、削除、変更操作では、user_id=123 に対応する user テーブルと user3 テーブルの両方を操作します。 function modify($user_id){ //追加、削除、変更操作が含まれます。modify_user(); //ユーザーテーブルを変更します。$table_name = $user_id % 10; modify_user($table_name) //対応するサブテーブルを変更する} クエリはまだユーザー テーブル内にあるため、上記の操作はオンライン ユーザーには影響しません。 ステップ2: 完全同期ユーザー テーブルを user1-user10 テーブルに完全に同期するスクリプトを作成します。スクリプトがユーザー テーブルのクエリに影響を与える可能性があるため、ピークの少ない期間を見つけてスクリプトを実行するのが最適です。 この手順を実行すると、以前にデュアル書き込みを開始しているため (手順 1 を参照)、ユーザー テーブルと user1-user10 テーブル間のデータは完全に整合します。 ステップ3: 新しいテーブルデータをクエリするクエリ部分をuser1-user10に変更します 前の 2 つの手順で、ユーザー テーブルと各サブ テーブル間のデータの完全な一貫性が確保されているため、クエリ部分を直接変更しても問題はありません。 上記の手順に従えば、オンラインデータに影響はありません。これが当社のオンライン運用方法です。何度も実践した結果、問題がないことを確認しています。安心してご利用いただけます。 要約するこれで、MySQL テーブル パーティショニングをスムーズに起動する方法についての記事は終了です。MySQL テーブル パーティショニングをスムーズに起動する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: 優れたユーザー インターフェース デザインのための 37 のヒント (画像付き)
>>: HTML タグの表示モード (ブロックレベル タグ、インライン タグ、インライン ブロック タグ) に関する簡単な説明
目次水波効果実装を見てみましょう水の波紋のデフォルトスタイルをカスタマイズする水の波紋の位置と直径を...
さっそく、コードを直接投稿します。具体的なコードは次のとおりです。 <!DOCTYPE htm...
目次サンプルコードレンダリングコード分析要約するサンプルコード var データ = [220, ...
1. 問題の出現フラット リストを作成しました。リストの一部には、マウスをホバーすると表示されるポッ...
オブジェクトの hasOwnProperty() メソッドは、オブジェクトに特定の独自の (継承され...
Linux システムに触れたばかりの初心者として、VMware 仮想マシンに CentOS6.5 シ...
くさびコンピュータにインストールされている MySQL のバージョンが比較的古く、おそらくバージョン...
Supervisor は非常に優れたデーモン管理ツールです。自動起動、ログ出力、自動ログカットなど、...
1. 準備1.1 service.bat を含む tomcat 圧縮パッケージをダウンロードします。...
序文Linux 運用保守エンジニアとして、日々の業務の中で Linux サーバーの CPU 負荷が ...
CentOS 7.3のインストール手順を図解しました。具体的な内容は次のとおりです。この記事では、v...
目次1. プラットフォームバスの紹介1.1. Linuxドライバの分離と階層化1.1.1. Linu...
CSSの背景プロパティの値背景色背景画像背景繰り返し背景位置背景添付複合プロパティ: 背景: ba...
目次序文DockerファイルDockerfile とは何ですか? Dockerfile 構文Spri...
前面に書かれた近年、ライブストリーミング業界は非常に人気が高まっています。伝統的な業界でのライブスト...