データベース分散の核となる内容は、データの分割(シャーディング)と分割後のデータの配置と統合に他なりません。データ分割とは、複数のデータベースにデータを分散して格納することで、単一データベースのデータ量が少なくなり、ホスト数の拡張によって単一データベースのパフォーマンス問題が緩和され、データベース操作のパフォーマンスを向上させるという目的を達成します。 データのセグメンテーションは、セグメンテーションの種類によって、垂直(縦方向)セグメンテーションと水平(横方向)セグメンテーションの 2 種類に分けられます。 1. 縦方向のスライス垂直セグメンテーションには、垂直データベース セグメンテーションと垂直テーブル セグメンテーションという 2 つの一般的なタイプがあります。 1.1 垂直データベースつまり、ビジネス結合に基づいて、相関性の低い異なるテーブルが異なるデータベースに格納されます。このアプローチは、ビジネスに基づいて大規模なシステムを複数の小規模なシステムに分割するのと似ています。 カテゴリは独立して分割されます。 「マイクロサービス ガバナンス」アプローチと同様に、各マイクロサービスは個別のデータベースを使用します。図に示すように: 異なるモジュールのデータ テーブルは、個別のライブラリに保存されます。モジュールは互いに関連していません。 もしそうなら、データの冗長化や二次処理によって解決する必要があります。このビジネス手法とデータ構造は最も明確です。ただし、データベース間関連のクエリを防止できない場合は、このパスを別のものとして宣言します。 1.2 垂直テーブル分割これは、データベース内の「列」に基づいています。テーブルに多くのフィールドがある場合は、新しい拡張テーブルを作成し、頻繁に使用されないフィールドやフィールド長が長いフィールドを拡張テーブルに分割することができます。フィールドが多数ある場合 (たとえば、大きなテーブルに 100 を超えるフィールドがある場合)、「大きなテーブルを小さなテーブルに分割する」と、開発と保守が容易になり、ページ間の問題を回避できます。MySQL は、最下層のデータ ページを通じてデータを格納します。レコードが占めるスペースが大きすぎると、ページ間をまたがってしまい、パフォーマンスのオーバーヘッドがさらに増大します。さらに、データベースは行単位でデータをメモリにロードするため、テーブル内のフィールドが短くなり、アクセス頻度が高くなります。メモリはより多くのデータをロードでき、ヒット率も高くなるため、ディスク IO が削減され、データベースのパフォーマンスが向上します。 垂直セグメンテーションの利点:
欠点:
2. 水平(横断)セグメンテーションアプリケーションをより細かい粒度で垂直に分割することが難しい場合、または分割後のデータ行の量が膨大で、単一データベースの読み取り、書き込み、およびストレージのパフォーマンスにボトルネックがある場合は、水平分割が必要になります。 水平シャーディングは、データベース内シャーディングとサブデータベース シャーディングに分けられます。テーブル内のデータの固有の論理関係に基づいて、異なる条件に従って同じテーブルを複数のデータベースまたは複数のテーブルに分散します。各テーブルにはデータの一部のみが含まれるため、単一のテーブル内のデータ量が削減され、分散効果が得られます。図に示すように:
データベース内のテーブルを分割すると、1 つのテーブルにデータが多すぎるという問題は解決されますが、テーブルを異なるマシン上のデータベースに分散させることはできません。したがって、MySQL データベースへの負荷を軽減するのにはあまり役立ちません。誰もが同じ物理マシンの CPU、メモリ、ネットワーク IO を奪い合っています。データベースとテーブルを分割してこの問題を解決するのが最適です。 水平シャーディングの利点:
欠点:
水平シャーディング後、同じテーブルが複数のデータベース/テーブルに表示され、各データベース/テーブルの内容は異なります。一般的なデータ シャーディング ルールは次のとおりです。 2.1 数値範囲に応じて時間間隔または ID 間隔で除算します。たとえば、異なる月や日のデータを日付ごとに異なるデータベースに分散します。userId が 1 ~ 9999 のレコードを最初のデータベースに分散し、userId が 10000 ~ 20000 のレコードを 2 番目のデータベースに分散します。ある意味では、一部のシステムで使用されている「コールド データとホット データの分離」も同様の手法です。これは、あまり使用されていない履歴データを他のデータベースに移行し、ビジネス機能ではホット データに対してのみクエリを実行するものです。 これには次のような利点があります。
欠点:
2.2 値による剰余一般的には、ハッシュ係数分割法が使用されます。たとえば、Customer テーブルは、cusno フィールドに従って 4 つのデータベースに分割されます。余りが 0 のデータは最初のデータベースに配置され、余りが 1 のデータは 2 番目のデータベースに配置されます。この方法では、同じユーザーのデータが同じデータベースに分散されます。クエリ条件に cusno フィールドが含まれている場合、クエリに対応するデータベースを明確に見つけることができます。 アドバンテージ:
欠点:
上記は、MySQL テーブルとデータベースをシャーディングしてデータセグメンテーションを実行する方法の詳細です。MySQL テーブルとデータベースをシャーディングしてデータセグメンテーションを実行する詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: JavaScriptのアロー関数の特徴と通常の関数との違い
>>: ウェブサイトの再設計はどの家族にとっても難しい作業です
この記事の例では、Vueスライダー検証の実装を共有しています。コードは次のとおりです。 <テン...
目次1. パラダイム基盤1.1 パラダイムの概念2. 3つの主要なパラダイム2.1 3つの主要なパラ...
ブログの正式名称は「Web log」で、中国語で「ネットワークログ」を意味します。後にブログに短縮さ...
目次ビジネス要件:解決策 1: vuex-persistedstate解決策2: vuex-pers...
Web ページ制作では、input と img が同じ行に配置されることが多く、img タグが常に ...
Alpine イメージの telnet はバージョン 3.7 以降、busybox-extras パ...
目次MySQL テーブルの断片化の原因行の断片化行内断片化空き領域の断片化MySQL で極度に断片化...
HTML構造 <本文> <div class="wrapper"...
この記事では、キャンバスを使用してWeChatアプレットに時計を描く具体的なコードを参考までに共有し...
目次デバッガーを使用する理由は何ですか? Chromeデバッガーの基本的な使い方VS Code によ...
配列メソッドJavaScript には多くの配列メソッドが用意されています。次の図は、ほとんどの配列...
1. シナリオ表示Tomcat ログに次の例外情報が時々報告されます。何が起こっているのでしょうか...
123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...
以下の機能が実装されています。 1. ユーザー名: onfouc は msg ルールを表示します。o...
この記事は、透明度を変えてカルーセルにするXiaomiカルーセルを真似て書いたものです。初心者なので...