MySQL データベースにおける高同時実行性の問題を解決する方法

MySQL データベースにおける高同時実行性の問題を解決する方法

序文

スタートアップ企業が最初はモノリシック アプリケーションを主要なアーキテクチャとして使用し、通常は単一のモノリシック データベースの形式をとることは誰もが知っています。しかし、バージョンの反復に伴い、データベースはより高い同時実行性に耐える必要があり、これはアーキテクチャ設計で考慮する必要があるポイントになってきました。

したがって、問題を解決するには、解決策について話し合う必要があります。しかし、選択肢はたくさんありますが、どのように選択すればよいのでしょうか?

最適化とソリューション

基本的に、最適化は、短い距離、少ないデータ、分散された圧力といういくつかのキーワードから始める必要があります。

近距離

いわゆる短距離とは、フロントエンドからデータベースまでのパスが短いことを意味します。

  1. ページは静的です。一部のページのデータは一定期間変更されないため、このページを静的にするとアクセス速度が向上します。
  2. キャッシュを使用します。キャッシュについては誰もが知っていますが、キャッシュが高速な理由はメモリに基づいているからです。したがって、メモリベースのキャッシュを使用すると、データベースへのアクセスが削減され、アクセスが高速化されます。
  3. バッチ読み取り。同時実行性が高い状況では、複数のクエリを組み合わせて一度に実行することで、データベースへのアクセス速度を低下させることができます。
  4. 修正が遅れました。遅延変更とは、同時実行性の高い状況で、複数回変更されたデータがキャッシュに配置され、その後キャッシュ内のデータが定期的にデータベースに更新されるか、キャッシュ同期戦略による解析を通じてデータベースに非同期的に同期されることを意味します。
  5. インデックスを使用します。言うまでもなく、インデックスには、通常インデックス/主キーインデックス/複合インデックス/全文インデックスなど、さまざまな種類があります。

データが少ない

いわゆる「データが少ない」とは、実際にはクエリされるデータが少ないことを意味します。

  1. サブテーブル。いわゆるテーブル分割には、実際には水平分割と垂直分割が含まれます。スタンドアロン ゲームをプレイしたことがある友人は、一部の歴史的な形式には何億ものデータが含まれていることが多いことを知っています。この場合、MySQL では、インデックスを追加して SQL をさらに最適化しても、クエリ速度の向上は困難です。次に、サブテーブルの操作を通じてこれを実現できます。たとえば、最も一般的な方法は、時間ディメンションに基づいてテーブルを水平に分割し、今年のデータを保持し、昨年のデータを別のテーブルに保存することです。
  2. アクティブデータを分離します。実際、これはキャッシュに少し似ていますが、違いはデータがまだ MySQL 上にあることです。たとえば、製品クエリビジネスでは、人気のある製品や頻繁に検索される製品のアクティブなテーブルが存在する場合があります。クエリを実行するときは、まずアクティブ テーブルをクエリし、見つからない場合は合計製品テーブルをクエリします。
  3. チャンキング。このブロック分割は、アルゴリズムの「インデックス順次検索」に多少似ています。データレベルの最適化により、データは異なるブロックに配置され、対応するブロックを計算して見つけるだけで済みます。

圧力を分散する

いわゆる圧力分散とは、実際にはさまざまなデータベース サーバーの圧力を分散することを意味します。

  1. クラスタ。クラスターの概念は皆さんよくご存知だと思います。ビジネス サーバーの場合、クラスターとは実際には、同じビジネス プロセスを実行する複数のサーバーを展開し、負荷分散などの方法を使用してリクエストを異なるサーバーに分散することを意味します。同じことがデータベースにも当てはまり、特定のルール戦略を通じて特定のデータベース サーバーにデータを送信します。
  2. 配布されました。いわゆる分散とは、実際には、元々同じプロセスにあったビジネス ロジックを異なるサーバーに割り当てて実行することで、「同時」実行の効果を実現し、実行を高速化することを意味します。
  3. データベースとテーブルを分割します。データベースとテーブルのシャーディングの主な方法は、水平シャーディングと垂直シャーディングです。アクセス頻度が高く、データ量が多い単一テーブルの場合、単一テーブル内のデータを減らし、特定のディメンションに従って水平に分割して、データベースのスループットを向上させることができます。これがテーブルの水平分割です。業務の結合度が低い複数テーブルの場合、異なるテーブルを異なるデータベースに格納し、データベースを垂直に分割して、データベースの書き込み能力を向上させることができます。これがデータベースの垂直分割です。
  4. マスターとスレーブの関係を確立します。マスターとスレーブの関係を確立する目的は、実際には読み取りと書き込みを分離することです。データベースのトランザクション レベルが十分に高い限り、同時読み取りによってデータの混乱は発生しませんが、同時書き込みによって混乱が発生することは誰もが知っています。したがって、マスター/スレーブ サーバーをセットアップする場合、一般的に、書き込みはマスター サーバーに書き込まれ、読み取りはスレーブ サーバーで行われます。 したがって、基本的にはマスター サーバーでトランザクション操作を実行し、スレーブ サーバーで選択クエリを実行します。このようにして、トランザクション操作 (追加/削除/変更) によって発生した変更は、クラスター内のスレーブ データベースに同期されます。

結論

上記は、MySQL が高同時実行性を処理する方法の詳細です。MySQL の高同時実行性の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL シリーズ 10 同時実行制御を実装するための MySQL トランザクション分離
  • MySQL マルチバージョン同時実行制御メカニズム (MVCC) ソースコードの詳細な説明
  • MySQLのMVCCマルチバージョン同時実行制御の実装
  • 一意の注文番号を生成するためのMySQLの高同時実行方法
  • MySQL ロック制御同時実行方法
  • MySQL トランザクション同時実行問題の解決
  • MySQL 同時実行制御の原則に関する知識ポイント
  • MySQL マルチバージョン同時実行制御 MVCC の実装
  • MySQLデータの同時更新を処理する方法
  • Tomcat+Mysql の高同時実行構成の最適化の説明
  • MySQL はどのようにしてマルチバージョンの同時実行性を実現するのでしょうか?

<<:  jsを使用して簡単な抽選機能を実現する

>>:  Dockerで最もよく使われるイメージコマンドとコンテナコマンドの詳細な説明

推薦する

TypeScript の Enum が問題となる理由

目次どうしたの?いつ使うか列挙の数を制御するビット値コントロールインデックス非数値列挙結論はType...

マークアップ言語 - 画像の置き換え

123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...

Web プロジェクト開発における 2 つのトークン理由とサンプル コードの分析

目次質問:プロジェクトには 2 つのトークンがあり、1 つは有効期間が 2 時間 (ショート トーク...

Nginx 書き換えジャンプの適用シナリオの詳細な説明

アプリケーションシナリオ1: ドメイン名ベースのリダイレクト会社の古いドメイン名は www.accp...

docker コンペ応募でよく使われるコマンドのまとめ

アカウントにログイン DOCKER_REGISTRY=registry.cn-hangzhou.al...

jsは前のページに戻り、コードを更新します

1. Javascript は前のページ history.go(-1) に戻り、2 つのページを返し...

nginx + セカンダリドメイン名 + https サポートを使用する

ステップ1: Alibaba Cloudプライマリドメイン名にセカンダリドメイン名を追加する2 番目...

WeChatアプレットシングルページアプリケーションルーティングを徹底的に理解するための10分

シングルページアプリケーションの特徴「前提:」Web ページには、クリックするとサイト内の他のページ...

ウェブページの要素の検査とソースコードの表示の違いについて

Chrome ブラウザで Web ページを開くと、ページを右クリックすると 2 つの非常によく似たオ...

MySQL 8の新機能ウィンドウ関数の役割

MySQL 8.0 の新機能は次のとおりです。 Unicode 9.0 をすぐに完全にサポートウィン...

1つのコマンドで、シェルの読み取りコマンドの共通パラメータを理解できます。

Shell で受信パラメータを受信する方法は 2 つあることがわかっています。 1 つはスクリプト...

ブラウザのスクロールバーのスタイルを変更するための純粋な CSS の例

CSSを使用してブラウザのスクロールバーのスタイルを変更する ::-webkit-スクロールバー{ ...

Windows での MySQL スケジュールバックアップ スクリプトの実装

Windows サーバーでデータベース データを定期的にバックアップする場合は、Windows タス...

HTMLページが3秒後に自動的にジャンプする3つの一般的な方法

実際には、N 秒後にページを自動的にジャンプさせるにはどうすればよいかという問題によく遭遇します。私...

Centos7 に mysql と mysqlclient をインストールする際に遭遇する落とし穴の概要

1. MySQL Yumリポジトリを追加するMySQL公式サイト>ダウンロード>MySQ...