Heim >Datenbank >MySQL-Tutorial >Analyse nach dem Prinzip der Mycat-Unterdatenbank und -Tabelle
MyCat ist ein verteiltes Open-Source-Datenbanksystem und ein Server, der das MySQL-Protokoll implementiert. Front-End-Benutzer können es mithilfe eines MySQL-Clients als Datenbankagent betrachten Tools und Befehlszeilenzugriff, und sein Backend kann das native MySQL-Protokoll verwenden, um mit mehreren MySQL-Servern zu kommunizieren, und kann auch das JDBC-Protokoll verwenden, um mit den meisten gängigen Datenbankservern zu kommunizieren a groß Die Tabelle ist horizontal in N kleine Tabellen unterteilt und wird auf dem Back-End-MySQL-Server oder anderen Datenbanken gespeichert.
Mycat kann Lese-/Schreibtrennung, Tabelle und Datenbank realisieren
Master-Slave-Replikation ist in MySQL integriert~
Über den Sharding-Modulo-Algorithmus: Modulo basierend auf der ID Basierend auf der Anzahl der Datenbankcluster (oder der Anzahl der Tabellen, eine Tabelle in Mycat entspricht einer Bibliothek)
Verwenden Sie die MyCat-Tabellen- und Datenbankprinzipanalyse
Die Routing-Ergebnisse in Mycat werden durch das Shard-Feld und die Shard-Methode bestimmt. Wenn die Abfragebedingung ein ID-Feld enthält, wird die Abfrage auf einen bestimmten Shard übertragen. Wenn Sie ein Feld ohne Fragmentierung abfragen, werden alle Datenbanken abgefragt und die Ergebnisse werden gekapselt und an den Client gesendet.
Ändern Sie die Protokollebene /mycat/conf/log4j2.xml zum Debuggen
Zum Beispiel:
In Abfrage
select * from user_info
Senden Sie drei Eine DB-Anfrage
Wenn die Abfrage bedingt ist (ohne Bedingungen)
wird konvertiert in:
select * from db1.user_info select * from db2.user_info select * from db3.user_info
Schließlich wird die Ergebnismenge von mycat gekapselt und an die zurückgegeben Kundenende
Wenn Sie hinzufügen, wo id = 1 ist, konvertiert mycat unter solchen Bedingungen 1%3=1 auf db2! Konvertieren Sie, um * aus db2.user_info auszuwählen, wobei id = 1 ist. Wenn die Abfrage Sharding ist, ist sie sehr effizient. Senden Sie einfach eins und es wird erledigt
Wenn es sich nicht um ein Fragmentfeld handelt, werden drei gesendet! Die Effizienz ist sehr gering
Zum Beispiel sendet name = 'jack' drei Abfragen an jede Datenbank entsprechend den Bedingungen, um die Ergebnisse zurückzugeben
tailf -200f mycat.log: Führen Sie die Ansicht
in Echtzeit durch und fragen Sie schnell auf einen Blick ab
Achten Sie auf die Paging-Abfrage:
select * from user_info limit 0,2
bis zum Ende Um welchen Daten-Shard handelt es sich?
Senden Sie drei Auswahlanfragen an drei Bibliotheken, um drei Paare mit jeweils sechs Ergebnissen zu erhalten.
Wählen Sie zufällig ein Paar aus und geben Sie es an den Kunden zurück.
Wenn hinzugefügt Wie sieht es mit den Sortierbedingungen aus?
select * from user_info order by id limit 0,2 (相当于取出最大的两条数据)
Senden Sie zuerst drei Auswahlen, von denen jede die größten zwei sind, und senden Sie sie dann zur umfassenden Auswahl an mycat zurück und senden Sie die größten zwei an den Kunden zurück
Wenn es
select * from user_info limit 0,3
ist. Was bei jeder Änderung der Anfrage zurückgegeben wird, ist zufällig!
db1 nimmt zwei zufällige von db2 und db3
Das obige ist der detaillierte Inhalt vonAnalyse nach dem Prinzip der Mycat-Unterdatenbank und -Tabelle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!