表の目的プロジェクトの開発中に、データベースのデータがどんどん大きくなり、その結果、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 タグの表示モード (ブロックレベル タグ、インライン タグ、インライン ブロック タグ) に関する簡単な説明
この記事では、VMware Workstation14 ProにUBuntu17.04をインストール...
実験環境: 1. CentOS 7 サーバー 3 台2. mysql5.7.26 (3台のマシンはす...
多くの場合、Web ページ開発を学ぶときに最初に印象に残るのは、html または htm サフィック...
序文クエリの最適化は一夜にして達成できるものではありません。対応するツールの使い方を学び、他の人の経...
目次序文1. scp2をインストールする2. テスト/本番環境サーバーのSSHリモートログインアカウ...
目次序文レンダリングsetTable コンポーネント使用結論序文フォームを使用して PC 側のプロジ...
display:bolck/none によるメニューバーの完成の効果 図 1:まず、完成したエフェク...
ローカル データベースに接続すると、Navicat for MySQL は以下のように 1045 エ...
目次1. PXCの紹介1.1 PXC の紹介1.2 PXC の特徴と利点1.3 PXCの限界と欠点1...
この記事では、jsとjQueryテクノロジーを使用して告白弾幕を実現する方法を紹介します。具体的な内...
さっそく、コードを直接投稿します。具体的なコードは次のとおりです。 <!DOCTYPE htm...
ゲーム史上最高スコアトップ100をチェックSQLコード cdb_playsgame ps から ps...
この記事では主に、CSS3 LESS で長いテキストの影を実装する方法を紹介し、皆さんと共有します。...
1 カーネルにtunモジュールがあるかどうかを確認する modinfo tun modprobe t...
静的ウェブサイトをホストできるサーバーは数多くあります。この記事では、nginx、apache、to...