35 votes

Ruby, Rails: Gemme mysql2, quelqu'un utilise-t-il cette gemme? Est-ce stable?

J'ai trouvé mysql2 gem . Cela fonctionne très bien avec l'encodage ruby 1.9 et utf8 (par opposition à mysql gem).

Mais j'ai des doutes. Est-ce que quelqu'un utilise ce bijou dans la production? Qu'en est-il du test de performance? Est-ce plus rapide que mysql gem? Est-ce stable?

66voto

brianmario Points 846

mysql2 se veut plus moderne de remplacement de l'existante mysql gem, qui a été rassis pour un certain temps maintenant. J'ai aussi entendu dire que l'auteur n'est pas de soutenir plus et recommande plutôt l'usage de tous ses pur-version de ruby depuis qu'il est compatible avec plus de Rubis implémentations (mais est beaucoup plus lent).

Le premier problème avec l' mysql gem est il ne fait pas de conversion de type C, il vous donne en ruby chaînes que vous pouvez ensuite convertir en ruby types. Le faire dans le plus pur rubis est extrêmement lente, et crée des objets sur le tas qui n'aurait jamais dû existants, en premier lieu. Et comme nous le savons tous, Ruby GC est la principale raison pour laquelle c'est la lenteur. Il est donc préférable de l'éviter et de faire autant de dans le plus pur C que vous le pouvez.

La deuxième est que, il bloque l' ensemble de ruby VM lors de la connexion, l'envoi des requêtes et d'attente pour les réponses, et même la fermeture de la connexion. mysqlplus aide vraiment à cette question, mais uniquement pour l'envoi des requêtes pour autant que je sais.

mysql2 vise à résoudre ces problèmes tout en gardant l'API très simple. Eric Wong (auteur de la Licorne), a contribué à de fantastiques patchs qui font presque tout le non-blocage et/ou de la libération de la GVL en Ruby. L' Mysql2::Result classe implémente Énumérable si vous savez comment utiliser un Tableau, vous savez comment l'utiliser.

Je ne suis au courant de quelques personnes qui l'utilisent dans la production dès maintenant, mais il est évalué à Twitter, WorkingPoint et UserVoice trop.

Je suis également en pourparlers avec Yehuda sur le recommandé/par défaut pour Rails 3 lors de navires. Certaines de ses techniques et optimisations vont également être mis en DataObjects' do_mysql pilote bientôt.

Le ActiveRecord pilote doit être assez solide en ce moment. Tous vous avez besoin de faire est d'avoir la gemme installé, et de changer votre nom de la carte dans la base de données.yml pour mysql2.

Si vous êtes intéressés à l'utiliser, lui donner un essai. Je suis rapide pour pousser les correctifs si vous trouvez des problèmes ;)

11voto

Friday Points 1085

mysql2 est maintenant la valeur par défaut dans rails 3

5voto

Nick Ragaz Points 934

Un peu en retard - mais j'utilise mysql2 en production sur plusieurs sites et le trouve très stable car certains problèmes de fermeture de connexions ont été résolus il y a quelques semaines.

2voto

Ando Points 407

Si quelqu'un souhaite utiliser la gem mysql à la place de la gem mysql2 dans Rails 3.0.0 pour Windows, j'ai écrit un court article qui explique comment modifier le générateur d'applications de rails .

1voto

Assurez-vous de convertir vos caractères 'latin1' en 'utf8', en suivant la réponse ci-dessous:

Problèmes UTF8 MySQL sur Rails - problèmes d’encodage avec utf8_general_ci

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X