ホームページ  >  記事  >  データベース  >  mycatサブデータベースとテーブルの原理の分析

mycatサブデータベースとテーブルの原理の分析

藏色散人
藏色散人オリジナル
2019-06-15 14:49:289236ブラウズ

mycatサブデータベースとテーブルの原理の分析

MyCat は、オープン ソースの分散データベース システムであり、MySQL プロトコルを実装したサーバーです。フロントエンド ユーザーは、これをデータベース エージェントとみなして、MySQL クライアントを使用できます。ツールとコマンド ライン アクセスを備えており、バックエンドは MySQL ネイティブ プロトコルを使用して複数の MySQL サーバーと通信することができ、JDBC プロトコルを使用してほとんどの主流データベース サーバーと通信することもできます。その中心的な機能はテーブルとデータベースを分割することです。大きなテーブルは水平方向に N 個の小さなテーブルに分割され、バックエンドの MySQL サーバーまたはその他のデータベースに保存されます。

Mycat は読み取りと書き込みの分離、テーブルとデータベースのパーティショニングを実現できます

マスター/スレーブ レプリケーションは MySQL に付属しています~

シャーディング モジュロ アルゴリズムについて: ID に基づくモジュロ データベース クラスターの数 (またはテーブルの数、mycat の 1 つのテーブルが 1 つのライブラリに対応) に基づく

#MyCat テーブルとデータベースの原則分析の使用

Mycat のルーティング結果はシャード フィールドとシャード メソッドによって決まります。クエリ条件に id フィールドがある場合、クエリは特定のシャードに分類されます。断片化せずにフィールドをクエリすると、すべてのデータベースがクエリされ、結果はカプセル化されてクライアントに送信されます。

/mycat/conf/log4j2.xml ログ レベルをデバッグ用に変更します。

例:

クエリ内

select * from user_info

送信3 つの db リクエスト

#クエリ (条件なし) の場合

#次のように変換されます:

select * from db1.user_info
select * from db2.user_info
select * from db3.user_info

最後に、結果セットは mycat によってカプセル化され、顧客に返されます。

このような条件下で where id = 1 を追加すると、mycat は db2 で 1%3=1 を変換します。 select * from db2.user_info where id = 1 に変換します。クエリがシャーディングの場合、非常に効率的です。 1 つ送信するだけで完了です。

フラグメント フィールドでない場合は 3 つ送信されます。効率は非常に低くなります。

たとえば、where name = 'jack' は、結果を返す条件に従って各データベースに 3 つのクエリを送信します。

tailf -200f mycat.log: リアルタイムで表示を実行します。


次に、一目で簡単にクエリを実行します。

ページング クエリに注意してください:

select * from user_info limit 0,2

どのデータ シャードですか?

3 つの選択リクエストを 3 つのライブラリに送信して、6 つの結果からなる 3 つのペアを取得します

ランダムにペアを選択してクライアントに返します

追加された場合並べ替え条件はどうなるのでしょうか?

 select * from user_info order by id  limit 0,2   (相当于取出最大的两条数据)
まず、それぞれ最大の 2 つを含む 3 つの選択を送信し、次にそれを mycat に返して包括的な選択を行い、最大の 2 つをクライアントに返します

 select * from user_info   limit 0,3

の場合、リクエストが変更されるたびに返される内容はランダムです。

db1 は、db2 と db3 の 2 つをランダムに受け取ります。

以上がmycatサブデータベースとテーブルの原理の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。