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で最もよく使われるイメージコマンドとコンテナコマンドの詳細な説明

推薦する

CSS を使用してデータ ホットスポット効果を実現する方法

効果は以下のとおりです。 分析する1. ここでは、点を囲む 3 つの円がズームアニメーションを実行し...

Vueは、サイドナビゲーションバーをタブページに関連付けるサンプルコードを実装します。

目次テクノロジースタック効果分析するテクノロジースタックサイドバー用Antdtabは要素を使用します...

grep を使用して MySQL エラー ログ情報を取得する方法の詳細な説明

MySQL のメンテナンスを容易にするために、エラー情報を収集するためのインターフェースを提供するス...

Docker ロード後にイメージ名が none になる問題の解決方法

最近、docker load -i コマンドを使用してイメージ パッケージを圧縮した後、イメージ名と...

MySQL の挿入およびバッチ ステートメントのいくつかの例の詳細な説明

目次序文1.無視を挿入2. 重複キーの更新時3. を置き換える4.存在しない場合は挿入する5. デー...

Docker を使って LEMP 環境を素早く構築する方法の例

LEMP(Linux + Nginx + MySQL + PHP)は、基本的に今日のWeb開発者にと...

http:// の代わりに // を使用する利点は何ですか (アダプティブ https)

//デフォルトプロトコル/ デフォルト プロトコルの使用は、リソース アクセス プロトコルが現在の...

入力タグの名前と値の違い

type はブラウザでの入力と出力に使用されるコントロールです (たとえば、type="t...

VMware での Ubuntu Docker のインストール (コンテナ構築)

1. マインドマップ 2. コンテナの構築方法2.1 実験環境の準備(1)環境選択管理ツール: D...

MySQL 8.0.11 圧縮版のインストールチュートリアル

この記事では、MySQL 8.0.11のインストールチュートリアルを参考までに紹介します。具体的な内...

MySQL 5.7.17 winx64 のインストールと設定方法のグラフィックチュートリアル

Windows インストール mysql-5.7.17-winx64.zip メソッド レコード &...

Dockerボリュームマウントの実装方法

最も単純な hello world 出力イメージを作成することは最も簡単なスタートですが、実行中のコ...

npmとcnpmを混在させる際の落とし穴の詳細な説明

目次原因理由NPM の紹介: CNPM の紹介:より良い方法方法の改善npm と cnpm を一緒に...

JavaScript マウスイベントのケーススタディ

マウスイベントマウスが特定の操作を実行すると、イベント オブジェクトが生成され、イベントがトリガーさ...

Mysql の一般的なベンチマーク コマンドの概要

mysqlslap共通パラメータの説明–auto-generate-sql システムはテスト用のSQ...