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 サイトの他の関連記事を参照してください。