データベースミドルウェア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にインストールすると使用できない問題の解決方法

推薦する

複合主キーと複数列インデックスに遭遇した場合の MySQL 行ロックの詳細な説明

背景今日、他のプロジェクト チームと協力してシス​​テムのストレス テストを実施しているときに、プロ...

Zabbix 監視ソリューション - 最新の公式バージョン 4.4 [推奨]

ザビックス2019/10/12 チェンシン参照するhttps://www.zabbix.com/do...

JavaScript における Arguments オブジェクトの使用に関する詳細な説明

目次序文議論の基本概念議論の役割実パラメータと仮パラメータの数を取得する実際のパラメータ値を変更する...

MySQL 5.7.17 zip パッケージ バージョンを Windows 10 にインストールするチュートリアル

mysql5.7.17のインストールチュートリアルを参考までに共有します。具体的な内容は次のとおりで...

MySQL における制限関数と合計関数の混在使用の問題の詳細な説明

序文今日、注文データを同期した後、同僚は、合計注文金額とデータソースの合計金額に差があったため、LI...

一般的な JavaScript メモリ エラーと解決策

目次1. タイマー監視2. イベント監視3.オブザーバー4. ウィンドウオブジェクト5. DOM参照...

MySQLの自動増分主キーIDはこのように処理されません

MySQLの自動増分主キーIDは段階的に増加しません1. はじめにMySQL データベースにデータを...

JS関数の継承について学ぶ記事

目次1. はじめに: 2. プロトタイプチェーン継承: 3. コンストラクタ継承の借用(オブジェクト...

Dockerコンテナの入退出方法の詳細な説明

1 Dockerサービスを開始するまず、docker サービスを開始する方法を知っておく必要がありま...

Nginxドメイン名転送の実装

Nginx の紹介Nginx (「エンジン x」) は、ロシアのプログラマー Igor Sysoev...

MySQL解凍版のインストール手順の詳しい説明

1. 公式サイトにアクセスします: D:\mysql-5.7.21-winx64\bin をダウンロ...

CSSは背景画像の画面適応を実現する

ログインページなどのホームページを作成する場合、大きな背景画像を配置する必要があり、さまざまな画面の...

Vue v-for ループを書く 7 つの方法

目次1. v-forループでは常にキーを使用する2. 特定のスコープ内でv-forループを使用する3...

JavaScriptで配列を作成する方法の詳細な説明

目次JavaScript で配列を作成する配列の使用配列を分割文字列に変換する配列に要素を追加する配...

MySQL の厄介な Aborted 警告をケーススタディで分析する

この記事では主に、MySQL の Aborted アラームに関する関連コンテンツを紹介し、参考と学習...