1. Mycatの適用シナリオ 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 に基づいてキャッシュできます。次の図は、一般的な「ラベル関係」図を示しています。 シャーディングの場合、規模の都合でビジネス テーブルがシャーディングされると、ディクショナリ テーブルに次の特性があることを考慮すると、ビジネス テーブルとこれらのアタッチされたディクショナリ テーブルとの関連付けはより困難な問題になります。
これを考慮して、MyCAT は「グローバル テーブル」と呼ばれる特別なテーブルを定義します。このテーブルには次の特性があります。
ディクショナリ テーブルまたはディクショナリ テーブルの特性を満たすいくつかのテーブルをグローバル テーブルとして定義すると、データ JOIN の問題を別の側面から効果的に解決できます。グローバル テーブル + ER 関係ベースのシャーディング戦略により、MyCAT はエンタープライズ アプリケーション開発の 80% 以上に対応できます。 グローバル テーブルは次のように構成されます (グローバル テーブルはすべてのノードに保存されます)。 要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。 以下もご興味があるかもしれません:
|
<<: uni-app を使用して上部のナビゲーション バーにボタンと検索ボックスを表示する方法
>>: VC6.0をWIN10にインストールすると使用できない問題の解決方法
背景今日、他のプロジェクト チームと協力してシステムのストレス テストを実施しているときに、プロ...
ザビックス2019/10/12 チェンシン参照するhttps://www.zabbix.com/do...
目次序文議論の基本概念議論の役割実パラメータと仮パラメータの数を取得する実際のパラメータ値を変更する...
mysql5.7.17のインストールチュートリアルを参考までに共有します。具体的な内容は次のとおりで...
序文今日、注文データを同期した後、同僚は、合計注文金額とデータソースの合計金額に差があったため、LI...
目次1. タイマー監視2. イベント監視3.オブザーバー4. ウィンドウオブジェクト5. DOM参照...
MySQLの自動増分主キーIDは段階的に増加しません1. はじめにMySQL データベースにデータを...
目次1. はじめに: 2. プロトタイプチェーン継承: 3. コンストラクタ継承の借用(オブジェクト...
1 Dockerサービスを開始するまず、docker サービスを開始する方法を知っておく必要がありま...
Nginx の紹介Nginx (「エンジン x」) は、ロシアのプログラマー Igor Sysoev...
1. 公式サイトにアクセスします: D:\mysql-5.7.21-winx64\bin をダウンロ...
ログインページなどのホームページを作成する場合、大きな背景画像を配置する必要があり、さまざまな画面の...
目次1. v-forループでは常にキーを使用する2. 特定のスコープ内でv-forループを使用する3...
目次JavaScript で配列を作成する配列の使用配列を分割文字列に変換する配列に要素を追加する配...
この記事では主に、MySQL の Aborted アラームに関する関連コンテンツを紹介し、参考と学習...