ホームページ  >  記事  >  データベース  >  MySQL分散クラスタMyCAT(2)スキーマコード詳細説明

MySQL分散クラスタMyCAT(2)スキーマコード詳細説明

黄舟
黄舟オリジナル
2017-03-11 14:20:231449ブラウズ

最初の部分では、MyCAT の確立と構成ファイルの基本的な状況について簡単に説明します。この記事では、SCHEMA のいくつかの特定のパラメーターと実際の役割について詳しく説明します

まず、私自身のテスト用に SCHEMA ファイルを貼り付けます。二重引用符の前 バックスラッシュは削除されないので、存在しないことにしましょう...

<?xml version=\"1.0\"?>
<!DOCTYPE mycat:schema SYSTEM \"schema.dtd\">
<mycat:schema xmlns:mycat=\"http://org.opencloudb/\">
    <schema name=\"mycat\" checkSQLschema=\"false\" sqlMaxLimit=\"100\">
        <!-- auto sharding by id (long) -->
        <table name=\"students\" dataNode=\"dn1,dn2,dn3,dn4\" rule=\"rule1\" />
        <table name=\"log_test\" dataNode=\"dn1,dn2,dn3,dn4\" rule=\"rule2\" />
        <!-- global table is auto cloned to all defined data nodes ,so can join 
            with any table whose sharding node is in the same data node -->
        <!--<table name=\"company\" primaryKey=\"ID\" type=\"global\" dataNode=\"dn1,dn2,dn3\" />
        <table name=\"goods\" primaryKey=\"ID\" type=\"global\" dataNode=\"dn1,dn2\" />
            -->
        <table name=\"item_test\" primaryKey=\"ID\" type=\"global\" dataNode=\"dn1,dn2,dn3,dn4\" />
        <!-- random sharding using mod sharind rule -->
        <!-- <table name=\"hotnews\" primaryKey=\"ID\" dataNode=\"dn1,dn2,dn3\"
            rule=\"mod-long\" /> -->
            <!-- 
        <table name=\"worker\" primaryKey=\"ID\" dataNode=\"jdbc_dn1,jdbc_dn2,jdbc_dn3\" rule=\"mod-long\" />
 -->
        <!-- <table name=\"employee\" primaryKey=\"ID\" dataNode=\"dn1,dn2\"
            rule=\"sharding-by-intfile\" />
        <table name=\"customer\" primaryKey=\"ID\" dataNode=\"dn1,dn2\"
            rule=\"sharding-by-intfile\">
            <childTable name=\"orders\" primaryKey=\"ID\" joinKey=\"customer_id\"
                parentKey=\"id\">
                <childTable name=\"order_items\" joinKey=\"order_id\"
                    parentKey=\"id\" />
            <ildTable>
            <childTable name=\"customer_addr\" primaryKey=\"ID\" joinKey=\"customer_id\"
                parentKey=\"id\" /> -->
    </schema>
    <!-- <dataNode name=\"dn\" dataHost=\"localhost\" database=\"test\" /> -->
    <dataNode name=\"dn1\" dataHost=\"localhost\" database=\"test1\" />
    <dataNode name=\"dn2\" dataHost=\"localhost\" database=\"test2\" />
    <dataNode name=\"dn3\" dataHost=\"localhost\" database=\"test3\" />
    <dataNode name=\"dn4\" dataHost=\"localhost\" database=\"test4\" />
    <!-- 
    <dataNode name=\"jdbc_dn1\" dataHost=\"jdbchost\" database=\"db1\" />
    <dataNode name=\"jdbc_dn2\" dataHost=\"jdbchost\" database=\"db2\" />
    <dataNode name=\"jdbc_dn3\" dataHost=\"jdbchost\" database=\"db3\" />
 -->
    <dataHost name=\"localhost\" maxCon=\"100\" minCon=\"10\" balance=\"1\"
        writeType=\"1\" dbType=\"mysql\" dbDriver=\"native\">
        <heartbeat>select user()<beat>
        <!-- can have multi write hosts -->
        <writeHost host=\"localhost\" url=\"localhost:3306\" user=\"root\" password=\"wangwenan\">
            <!-- can have multi read hosts -->
            <readHost host=\"hostS1\" url=\"localhost:3307\" user=\"root\" password=\"wangwenan\"/>
        </writeHost>
        <writeHost host=\"localhost1\" url=\"localhost:3308\" user=\"root\" password=\"wangwenan\">
            <!-- can have multi read hosts -->
            <readHost host=\"hostS11\" url=\"localhost:3309\" user=\"root\" password=\"wangwenan\"/>
        </writeHost>
    </dataHost>
        <!-- <writeHost host=\"hostM2\" url=\"localhost:3316\" user=\"root\" password=\"123456\"/> -->
    <!-- 
        <dataHost name=\"jdbchost\" maxCon=\"1000\" minCon=\"1\" balance=\"0\" writeType=\"0\" dbType=\"mongodb\" dbDriver=\"jdbc\">
        <heartbeat>select user()<beat>
        <writeHost host=\"hostM\" url=\"mongodb://192.168.0.99/test\" user=\"admin\" password=\"123456\" ></writeHost>
    </dataHost>    
    -->
     <!-- 
    <dataHost name=\"jdbchost\" maxCon=\"1000\" minCon=\"10\" balance=\"0\"
        dbType=\"mysql\" dbDriver=\"jdbc\">
        <heartbeat>select user()<beat>
        <writeHost host=\"hostM1\" url=\"jdbc:mysql://localhost:3306\"
            user=\"root\" password=\"123456\">
        </writeHost>
    </dataHost>
     -->
</mycat:schema>


" " 最初の行パラメータ スキーマname= " mycat" checkSQLschema="false" sqlMaxLimit="100"/>パラメータ、スキーマ名 何ができるかを定義しますMyCAT フロントエンドに表示されます 論理データベースの名前
CHECKSQLSCHEMA このパラメータは false で、mycat がテーブルの前にあるデータベース名 (MyDataBase1.test1 など) を自動的に無視することを示します。 TEST1 として; 行数制限, 図 Limit を使用すると、SQL ステートメントを配布するときに mycat が自動的に Limit を追加し、ライブラリから取得される結果の数を制限できます。この制限を変更するには、実際のニーズは 100 個のデータ

を返す必要があるため、実際のアプリケーションで大量のデータを返す必要がある場合は、
MYCAT のバージョンのロジックを手動で変更する必要があるかもしれません。 1.4 デフォルトの MyCAT 設定を削除します


----------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - ---------------------------------- name=「学生」
dataNode=「dn1,dn2,dn3,dn4」

rule
=「rule1」/ > この行MyCAT フロントエンドに表示されるテーブル名を表します。同様の行はすべて同じ意味を表しており、show create table on を使用する場合、MyCAT はテーブル構造を定義しません。フロントエンドでは、MyCAT はテーブル構造情報を正常に表示します。デバッグ ログを観察します。 MyCAT はコマンドを dn1 で表されるデータベースに配布し、その後 dn1 のクエリ結果をフロントエンドに返すことがわかります。データベース レベルでのいくつかの同様のクエリ命令が個別にノードに配布される可能性があると判断できます。そして、特定のノードの情報をフロントエンドに戻します。 ---------------------------------------------------- ---------------------------------------------------- ---------------------------------------------------- --------------- --------
name

=

"item_test"

primaryKey
="ID" type="global" dataNode="dn2,dn3, 、dn4" /> この行はグローバル テーブルを表します。これは、item_test テーブルが 4 つの dataNode に完全なデータ コピーを保存し、クエリ時にすべてのデータベースに分散されることを意味します。結果はスクリーンショットのようになります, MyCAT は依然として 100 個のデータを返します (╮(╯_╰)╭)、グローバル テーブルのクエリは特定のノードにのみ分散されます primaryKey を設定しました 効果が何なのかは分かりませんでしたので、とりあえず無視して、見つけたら追記します-------------------------------- -------------------------------------------------- -------------------------------------------------- ----------------------------------------実際にテストでは childtable を使用していませんが、MyCAT の設計ドキュメントには、childtable が親テーブルに依存する構造であると記載されています。これは、childtable の joinkey が、parentKey 戦略に従ってまとめられることを意味します。親テーブルが分割され、親ウォッチがサブメーターに接続され、接続条件が childtable.joinky = plaintable.parentkey の場合、ライブラリ間接続は行われません。
PS: 特定のテストの後、補足します。
----------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ---------------------------------------------------- ---------------------------------------------------- ---------------------------------------------------- --------------- ---------------

Datanode のパラメーターは前の章で紹介されていますので、ここでは直接スキップしてください ~

-------------------------------------------------- ----------- -------------------------------------- ----------- -------------------------------------- ----------- -------------------------------------- ----------- --------

dataHost は、実際のバックエンド データベース クラスターを構成します。ほとんどのパラメーターは単純で理解しやすいものです。ここでは、2 つのより重要なパラメーター、writeType と Balance のみを説明します。
writeType と Balance は、バックエンド クラスターの読み取りと書き込みの分離を制御するために使用される重要なパラメーターです。ここでは、
デュアル マスターとデュアル スレーブ
のクラスター構成を使用しました。ここでのテストプロセスはさらに面倒なので、結論を直接投稿します: の場合、読み取り操作はすべて localhost 上で行われます ( localhost が失敗した場合、バックエンドは直接失敗します
)
2. Balance=1 の場合、読み取り操作はlocalhost1 と 2 つの読み取りホストにランダムに分散されます (localhost が失敗した場合、書き込み操作は
LocalHost1 で、LocalHost1 が失敗した場合、書き込み操作は実行できません) 3.BARANCE = 2、 書き込み操作は、 LocalHost 上の 2 つの readhost (上記と同じ) 4. writeType=0 の場合、
write 操作は localhost で行われ、
localhost が復元された後は自動的に localhost1 に切り替わります。 localhost への書き込み操作 5. writeType=1 の場合、書き込み操作は
localhost と localhost1 にランダムに分散されます。単一点障害はクラスターの書き込み操作には影響しませんが、バックエンドには影響を与えません。スレーブ ライブラリは、失敗したマスター ライブラリにアクセスできなくなります。更新を取得すると、ローカルホストが更新を取得するときにデータが矛盾しているように見えます。ローカルホストのスレーブ ライブラリには、他のライブラリとデータの不一致があります
-------- ------------------------ ------------------------ ------------------------ ------------------------ ------------------------ ------------------------ ------------------------
実際、

MyCAT 自体の読み取りと書き込みの分離はバックエンド クラスターの同期に基づいており、MyCAT 自体がステートメント分散機能を提供します。もちろん、sqlLimit 制限により MyCAT はフロントエンドにも影響を与えます。アプリケーション層 ロジックに影響あり
スキーマからテーブルまでの構成は、MyCAT 自体の論理構造にサブデータベースとサブテーブルの機能が含まれていることを示しています (異なるテーブルを分離することなく、異なるデータベースに存在するように指定できます)すべてのデータベースに)

以上がMySQL分散クラスタMyCAT(2)スキーマコード詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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