データベースミドルウェアMyCatの紹介

データベースミドルウェアMyCatの紹介

1. Mycatの適用シナリオ

Mycat は幅広いシナリオに合わせて開発されており、新しいユーザーが常に新しい革新的なソリューションを提供しています。以下に、いくつかの典型的なアプリケーション シナリオを示します。

  • 1. シンプルな読み取り/書き込み分離。現時点では最もシンプルな構成です。読み取り/書き込み分離とマスター/スレーブ切り替えをサポートします。
  • 2. テーブルとデータベースをシャードします。1,000 万以上のアイテムを含むテーブルをシャードします。テーブルあたり最大 1,000 億アイテムのシャーディングをサポートします。
  • 3. マルチテナントアプリケーション、各アプリケーションにはライブラリがありますが、アプリケーションはMycatにのみ接続するため、プログラム自体を変更せずにマルチテナントを実現できます。
  • 4. レポートシステムは、Mycatのテーブルパーティション機能を利用して、大規模なレポートの統計を処理します。
  • 5. Hbaseを置き換えてビッ​​グデータを分析する
  • 6. 大量データのリアルタイム クエリに対するシンプルで効果的なソリューションとして、たとえば、頻繁にクエリされる 100 億件のレコードを 3 秒以内にクエリする必要があります。主キー ベースのクエリに加えて、範囲クエリやその他の属性クエリもある場合があります。この場合、Mycat が最もシンプルで効果的な選択肢になる可能性があります。

MYCAT は、読み取りと書き込みの分離による読み取り操作の負荷分散を実現し、主に 1 つのマスターと複数のスレーブの場合に発生する、異なるスレーブ ライブラリへの多数の読み取り操作を分散します。

MYCAT は、データベースの高可用性を実現できます。データベース マスター ノードが使用可能な場合、書き込み可能なスレーブ ノードが構成されます。両方のノードは MYCAT で構成されます。マスター ノードがダウンすると、MyCAT は書き込み操作をバックアップ ノードに自動的にルーティングしますが、切り替え後のマスターとスレーブの継続的な同期はサポートされません。

読み取り/書き込み分離では継続的に増加するアクセス量に対応できなくなった場合、MYCAT はデータベースの垂直分割を実現し、すべてのデータベース テーブルをモジュールに分割し、異なるタイプのテーブルを異なるデータベース サーバーに分割します。

ビジネスボリュームが増大し、垂直分割後にデータベースのパフォーマンスに問題が発生した場合、水平分割が必要になります。これは一般にデータベースとテーブルのシャーディングと呼ばれます。データ量の多いテーブルデータは、異なるサーバーライブラリに分割されます。テーブル構造は同じで、MYCATを使用して水平分割を実現します。フロントエンドアプリケーションに対して完全に透過的であり、フロントエンドロジックを調整する必要はありません。

定義と分類から、これはオープンソースの分散データベースシステムであり、MySQLプロトコルを実装したサーバーです。フロントエンドユーザーはこれをデータベースプロキシと見なし、MySQLクライアントツールとコマンドラインを使用してアクセスできます。一方、バックエンドはMySQLネイティブプロトコルを使用して複数のMySQLサーバーと通信したり、JDBCプロトコルを使用してほとんどの主流のデータベースサーバーと通信したりできます。そのコア機能はテーブルとデータベースのシャーディング、つまり大きなテーブルをN個の小さなテーブルに水平に分割し、バックエンドのMySQLサーバーまたは他のデータベースに格納することです。

MyCat の現在のバージョンは、もはや単純な MySQL プロキシではありません。そのバックエンドは、MySQL、SQL Server、Oracle、DB2、PostgreSQL などの主流のデータベースをサポートできるほか、MongoDB などの新しい NoSQL ストレージ方式もサポートしています。将来的には、さらに多くの種類のストレージをサポートする予定です。エンドユーザーの観点から見ると、どの保存方法を使用しても、MyCat では、標準の SQL ステートメントをサポートする従来のデータベース テーブルを使用してデータを操作します。これにより、フロントエンドのビジネス システムの開発難易度が大幅に軽減され、開発速度が向上します。

2. 従来のリレーショナルデータベースの限界

従来のリレーショナル データベースは、スケーラビリティが不足しているため、ビッグ データに対処する際に大きな欠陥を抱えていますが、リレーショナル モデルとトランザクション メカニズムはほとんどのシステムに不可欠です。現在、業界では、従来のデータベースを分割 (垂直分割、水平分割などを含む) して、データベースのスケーラビリティを向上させるのが主流となっています。しかし、分割により、複数のデータ ソースの管理、ノード間の結合、分散トランザクションの問題など、新たな問題が発生しました。 Mycat がこれらの問題をどのように解決するかを見てみましょう。

複数のデータソース管理の問題

複数のデータ ソース管理の問題には、主に 2 つの解決策があります。1 つ目はクライアント モードです。クライアント モードでは、各アプリケーション モジュールに必要な 1 つ (または複数) のデータ ソースを構成および管理し、各データベースに直接アクセスして、モジュール内でデータ統合を完了します。 2 番目: すべてのデータ ソースは中間プロキシ層を通じて均一に管理され、バックエンド データベース クラスターはフロントエンド アプリケーションに対して透過的です。最初の方法は汎用的ではありません。各アプリケーションは独自のデータ統合機能を開発する必要があり、すでに構築されたシステムのコードをリファクタリングする必要があるため、プロモーションには適していません。現在、2 番目の方法が主に使用されています。Mycat の原理は次のとおりです。Mycat の原理で最も重要な動詞は「インターセプト」です。ユーザーが送信した SQL 文をインターセプトし、まず SQL 文に対してシャーディング分析、ルーティング分析、読み取り/書き込み分離分析、キャッシュ分析などの特定の分析を実行し、次にこの SQL をバックエンドの実際のデータベースに送信し、返された結果を適切に処理して、最終的にユーザーに返します。

Mycat の原理は他の分散データベース ミドルウェアと非常に似ていますが、アーキテクチャには依然として違いがあります。Mycat は Cobar から派生したものですが、そのベースで大幅に改良されています。Mycat のアーキテクチャは次のとおりです。

現在主流の分散データベースミドルウェアには、TDDL、Amoeba、Coba などがありますが、TDDL は他の製品とは異なり、独立したミドルウェアではなく、Jar パッケージの形式でアプリケーションに提供される中間層としてのみ考えることができます。これはJDBC Shardのアイデアであり、インターネット上には同様の製品が他にもたくさんあります。 Amoeba は、真に独立したミドルウェアとしてサービスを提供します。つまり、アプリケーションは Amoeba に接続して、単一の MySQL を操作するのと同じように、MySQL クラスターを操作します。アーキテクチャから、Amoeba はミドルウェアの初期の製品であり、バックエンドは依然として JDBC ドライバーを使用していることがわかります。Cobar は Amoeba に基づく進化版です。大きな変更点は、バックエンドの JDBC ドライバーがネイティブの MySQL 通信プロトコル層に変更されたことです。つまり、Oracle や ProstgreSQL などの主流のデータベースをサポートできないことを意味します。 MyCat は Cobar をベースに開発された別バージョンです。バックエンドが BI0 から NIO に変更され、並行性が大幅に向上し、Order By、GroupBy、limit などの集計機能のサポートが追加されました。現在主流のデータベースのほとんどをサポートしています。

クロスノード結合問題

Mycat は、主にグローバル テーブル、ER シャーディング、Share Join、および catlet (人工知能) を通じて実装される、内部結合、リーフ/右結合、クロス結合、完全結合、およびその他のクロスノード結合方式をサポートします。

1. グローバルテーブル

実際のビジネス システムでは、ディクショナリ テーブルに似たテーブルが多数存在することがよくあります。これらのテーブルは、ビジネス テーブルと関係がある場合があります。この関係は、通常の「マスター スレーブ関係」ではなく、「ラベル」として理解できます。これらのテーブルはほとんど変更されず、主キー ID に基づいてキャッシュできます。次の図は、一般的な「ラベル関係」図を示しています。

シャーディングの場合、規模の都合でビジネス テーブルがシャーディングされると、ディクショナリ テーブルに次の特性があることを考慮すると、ビジネス テーブルとこれらのアタッチされたディクショナリ テーブルとの関連付けはより困難な問題になります。

  • 1. 頻繁な変更
  • 2. 全体のデータ量はあまり変わっていない
  • 3. データサイズは大きくなく、数十万レコードを超えることはほとんどありません。

これを考慮して、MyCAT は「グローバル テーブル」と呼ばれる特別なテーブルを定義します。このテーブルには次の特性があります。

  • 1. グローバルテーブルの挿入および更新操作は、各シャードのデータの一貫性を維持するために、すべてのノードでリアルタイムに実行されます。
  • 2. グローバルテーブルのクエリ操作は1つのノードからのみ取得されます
  • 3. グローバルテーブルはどのテーブルに対してもJ0IN操作を実行できる

ディクショナリ テーブルまたはディクショナリ テーブルの特性を満たすいくつかのテーブルをグローバル テーブルとして定義すると、データ JOIN の問題を別の側面から効果的に解決できます。グローバル テーブル + ER 関係ベースのシャーディング戦略により、MyCAT はエンタープライズ アプリケーション開発の 80% 以上に対応できます。

グローバル テーブルは次のように構成されます (グローバル テーブルはすべてのノードに保存されます)。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • mysql mycat ミドルウェアのインストールと使用
  • mysql+mycat、負荷分散、マスタースレーブレプリケーション、読み取り/書き込み分離操作に基づく安定した高可用性クラスタを構築します。
  • mycat を使用して MySQL データベースの読み取りと書き込みの分離を実装する例
  • Windows環境でのmycatのインストールと起動
  • mysql mycat ミドルウェアの簡単な紹介

<<:  uni-app を使用して上部のナビゲーション バーにボタンと検索ボックスを表示する方法

>>:  VC6.0をWIN10にインストールすると使用できない問題の解決方法

推薦する

Web デザインのヒント: ページ レイアウトの簡単なルール

繰り返し: サイト全体で特定のページ デザイン スタイルを繰り返します。繰り返し要素としては、特定の...

上部の固定ナビゲーションバーによって CSS アンカーの配置がブロックされる問題の解決方法

多くのウェブサイトでは、ユーザーが簡単に検索したり他のページに移動したりできるように、上部にナビゲー...

ウェブページの読み込み速度を上げる6つのヒント

第二に、キーワードのランキングは、Webページの表示速度にも関係しています(参照:キーワードランキン...

Vue3+Vantコンポーネントを使用してアプリの検索履歴機能を実装する(サンプルコード)

現在、新しいアプリプロジェクトを開発中です。私にとっても初めてのアプリ開発です。チームで調査と検討を...

jQueryはシンプルなカルーセル効果を実装します

みなさんこんにちは。今日はカルーセルの実装についてお話しします。私が作成したカルーセルの効果は次のと...

Vue+ElementUI はページング関数を実装します - mysql データ

目次1. 問題2. 解決策2.1 ページングコンポーネント2.2 データベースデータを取得する関数:...

Tomcat を使用して Centos 環境に SpringBoot WAR パッケージをデプロイする

戦争パッケージを準備する1. 既存のSpringBootプロジェクトを準備し、pomに依存関係を追加...

MySQLデータベースの圧縮バージョンのインストールと設定に関する詳細なチュートリアル

目次1. MySQLをダウンロードする2. 圧縮パッケージを解凍する3. MySQLを初期化する4....

CSS3 を使用して入力複数選択ボックスのスタイルをカスタマイズする例

原則: まず入力要素を非表示にし、次に CSS を使用してラベル要素のスタイルを設定します (他の要...

mysql+mybatisはストアドプロシージャ+トランザクション+複数同時シリアル番号取得を実装します

データベースストアドプロシージャ`generate_serial_number_by_date` が...

Nginxポーリングアルゴリズムの基本的な実装方法の詳細な説明

ポーリングアルゴリズムの紹介多くの人が職場で nginx を使用しており、その設定に精通しています。...

DockerはGitを使用してJenkinsのリリースとテストプロジェクトの詳細なプロセスを実装します

目次1. Dockerをインストールする2. カスタムネットワークアドレスを作成する3. Docke...

JavaScript 遅延読み込みの詳細な説明

目次遅延読み込みCSS スタイル: HTML部分:スクリプト部分:要約する遅延読み込み名前の通り、私...

Mysql5.7 のルートパスワードを忘れた場合の対処法 (シンプルで効果的な方法)

前回の記事では、MySQL 5.7でルートパスワードを忘れた場合と、MySQL 5.7でルートパスワ...