2012-09-05 1 views
1

Je ne comprends pas pourquoi écrire et lire séparément est mieux que d'écrire et de lire dans un serveur. Par exemple, j'ai un cluster mysql avec trois machines: node1, node2, node3.Pourquoi est-il préférable d'écrire et de lire séparément?

Une architecture possible est:

  • Toutes les demandes d'écriture à node1, mais toutes les requêtes de lecture à node2 et node3.

La seconde architecture possible est:

  • Tous ces trois nœuds gérer les deux écritures et lectures.

Nous pouvons voir dans l'architecture que l'écriture à la pression node1 très énorme, donc je préfère l'architecture deux.

En outre, pourquoi mongodb sépare-t-il les écritures au noeud principal et les lit-il aux noeuds secondaires.

+2

C'est Il est important de noter que MongoDB ne sépare pas write ets reads aux nœuds primaires et secondaires, à moins que vous ne le disiez avec 'SlaveOK' ou une autre préférence de lecture. Par défaut, le primaire va gérer à la fois les lectures et les écritures. –

+0

@AndredeFrere Si je veux vider toute la base de données, quelle adresse dois-je utiliser, à savoir mongodump --host mongosServer: port ou mongodump --host mongoDServer: port si j'indique un mongoD je ne serais pas vider tous les données et je ne sais pas si indiquer mongoS est juste merci d'avance – Jack

+1

probablement pas le meilleur endroit pour cela, mais sauvegarder à la fois 'mongod' et' mongos' sont des stratégies viables selon le cas. Cochez [ici] (http://www.mongodb.org/display/DOCS/Backing+Up+Sharded+Cluster) et [ici] (http://docs.mongodb.org/manual/administration/backups/#shard -clusters-and-replica-sets-considerations) pour plus de détails. –

Répondre

2

Ceci est un problème d'échelle pour MySQL et MongoDB. Dans l'application la plus simple avec un petit jeu de données et un faible volume de trafic, le fait d'avoir toutes les écritures et toutes les lectures sur un serveur vous donne une architecture simple. Dans une application de lecture de volume très élevé avec des écritures à faible volume, un seul noeud d'écriture se répliquant sur plusieurs noeuds de lecture vous permet de mettre à l'échelle vos lectures simplement en ajoutant un autre noeud. Dans une application de lecture et de volume d'écriture élevée, vous pouvez envisager de partitionner (en MySQL vous le faites vous-même ou de trouver un outil pour vous aider), dans mongodb vous exécutez mongos qui gère le sharding pour vous. Sharding placera des enregistrements sur une instance spécifique en fonction d'une clé que vous définissez. La clé déterminera l'instance sur laquelle chaque enregistrement doit être stocké. Vous pouvez imaginer que le partitionnement serait plus compliqué à gérer qu'un seul serveur pour l'accès en lecture/écriture. Vous auriez raison, même dans un cas comme mongodb qui fait le sharding pour vous une fois que vous définissez une clé (ou utilisez simplement la clé par défaut).

1

MySQL Cluster prend également en charge l'auto-sharding - par défaut en hachant la clé primaire, mais les utilisateurs peuvent introduire leurs propres clés pour mieux connaître la distribution. Chaque nœud du cluster est un maître, et l'équilibrage de charge interne répartir les charges entre les nœuds

Bien que très haut niveau, la courte démo posté ici vous présente les concepts de sharding en cluster MySQL: http://www.oracle.com/pls/ebn/swf_viewer.load?p_shows_id=11464419

Questions connexes