MyCat est un système de base de données distribuée open source et un serveur qui implémente le protocole MySQL. Les utilisateurs front-end peuvent le considérer comme un outil client MySQL. et l'accès en ligne de commande, et son backend peut utiliser le protocole natif MySQL pour communiquer avec plusieurs serveurs MySQL, et peut également utiliser le protocole JDBC pour communiquer avec la plupart des serveurs de bases de données grand public. Sa fonction principale est de diviser les tables et les bases de données, ce qui sera un. grande La table est divisée horizontalement en N petites tables et stockée sur le serveur MySQL back-end ou dans d'autres bases de données.
Mycat peut réaliser la séparation de la lecture et de l'écriture dans les tables et les bases de données
La réplication maître-esclave est fournie avec MySQL~
À propos de l'algorithme de partitionnement modulo : Modulo basé sur l'identifiant Basé sur le nombre de clusters de base de données (ou le nombre de tables, une table dans mycat correspond à une bibliothèque)
Utiliser la table MyCat et l'analyse du principe de la base de données
Les résultats du routage dans Mycat sont déterminés par le champ de partition et la méthode de partition. S'il y a un champ d'identification dans la condition de requête, la requête tombera sur une partition spécifique. Si vous interrogez un champ sans fragmentation, toutes les bases de données seront interrogées et les résultats seront encapsulés et envoyés au client.
Modifiez le niveau de journalisation /mycat/conf/log4j2.xml pour déboguer
Par exemple :
Dans la requête
select * from user_info
Envoyer trois requêtes A db
Si la requête est conditionnelle (sans conditions)
est convertie en :
select * from db1.user_info select * from db2.user_info select * from db3.user_info
Enfin, l'ensemble de résultats est encapsulé par mycat et renvoyé au client Fin
Si vous ajoutezwhere id = 1, dans de telles conditions, mycat convertira 1%3=1 sur db2 ! Convertissez en select * à partir de db2.user_info où id = 1. Si la requête est partitionnée, elle est très efficace. Envoyez-en simplement un et ce sera fait
S'il ne s'agit pas d'un champ de fragment, trois seront envoyés ! L'efficacité est très faible
Par exemple, où name = 'jack' enverra trois requêtes à chaque base de données selon les conditions pour renvoyer les résultats
tailf -200f mycat.log : effectuez une visualisation
en temps réel et interrogez rapidement en un coup d'œil
Faites attention à la requête de pagination :
select * from user_info limit 0,2
jusqu'à la fin De quel fragment de données s'agit-il ?
Envoyez trois requêtes de sélection à trois bibliothèques pour obtenir trois paires de six résultats
Sélectionnez au hasard une paire et retournez-la au client
Si ajouté Quid des conditions de tri ?
select * from user_info order by id limit 0,2 (相当于取出最大的两条数据)
Envoyez d'abord trois sélections, chacune étant les deux plus grandes, puis renvoyez-les à mycat pour une sélection complète et renvoyez les deux plus grandes au client
Si c'est
select * from user_info limit 0,3
Ce qui est renvoyé à chaque fois que la requête est modifiée est aléatoire !
db1 prend deux aléatoires de db2 et db3
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!