序文
スタートアップ企業が最初はモノリシック アプリケーションを主要なアーキテクチャとして使用し、通常は単一のモノリシック データベースの形式をとることは誰もが知っています。しかし、バージョンの反復に伴い、データベースはより高い同時実行性に耐える必要があり、これはアーキテクチャ設計で考慮する必要があるポイントになってきました。 したがって、問題を解決するには、解決策について話し合う必要があります。しかし、選択肢はたくさんありますが、どのように選択すればよいのでしょうか? 最適化とソリューション 基本的に、最適化は、短い距離、少ないデータ、分散された圧力といういくつかのキーワードから始める必要があります。 近距離 いわゆる短距離とは、フロントエンドからデータベースまでのパスが短いことを意味します。
- ページは静的です。一部のページのデータは一定期間変更されないため、このページを静的にするとアクセス速度が向上します。
- キャッシュを使用します。キャッシュについては誰もが知っていますが、キャッシュが高速な理由はメモリに基づいているからです。したがって、メモリベースのキャッシュを使用すると、データベースへのアクセスが削減され、アクセスが高速化されます。
- バッチ読み取り。同時実行性が高い状況では、複数のクエリを組み合わせて一度に実行することで、データベースへのアクセス速度を低下させることができます。
- 修正が遅れました。遅延変更とは、同時実行性の高い状況で、複数回変更されたデータがキャッシュに配置され、その後キャッシュ内のデータが定期的にデータベースに更新されるか、キャッシュ同期戦略による解析を通じてデータベースに非同期的に同期されることを意味します。
- インデックスを使用します。言うまでもなく、インデックスには、通常インデックス/主キーインデックス/複合インデックス/全文インデックスなど、さまざまな種類があります。
データが少ない いわゆる「データが少ない」とは、実際にはクエリされるデータが少ないことを意味します。
- サブテーブル。いわゆるテーブル分割には、実際には水平分割と垂直分割が含まれます。スタンドアロン ゲームをプレイしたことがある友人は、一部の歴史的な形式には何億ものデータが含まれていることが多いことを知っています。この場合、MySQL では、インデックスを追加して SQL をさらに最適化しても、クエリ速度の向上は困難です。次に、サブテーブルの操作を通じてこれを実現できます。たとえば、最も一般的な方法は、時間ディメンションに基づいてテーブルを水平に分割し、今年のデータを保持し、昨年のデータを別のテーブルに保存することです。
- アクティブデータを分離します。実際、これはキャッシュに少し似ていますが、違いはデータがまだ MySQL 上にあることです。たとえば、製品クエリビジネスでは、人気のある製品や頻繁に検索される製品のアクティブなテーブルが存在する場合があります。クエリを実行するときは、まずアクティブ テーブルをクエリし、見つからない場合は合計製品テーブルをクエリします。
- チャンキング。このブロック分割は、アルゴリズムの「インデックス順次検索」に多少似ています。データレベルの最適化により、データは異なるブロックに配置され、対応するブロックを計算して見つけるだけで済みます。
圧力を分散する いわゆる圧力分散とは、実際にはさまざまなデータベース サーバーの圧力を分散することを意味します。
- クラスタ。クラスターの概念は皆さんよくご存知だと思います。ビジネス サーバーの場合、クラスターとは実際には、同じビジネス プロセスを実行する複数のサーバーを展開し、負荷分散などの方法を使用してリクエストを異なるサーバーに分散することを意味します。同じことがデータベースにも当てはまり、特定のルール戦略を通じて特定のデータベース サーバーにデータを送信します。
- 配布されました。いわゆる分散とは、実際には、元々同じプロセスにあったビジネス ロジックを異なるサーバーに割り当てて実行することで、「同時」実行の効果を実現し、実行を高速化することを意味します。
- データベースとテーブルを分割します。データベースとテーブルのシャーディングの主な方法は、水平シャーディングと垂直シャーディングです。アクセス頻度が高く、データ量が多い単一テーブルの場合、単一テーブル内のデータを減らし、特定のディメンションに従って水平に分割して、データベースのスループットを向上させることができます。これがテーブルの水平分割です。業務の結合度が低い複数テーブルの場合、異なるテーブルを異なるデータベースに格納し、データベースを垂直に分割して、データベースの書き込み能力を向上させることができます。これがデータベースの垂直分割です。
- マスターとスレーブの関係を確立します。マスターとスレーブの関係を確立する目的は、実際には読み取りと書き込みを分離することです。データベースのトランザクション レベルが十分に高い限り、同時読み取りによってデータの混乱は発生しませんが、同時書き込みによって混乱が発生することは誰もが知っています。したがって、マスター/スレーブ サーバーをセットアップする場合、一般的に、書き込みはマスター サーバーに書き込まれ、読み取りはスレーブ サーバーで行われます。 したがって、基本的にはマスター サーバーでトランザクション操作を実行し、スレーブ サーバーで選択クエリを実行します。このようにして、トランザクション操作 (追加/削除/変更) によって発生した変更は、クラスター内のスレーブ データベースに同期されます。
結論 上記は、MySQL が高同時実行性を処理する方法の詳細です。MySQL の高同時実行性の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:- MySQL シリーズ 10 同時実行制御を実装するための MySQL トランザクション分離
- MySQL マルチバージョン同時実行制御メカニズム (MVCC) ソースコードの詳細な説明
- MySQLのMVCCマルチバージョン同時実行制御の実装
- 一意の注文番号を生成するためのMySQLの高同時実行方法
- MySQL ロック制御同時実行方法
- MySQL トランザクション同時実行問題の解決
- MySQL 同時実行制御の原則に関する知識ポイント
- MySQL マルチバージョン同時実行制御 MVCC の実装
- MySQLデータの同時更新を処理する方法
- Tomcat+Mysql の高同時実行構成の最適化の説明
- MySQL はどのようにしてマルチバージョンの同時実行性を実現するのでしょうか?
|