データベース分散の核となる内容は、データの分割(シャーディング)と分割後のデータの配置と統合に他なりません。データ分割とは、複数のデータベースにデータを分散して格納することで、単一データベースのデータ量が少なくなり、ホスト数の拡張によって単一データベースのパフォーマンス問題が緩和され、データベース操作のパフォーマンスを向上させるという目的を達成します。 データのセグメンテーションは、セグメンテーションの種類によって、垂直(縦方向)セグメンテーションと水平(横方向)セグメンテーションの 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のアロー関数の特徴と通常の関数との違い
>>: ウェブサイトの再設計はどの家族にとっても難しい作業です
1. 時間の種類は次のように分けられます。 1. ネットワーク時間(タイムゾーンの設定、ntpサーバ...
目次スケルトンスクリーンとはアプレットでスケルトン画面を生成する方法導入方法表示と非表示ユーザーエク...
Ubuntu 16.04 に MySQL 5.7 をインストールするにはどうすればいいですか?メイ...
Centos7 上で openresty 用の Dockerfile を作成し、ビルドしました。 d...
目次序文1. Axiosの紹介2. HTTPインターセプターの設計と実装2.1 インターセプターの紹...
更新: 最近、サーバーがマイニング ウイルスによってハッキングされたことが判明しました。これは、おそ...
序文良い習慣はすべて宝物です。この記事は、SQL の後悔の治療法、SQL パフォーマンスの最適化、S...
使用される Docker イメージが増えるにつれて、イメージを保存する場所、つまりウェアハウスが必要...
関連する知識ポイント親コンポーネントから子コンポーネントに値を渡す子コンポーネントから親コンポーネン...
開発動向: html (ハイパーテキスト マークアップ言語) - xhtml (拡張ハイパーテキスト...
最近、開発中に両端が揃ったレイアウトに遭遇しました。レイアウトはパーセンテージに基づいていました。以...
現在、WeChatパブリックアカウントの運用活動が多く、写真を生成する必要があります。生成された写真...
1. 環境: MySQL-5.0.41-win32 Windows XP プロフェッショナル2. テ...
序文: Jenkins のマスター スレーブ分散アーキテクチャは、主に、Jenkins に単一ポイン...
繰り返し: サイト全体で特定のページ デザイン スタイルを繰り返します。繰り返し要素としては、特定の...