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

推薦する

MySQL の null と not null、null と空の値の違いの詳細な説明 ''''

MySQL を長い間使用してきた多くの人は、これら 2 つのフィールド属性の概念をまだよく理解して...

Nginx プロセス スケジューリングの問題の詳細な説明

Nginx は、マスター プロセス (MasterProcess) と、同じ数のホスト CPU コア...

Mysql マスタースレーブレプリケーションの注意事項の説明

1. マスター'x@xxxx:x'への接続エラー- 再試行時間: 60 再試行回数:...

Dockerコンテナシェルスクリプトの実行ステータスを監視する方法

シナリオ会社のプロジェクトはDockerでデプロイされています。原因不明ですが、コンテナが時々停止し...

Docker可視化ツールPortainerの導入と中国語翻訳

#docker 検索#docker プルポーター1. イメージを取得した後、中国語パッケージをダウン...

IE8互換表示(IE7モード)とスタンドアロンIE7の違いの詳細な説明

1つ。 IE8 互換表示の概要<br />新しいバージョンのブラウザが古い Web サイ...

PXEを使用してCentOS7.6を自動的にインストールする方法の詳細なチュートリアル

1. 需要ベースには 300 台の新しいサーバーがあり、CentOS7.6 オペレーティング システ...

Linuxで同一ファイルを見つける方法

コンピュータを使用すると、システム内に大量のゴミが生成されます。最も一般的なケースは、同じファイルが...

テーブルの動的な色の変更を実現するJavaScript

この記事では、テーブルの動的な色の変更を実現するためのJavaScriptの具体的なコードを参考まで...

Web ページのソース ファイルを表示できない場合はどうすればよいですか?

Q: Outlook または IE のどちらを使用している場合でも、マウスを右クリックすると、ポッ...

MySQLデータベースインデックスの詳細な紹介

目次マインドマップシンプルな理解インデックスモデルの進化二分探索木自己バランス型二分木BツリーB+ ...

Eclipseを使用してMySQLデータベースに接続する方法を説明します

序文常にエラーが発生するため、MySQL データベースに接続するプロセスを記録します。接続プロセス1...

Dockerを使用して開発環境を構築する方法を素早く習得します

プラットフォームが成長し続けるにつれて、プロジェクトの研究開発は、開発者向けのさまざまな外部環境、特...

Vueはユーザーログイン切り替えを実装します

この記事では、ユーザーのログイン切り替えを実現するためのVueの具体的なコードを例として紹介します。...

Avue でカスタム検索バーを実装し、検索イベントをクリアする実践

目次1. 検索バーの内容をカスタマイズする2. 検索ボタンをカスタマイズする検索バーをカスタマイズし...