Heim > Datenbank > MySQL-Tutorial > Hauptteil

Detaillierte Erläuterung des Schemacodes des verteilten MySQL-Clusters MyCAT (2).

黄舟
Freigeben: 2017-03-11 14:20:23
Original
1415 Leute haben es durchsucht

Im ersten Teil gibt es eine kurze Einführung in die Grundsituation von MyCAT-Konstruktions- und Konfigurationsdateien. In diesem Artikel werden einige spezifische Parameter des Schemas und seine tatsächliche Funktion beschrieben.
Beitrag Es zuerst In der Schemadatei für meine eigenen Tests wird der Backslash vor dem doppelten Anführungszeichen nicht entfernt...

<?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>
Nach dem Login kopieren


Erste Parameterzeile<Schemaname ="mycat" checkSQLschema="false" sqlMaxLimit= "100"/>
In dieser Parameterzeile definiert Schemaname den Namen der logischen Datenbank, die sein kann wird auf dem MyCAT-Frontend angezeigt ,
Wenn der checkSQLschema-Parameter „False“ ist, bedeutet dies, dass MyCAT beispielsweise automatisch den Datenbanknamen vor dem Tabellennamen ignoriert , mydatabase1.test1 wird als test1 betrachtet;
sqlMaxLimit gibt den Grenzwert für die Anzahl der von der SQL-Anweisung zurückgegebenen Zeilen an;
🎜>

Als Screenshot zeigt dieses Limit, dass mycat beim Verteilen der SQL-Anweisung automatisch ein LIMIT hinzufügt. limit Wie Sie in der oberen rechten Ecke sehen können, wird MyCAT selbst zwischengespeichert
; Wenn also die von uns ausgeführte Anweisung mehr Datenzeilen zurückgibt, was wird MyCAT dann tun, ohne dieses Limit zu ändern?                                                                                                                                                           > Wenn also in der eigentlichen Anwendung eine große Datenmenge zurückgegeben werden muss, müssen Sie dies möglicherweise manuell tun Ändern Sie die Logik

In der Version 1.4 von mycat deckt der Limit-Parameter des Benutzers die Standard-MyCAT-Einstellung ab
> ----- ------------------------------------------- ------- ------------------------------------------- ------- ------------------------------------------- ------- --------------------------                                                                   >Tabelle name
="students" dataNode

=
"dn1,dn2,dn3,dn4" Regel="rule1" /> Diese Zeile stellt Which dar Tabellennamen werden auf dem MyCAT-Frontend angezeigt? Ähnliche Zeilen bedeuten hier alle dasselbe. Der Schwerpunkt liegt hier auf der Tabelle, und MyCAT definiert nicht die Tabellenstruktur in der Konfigurationsdatei. Wenn Sie show create table verwenden Im Frontend zeigt MyCAT normalerweise Informationen zur Tabellenstruktur an. Beachten Sie das Debug-Protokoll.                                        Es ist ersichtlich, dass MyCAT den Befehl an die durch dn1 dargestellte Datenbank verteilt und dann das Abfrageergebnis von dn1 an das Front-End zurückgibt.
Es kann davon ausgegangen werden, dass einige ähnliche Abfrageanweisungen auf Datenbankebene möglicherweise an eine bestimmte Datenbank verteilt werden Geben Sie dann die Informationen eines bestimmten Knotens separat an das Frontend zurück. Derzeit unterstützt MyCAT nur die Segmentierung nach einer speziellen Spalte und nach einigen speziellen Regeln wie Modulo, Aufzählung usw. Die Details werden besprochen später

----- -------------------------------------- ------------ -------------------------------------- ------------ -------------------------------------- ----------- --------------------
                                                                                                                                                            Name

=

"item_test" PrimaryKey="ID" Typ ="global" dataNode="dn1,dn2,dn3,dn4" /> Diese Zeile stellt die globale Tabelle dar, was bedeutet, dass die Tabelle item_test vollständige Datenkopien in den vier dataNodes enthält und dann an alle Datenbanken verteilt wird bei der Abfrage?                                                                                                                                                                                                                     ---------- ------------------------------------- ------------- ------------------------------------- ------------- ------------------------------------- ------------- -------------Ich habe im Test eigentlich keine Childtable verwendet, aber im Designdokument von MyCAT wurde erwähnt, dass Childtable eine Struktur ist, die von der Parent-Tabelle abhängt.
Das bedeutet, dass der Joinkey von Childtable der ParentKey-Strategie von folgt Übergeordnete Tabelle. Wenn die übergeordnete Tabelle mit der untergeordneten Tabelle verbunden ist und die Verbindungsbedingung childtable.joinKey=parenttable.parentKey lautet, wird keine datenbankübergreifende Verbindung hergestellt. ---------------------------------------- ---------- ---------------------------------------- ---------- ---------------------------------------- ---------- -------------

Die Parameter von dataNode wurden im vorherigen Kapitel vorgestellt, also überspringen Sie hier~

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

dataHost konfiguriert den eigentlichen Back-End-Datenbankcluster. Die meisten Parameter sind einfach und leicht zu verstehen. Hier werde ich sie nicht vorstellen Ich werde nur die beiden wichtigeren Parameter writeType und balance von

vorstellen. Der Testprozess ist hier schwieriger, daher werde ich die Schlussfolgerung direkt veröffentlichen:

) 2. Wenn Balance=1, werden Lesevorgänge zufällig auf localhost1 und zwei Lesehosts verteilt (wenn
localhost fehlschlägt, werden Schreibvorgänge auf
localhost1 ausgeführt, wenn Wenn localhost1 schlägt erneut fehl, Schreibvorgänge können nicht ausgeführt werden
) 3. Wenn Balance=2, werden Schreibvorgänge auf localhost ausgeführt und Lesevorgänge werden zufällig auf LocalHost1, LocalHost1 und zwei Readhost (das gleiche wie oben)
4.writeType = 0,
Schreibvorgänge erfolgen auf LocalHost1 Nach localhost wird wiederhergestellt, es wird nicht zurück zu localhost für Schreibvorgänge gewechselt Auf localhost und
localhost1 hat der einzelne Fehlerpunkt keinen Einfluss auf den Schreibvorgang des Clusters . Die Back-End-Slave-Bibliothek kann jedoch keine Updates von der ausgefallenen Hauptbibliothek erhalten und schlägt fehl, wenn Dateninkonsistenz auftritt
                                                                                                                                                                                                                                                     , aber die Slave-Bibliothek von
localhost kann keine Aktualisierungen von
localhost erhalten.
Die Slave-Bibliothek von localhost weist Dateninkonsistenzen mit anderen Bibliotheken auf. ------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------Tatsächlich
Die Lese- und Schreibtrennung von MyCAT selbst basiert auf der Synchronisierung des Back-End-Clusters, und MyCAT selbst bietet Funktionen zur Anweisungsverteilung. Die sqlLimit-Einschränkung führt auch dazu, dass MyCAT einige Auswirkungen auf die Logik der Front-End-Anwendungsschicht hat
Die Konfiguration vom Schema zur Tabelle zeigt, dass die logische Struktur von MyCAT selbst die Funktion der Unterdatenbank und Untertabelle umfasst (kann Geben Sie an, dass verschiedene Tabellen in verschiedenen Datenbanken vorhanden sind, ohne dass sie in alle Datenbanken aufgeteilt werden müssen)

                                 

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Schemacodes des verteilten MySQL-Clusters MyCAT (2).. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!