web-dev-qa-db-fra.com

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?

35
petRUShka

mysql2 est conçu comme un remplacement plus moderne pour la gemme mysql existante, obsolète depuis un certain temps. J'ai aussi entendu dire que l'auteur ne le supportait plus et recommande à tout le monde d'utiliser sa version pure-Ruby car elle est compatible avec d'autres implémentations de Ruby (mais est much slow).

Le premier problème avec la gemme mysql est qu’il ne fait pas de transtypage de caractères en C, il vous restitue des chaînes Ruby que vous devez ensuite convertir en types de Ruby appropriés. Faire cela en pure Ruby est extrêmement lent et crée des objets sur le tas qui n'ont jamais eu besoin d'exister. Et comme nous le savons tous, le GC de Ruby est la principale raison de sa lenteur. Il est donc préférable de l'éviter et de faire autant que possible en C pur.

Deuxièmement, il bloque le entier Ruby VM lors de la connexion, de l’envoi de requêtes et de l’attente de réponses, voire de la fermeture de la connexion. mysqlplus aide définitivement à résoudre ce problème, mais uniquement pour l'envoi de requêtes, pour autant que je sache.

mysql2 vise à résoudre ces problèmes tout en conservant une API extrêmement simple. Eric Wong (auteur de Unicorn) a fourni des correctifs impressionnants qui rendent presque tout non bloquant et/ou publient la GVL en Ruby. La classe Mysql2::Result implémente Enumerable, donc si vous savez utiliser un tableau, vous savez comment l'utiliser.

Je ne connais que quelques personnes l'utilisant actuellement en production, mais il est également en cours d'évaluation sur Twitter, WorkingPoint et UserVoice.

Je suis également en pourparlers avec Yehuda sur le fait qu'il soit recommandé/par défaut pour Rails 3 lors de son expédition. Certaines de ses techniques et optimisations vont également être bientôt intégrées au pilote do_mysql de DataObjects.

Le pilote ActiveRecord devrait être assez solide pour le moment. Tout ce que vous devez faire est d'installer la gemme et de changer le nom de votre adaptateur dans database.yml en mysql2.

Si vous êtes intéressé à l'utiliser, essayez-le. Je suis rapide à Push correctifs si vous trouvez des problèmes;)

66
brianmario

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

11
Loren

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.

5
Nick Ragaz

Si quelqu'un souhaite utiliser la gem mysql au lieu 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 Rails .

2
aercolino

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

1

Pour votre information, lors de l'utilisation de mysql2 (0.2.x) avec Rails 3.0.11, j'ai dû rétrograder ma version de RubyGems de la version 1.8.15 à la version 1.8.10. Sinon passager barfs ... 

0
James Adam