1. データベースのボトルネックIO ボトルネックであろうと CPU ボトルネックであろうと、最終的にはデータベースのアクティブ接続数が増加し、データベースが処理できるアクティブ接続数のしきい値に近づいたり、さらには到達したりします。ビジネス サービスの観点から見ると、利用可能なデータベース接続はほとんどないか、まったくありません。次に何が起こるかは想像がつきます (同時実行性、スループット、クラッシュ)。 1. IOボトルネック 最初のタイプ: ディスク読み取り IO ボトルネック。ホット データが多すぎるため、データベース キャッシュに保存できません。各クエリで大量の IO が生成され、クエリ速度が低下します -> シャーディングと垂直シャーディング。 2 番目のタイプ: ネットワーク IO ボトルネック、要求されるデータが多すぎる、ネットワーク帯域幅が不十分 -> シャーディング。 2. CPUボトルネック 1 つ目のタイプ: SQL の問題。たとえば、SQL に join、group by、order by、非インデックス フィールド条件クエリなどが含まれる場合、CPU 計算操作が増加します -> SQL の最適化、適切なインデックスの確立、ビジネス サービス レイヤーでのビジネス計算の実行など。 2 番目のタイプ: 単一テーブル内のデータ量が大きすぎるため、クエリ中にスキャンされる行数が多すぎて、SQL 効率が低く、CPU が最初のボトルネックになる -> 水平テーブル パーティション分割。 2. サブライブラリとサブテーブル1. 水平データベース 概念:フィールドと特定の戦略 (ハッシュ、範囲など) に基づいて、1 つのデータベース内のデータを複数のデータベースに分割します。 結果:
シナリオ:システムの絶対的な同時実行性が増加し、テーブル シャーディングでは根本的な問題の解決が困難です。また、データベースを垂直にシャーディングするための明確な業務提携がありません。 分析:ライブラリが増えると、IO と CPU への負荷が飛躍的に軽減されます。 2. 横長テーブル 概念:フィールドと特定の戦略 (ハッシュ、範囲など) に基づいて、1 つのテーブル内のデータを複数のテーブルに分割します。 結果:
シナリオ:システムの絶対的な同時実行性は向上していませんが、単一テーブル内のデータ量が大きすぎるため、SQL の効率に影響し、CPU の負荷が増加してボトルネックになります。推奨: SQLクエリ最適化の原則の分析 分析:テーブル内のデータ量が削減され、単一のSQL実行の効率が高くなり、CPUへの負担が自然に軽減されます。 3. 垂直サブデータベース概念:テーブルに基づいて、さまざまなビジネス属性に応じてさまざまなテーブルが異なるデータベースに分割されます。 結果:
シナリオ:システムの絶対的な同時実行性が向上し、個別のビジネス モジュールを抽象化できるようになりました。 分析:この時点で、基本的にサービスに変えることができます。 たとえば、ビジネスが発展するにつれて、公開されている構成テーブルや辞書テーブルが増えていきます。このとき、これらのテーブルを別のライブラリに分離したり、サービス化したりすることもできます。さらに、ビジネスが発展し、一連のビジネス モデルが開発されると、関連するテーブルを個別のデータベースに分離したり、サービスに変換したりすることもできます。 4. 縦型テーブル 概念:フィールドに基づき、フィールドのアクティビティに応じて、テーブル内のフィールドは異なるテーブル (メイン テーブルと拡張テーブル) に分割されます。 結果:
シナリオ:システムの絶対的な同時実行性は向上していません。テーブルにはレコードは多くありませんが、フィールドは多くあります。ホット データと非ホット データが一緒に保存されるため、1 行のデータに必要なストレージ スペースが大きくなります。その結果、データベース キャッシュ内のデータ行数が減少し、クエリ中にディスク データを読み取るときに大量のランダム読み取り IO が生成され、IO ボトルネックが発生します。 分析:リスト ページと詳細ページを使用して理解を深めることができます。垂直テーブル分割の原則は、ホット データ (冗長性があり、一緒にクエリされることが多いデータ) をメイン テーブルとしてまとめ、非ホット データを拡張テーブルとしてまとめることです。この方法では、より多くのホット データをキャッシュできるため、ランダム読み取り IO が削減されます。分割後、すべてのデータを取得するには、2 つのテーブルを結合してデータを取得する必要があります。 ただし、結合は CPU の負荷を増やすだけでなく、2 つのテーブルを結合してしまうため (1 つのデータベース インスタンス上に存在する必要があります)、結合は絶対に使用しないでください。関連データについては、ビジネス サービス レイヤーで作業し、メイン テーブルと拡張テーブルのデータを個別に取得し、関連フィールドを使用して関連付けることですべてのデータを取得する必要があります。 3. ライブラリとテーブルシャーディングツール
4. データベースとテーブルを分割する手順容量 (現在の容量と増加) に基づいてシャードまたはテーブルの数を評価 -> キーを選択 (均等に) -> テーブル シャーディング ルール (ハッシュまたは範囲など) -> 実行 (通常は二重書き込み) -> 容量拡張の問題 (データの移動を最小限に抑える)。 5. シャーディングの問題1. 非パーティションキークエリの問題水平データベースとテーブルシャーディングに基づく分割戦略は、一般的に使用されるハッシュ方式です。 パーティションキーに加えて、クエリの条件としてクライアント上にはパーティション以外のキーが1つだけあります。 マッピング方法 遺伝学的方法
パーティションキーに加えて、クライアントのクエリの条件として複数の非パーティションキーがあります。 マッピング方法 冗長化方式
パーティションキーに加えて、バックグラウンドにはさまざまな非パーティションキーの組み合わせ条件クエリもあります。 NoSQLアプローチ 冗長化方式 2. パーティションキーなしのデータベース間およびテーブル間のページングクエリの問題水平データベースとテーブルシャーディングに基づく分割戦略は、一般的に使用されるハッシュ方式です。
3. 容量拡張の問題水平データベースとテーブルシャーディングに基づく分割戦略は、一般的に使用されるハッシュ方式です。 データベースの水平拡張(データベース方式からのアップグレード)
水平拡張テーブル(ダブルライト移行方式) ステップ 1: (同期デュアル書き込み) アプリケーションの構成とコードを変更し、デュアル書き込みを追加してデプロイします。 ステップ 2: (同期デュアル書き込み) 古いデータベースの古いデータを新しいデータベースにコピーします。 ステップ 3: (同期デュアル書き込み) 古いデータベースに基づいて、新しいデータベース内の古いデータを検証します。 ステップ 4: (同期二重書き込み) アプリケーションの構成とコードを変更し、二重書き込みを削除してデプロイします。
6. サブライブラリとサブテーブルの概要データベースとテーブルを分割するには、まずボトルネックがどこにあるかを把握し、それから合理的に分割する必要があります (データベースを分割するか、テーブルを分割するか? 水平に分割するか、垂直に分割するか? 何回分割するか?)。また、データベースとテーブルを分割する目的で分割することはできません。 キーの選択は非常に重要です。均等分割クエリと非パーティション キー クエリの両方を考慮する必要があります。 要件が満たされている限り、分割ルールは可能な限り単純にする必要があります。 よく使われるMySQLシャーディングソリューションの概要についてはこれで終わりです。MySQLシャーディングの詳細については、123WORDPRESS.COMの以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも123WORDPRESS.COMをよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: CSSは解析プロセスでさまざまな読み込み効果を実装します
>>: ブラウザのCSS、JavaScript、背景画像のキャッシュをクリアする簡単な方法
目次共通キーエイリアスエイリアスが指定されていないキーシステム修飾キーカスタムキーエイリアス要約する...
1. シャドウソックスをインストールするsudo apt-get install python-pi...
目次レスト演算子とは何ですか? JavaScript 関数では REST 演算子はどのように機能しま...
現在、多くの企業が割引コードを通じてプロモーションを行っています。今では、8桁の割引コードを実装して...
当初の意図は、element-ui の $notify 通知をコンポーネントにカプセル化することでし...
成果を達成する実装コードhtml <div クラス = 'ラッパー'> ...
目次1. 双方向バインディング2. 他のタグを選択した場合にも同じ結果になりますか? 答えはもちろん...
Vue プラグインがエラーを報告しました: このページで Vue.js が検出されましたVueプラグ...
MySQL操作情報のクエリ show status -- すべての MySQL 操作情報を表示します...
シナリオリクエストが 10 件あるが、同時リクエストの最大数は 5 件で、リクエスト結果が必要である...
JavaScript の hasOwnProperty() メソッドは、Object のプロトタイ...
目次イベント駆動型とパブリッシュ・サブスクライブ型ブラウザの JavaScript ではイベント駆動...
目次1. WAFの背景2. WAFとは3. 動作原理4. WAF機能5. WAFと従来のファイアウォ...
インターネット時代が成熟するにつれて、オンライン広告の発展も加速しています。圧倒的な広告収入と完璧な...
この記事の例では、カスタムスクロールバーを実装するためのjsの具体的なコードを参考までに共有していま...