データベース分散の核となる内容は、データの分割(シャーディング)と分割後のデータの配置と統合に他なりません。データ分割とは、複数のデータベースにデータを分散して格納することで、単一データベースのデータ量が少なくなり、ホスト数の拡張によって単一データベースのパフォーマンス問題が緩和され、データベース操作のパフォーマンスを向上させるという目的を達成します。 データのセグメンテーションは、セグメンテーションの種類によって、垂直(縦方向)セグメンテーションと水平(横方向)セグメンテーションの 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のアロー関数の特徴と通常の関数との違い
>>: ウェブサイトの再設計はどの家族にとっても難しい作業です
Windows 10 で Docker コンテナのポートにアクセスできない問題を解決する (ポート ...
故障したストレージ ドライブからデータを救出する場合でも、アーカイブをリモート ストレージにバックア...
目次序文Vue CLI での設定基本コードVueルーターの登場ネストされたルートの設定要約する序文V...
この記事では、ドラッグ効果を実現するためのJavaScriptの具体的なコードを参考までに紹介します...
インターフェースの役割:インターフェース (英語: interface) の機能は、簡単に言えば、コ...
この CSS リセットは、Eric Meyers の CSS リセットに基づいて変更されており、特に...
目次Docker-Maven-プラグインMavenプラグインの自動デプロイメント手順1. ホストマシ...
目次序文リスナーと計算プロパティの違いvue3 で watch を使用するにはどうすればいいですか?...
目次序文標準的なSFCの書き方スクリプト設定可変露出部品の取り付け小道具カスタムイベント要約する序文...
最近、セキュリティ製品をテストする必要があったため、mariadb の起動ユーザーを root に調...
この記事では、例を使用して、MySQL ストアド プロシージャにおけるカーソル (DECLARE) ...
前の 2 つの章を終えて、ボタンのフローティング アニメーションについて新たな理解が得られましたか?...
CentOS 7.3のインストール手順を図解しました。具体的な内容は次のとおりです。この記事では、v...
0. 環境この記事のオペレーティング システム: CentOS 7.2.1511 x86_64 My...
目次tf-gpu をダウンロード取得したtf-gpuイメージに基づいて独自のイメージを構築するイメー...