2010-11-16 13 views
3

Je crée une application Grails qui est le backend pour une application mobile. Il est actuellement déployé sur Amazon EC2. Il conserve les données dans une base de données mysql. Une instance pointant actuellement vers la base de données. Je prévois de déployer plusieurs instances de l'application derrière un équilibreur de charge et d'avoir éventuellement des requêtes de lecture vers les instances esclaves de la base de données. Nous prévoyons de publier dans les mois à venir et avoir un groupe de bêta de quelques milliers d'utilisateurs. Il est plus intensif en lecture qu'en écriture.facilité de mise à l'échelle mongodb vs mysql

Nous avons examiné l'utilisation de mongodb au lieu de sql et nous l'avons vu comme une bonne solution. N'ayant pas beaucoup d'expérience dans la mise à l'échelle de mysql (ou de mongodb), il serait plus facile de mettre à l'échelle mongodb puisqu'il possède des fonctionnalités telles que le sharding automatique. (À la recherche de pensées de personnes qui ont fait les deux) Je pense qu'il sera plus facile de passer à mongodb maintenant plutôt que d'être en «production» et d'avoir à migrer.

Pensées?

Répondre

6

MongoDB a deux versions de "mise à l'échelle":

  1. Lire mise à l'échelle via replica sets.
  2. Échelle d'écriture via sharding.

Ce ne sont pas des balles en argent, mais elles sont toutes deux très faciles à installer. Les ensembles de réplicas ont un basculement automatique, ce qui est pratiquement essentiel lors de l'utilisation de EC2 (ils ont un bon historique de nœuds défaillants au hasard). Lorsque vous avez besoin d'une mise à l'échelle en écriture, MongoDB a défini documented processes for upgrading votre jeu de réplicas sur une série de jeux de réplicas partitionnés.

La limitation regrettable est que (dernière fois que j'ai vérifié), des choses comme scalr ne supportent pas vraiment la mise à l'échelle automatique. Vous devrez donc créer votre propre solution pour ajouter et supprimer des nœuds de l'ensemble.

Quelques considérations importantes:

  1. performances disque IO est peu précis dans le nuage. Une bonne performance est tout au sujet de la quantité de RAM que vous pouvez jeter au problème.
  2. Si vous utilisez des jeux de réplicas pour les lectures, assurez-vous que votre gestionnaire de fichiers/pilote est capable de gérer la distribution des lectures. Tout comme MySQL, il n'est pas actuellement "gratuit", vous devrez décider "écrire contre lire".
  3. Machines 64 bits. MongoDB veut vraiment fonctionner sur du matériel 64 bits. Ceci est une consdiation de coûts car vous devrez probablement monter en puissance avec des machines de 4 Go au lieu de machines de 2 Go (je ne pense pas que ce soit une grosse limitation, mais je sais aussi ce que c'est que d'être une startup).
  4. MongoDB est encore une nouvelle technologie. Les listes sont très actives et les gens l'utilisent en production pour de très grands ensembles de données. Mais ceci est encore un nouveau produit, vous devez être prêt à travailler à partir de la ligne de commande et analyser les documents et poser des questions. problème

serait-il plus facile à l'échelle mongodb

À un certain niveau de mise à l'échelle va être un « dur ». Qu'est-ce que MongoDB fait bien est de fournir un moyen de redimensionner beaucoup de boîtes horizontalement avec la réplication. Dans mon expérience, MySQL dépasse vraiment deux cases pour les écritures.Vous pouvez facilement configurer les co-maîtres, mais après cela, vous devez commencer à débloquer avec toutes sortes de partitionnement et vous perdez la possibilité de faire des jointures.

Je suis de penser qu'il sera plus facile de passer à MongoDB maintenant plutôt que d'être dans la « production »

Il sera probablement.

Pensées?

Commencez petit. Obtenez un morceau de travail et voyez si vous aimez comment cela fonctionne. Si vous avez accès à un compte EC2, il est facile de faire tourner quelques machines et de jouer. MongoDB n'est pas une panacée, mais il fonctionne très bien pour beaucoup de problèmes web modernes. Il suffit de mesurer à quel point vous avez besoin joint :)

+0

Juste pour vous donner quelques données de ce que cela signifie pour MongoDB d'avoir à frapper le disque: http://nosql.mypopescu.com/post/1251523059/mongodb-auto-sharding -and-foursquare-downtime et l'analyse post-mortem: http://nosql.mypopescu.com/post/1265191137/foursquare-mongodb-outage-post-mortem – alexpopescu