2010-03-08 7 views
5

J'ai lu une grande partie de la documentation de MySQL Cluster et quelques tutoriels mais je encore avoir des choses pas claires, et la majorité d'entre eux sont en ce moment:des questions de cluster MySQL

  1. Quand un redémarrage du nœud de données (crash et remonte encore) les données seront-elles toujours disponibles? Les mises à jour/ajouts fonctionneront comme d'habitude? Est-ce que ça va "synchroniser"?
  2. Un cluster fonctionne-t-il plus vite que seul? En particulier, je mets à jour plusieurs lignes, mais une à la fois, ce qui signifie que la latence du réseau peut avoir un impact sur les performances. Existe-t-il un modèle que je puisse suivre pour accélérer les choses, comme l'ajout de plusieurs nœuds SQL ou l'ajout de nœuds de données en mode?

En ce qui concerne la question n ° 2, une mise à jour d'une ligne est dans la syntaxe suivante:

UPDATE db_accounts.tbl_items SET items=items+%lld WHERE id_account=%u 

"id_account" est un index (unique).

Répondre

8

MySQL Cluster est une base de données en mémoire (bien que certaines colonnes puissent être stockées sur le disque, les colonnes indexées ne le peuvent pas). Si la prise est tirée, vos données disparaissent. Le processus de récupération pour un nœud rejoignant le cluster est qu'il extrait les données qu'il a perdues d'un nœud survivant (nécessitant de bonnes liaisons rapides entre les nœuds), puis applique soigneusement les événements de réplication jusqu'à ce qu'il les rattrape et puisse participer activement. Si une sauvegarde récente est disponible, elle peut être reconstruite à partir de celle-ci au lieu d'un autre nœud, mais le principe est le même: le nœud doit être repeuplé avec des données à partir de zéro. MySQL Cluster est essentiellement une table de hachage distribuée. Le nœud NDB qui contient une ligne de données particulière est déterminé par un algorithme de hachage appliqué à la clé primaire. Les performances augmentent en ajoutant des nœuds, en supposant que vos données se propagent bien entre les nœuds. Les performances peuvent être gravement affectées si les requêtes doivent toucher plusieurs nœuds - ie. jointures complexes - mais est rapide comme l'éclair pour récupérer une ligne spécifique étant donné sa clé primaire.

De toute évidence, étant donné que les nœuds sont distribués, un réseau lent ou encombré affectera gravement les performances.

+0

Merci beaucoup, je pense que ça va faire! – Poni

+0

"Le nœud NDB qui contient une ligne de données particulière est déterminé par un algorithme de hachage appliqué à la clé primaire." Les lignes ne sont-elles pas répliquées dans d'autres nœuds NDB? – metdos

5

Même si votre table MySQL Cluster est en mémoire, par défaut toutes les écritures sont vérifiées de manière asynchrone sur le disque (cela peut être désactivé par table).

Si l'ensemble du cluster a échoué (l'alimentation du centre de données a été perdue), les données seront récupérées à partir de ces points de contrôle de disque lorsque vous le ramènerez. L'inconvénient est que, comme ils ont été créés de manière asynchrone, il se peut qu'une poignée de mises à jour vous manque.

Si un seul noeud de données tombe en panne et récupère de sa copie de disque local, il le rattrape en appliquant les dernières mises à jour de son noeud de données homologues. Pour ajouter davantage de haute disponibilité à vos données, vous pouvez utiliser la réplication asynchrone MySQL sur un deuxième site (à l'autre bout du monde, si nécessaire).