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

推薦する

ベスト HTML/CSS デザインおよび開発フレームワーク 15 選を紹介します

プロフェッショナルな Web デザインは複雑で時間がかかります。 HTML と CSS フレームワー...

JavaScript でシンプルなタイマーを実装する

この記事では、参考までに簡単なタイマーを実装するためのJavaScriptの具体的なコードを紹介しま...

JavaScript を使用して動的に生成されるテーブルの詳細な説明

*ページを作成する: 2つの入力ボックスとボタン*コードと手順/* 1. 入力行と列の値を取得する2...

MySQL 5.6 のインストール手順(画像とテキスト付き)

MySQL はオープンソースの小規模リレーショナル データベース管理システムです。現在、MySQL...

JavaScript でフロントエンドのカウントダウン効果を実装する

この記事では、フロントエンドのカウントダウン効果を実現するためのJavaScriptの具体的なコード...

PC/Pad/Phoneデバイスに自動的に適応するCSSウェブページレスポンシブレイアウト

序文最近は、PC、iPad、携帯電話、スマートウォッチ、スマートテレビなど、さまざまなデバイスが存在...

JSはキャンバス技術を使用してeChartsの棒グラフを模倣します

Canvas は HTML5 の新しいタグです。js を使用して Canvas 描画 API を操作...

MySQLデータベースに画像を保存するいくつかの方法

通常、ユーザーがアップロードした写真はデータベースに保存する必要があります。一般的に、解決策は 2 ...

MySQLが2つのテーブルを関連付ける際のエンコードの問題と解決策

Mysqlが2つのテーブルを関連付けると、次のエラーメッセージが生成されます:照合順序の不正な組み合...

Linux 向けの強化されたスクリーンショットと共有ツール: ScreenCloud

ScreenCloud は、必要だとは思わなかった素晴らしい小さなアプリです。デスクトップ Lin...

リンクAの意味論、書き方、ベストプラクティス

リンク A のセマンティクス、ライティング スタイル、およびベスト プラクティス。私は JavaEy...

開発者がデータベースロックを詳細に理解する必要がある理由

1.ロックしますか? 1.1 ロックとは何ですか?ロックの本当の意味は、鍵またはコードで開くことがで...

XHTML言語のデフォルトCSSスタイル

html、アドレス、引用ブロック、本文、dd、div、 dl、dt、フィールドセット、フォーム、フレ...

a タグにはテキストと画像があります。テキストを非表示にして画像のみを表示するにはどうすればよいでしょうか?

多くの場合、画像を表示する<a>タグのスタイルに遭遇しますが、タグ内にテキストがあり、そ...

docker を使用した pxc クラスターのインストールに関する詳細なチュートリアル

目次序文事前準備ディレクトリを作成するcustom.cnf を作成する証明書を作成するpxc クラス...