Mysql
 sql >> Base de données >  >> RDS >> Mysql

Ruby, Rails :gemme mysql2, est-ce que quelqu'un utilise cette gemme ? Est-ce stable ?

mysql2 est conçu comme un remplacement plus moderne pour le mysql existant gemme, qui est obsolète depuis un moment maintenant. J'ai également entendu dire que l'auteur ne le supportait plus et recommandait à la place à tout le monde d'utiliser sa version en rubis pur car elle est compatible avec plus d'implémentations Ruby (mais c'est beaucoup plus lent).

Le premier problème avec le mysql gem est qu'il ne fait aucun casting de type en C, il vous renvoie des chaînes ruby ​​que vous devez ensuite convertir en types ruby ​​appropriés. Faire cela en rubis pur est extrêmement lent et crée des objets sur le tas qui n'ont jamais eu besoin d'exister en premier lieu. 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 d'en faire autant que possible en C pur.

Deuxièmement, il bloque l'intégralité ruby VM lors de la connexion, de l'envoi de requêtes et de l'attente de réponses, et même de la fermeture de la connexion. mysqlplus aide certainement à résoudre ce problème, mais uniquement pour envoyer des requêtes pour autant que je sache.

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

Je ne connais que quelques personnes qui l'utilisent en production pour le moment, mais il est également en cours d'évaluation sur Twitter, WorkingPoint et UserVoice.

Je suis aussi en pourparlers avec Yehuda à propos de ce qu'il est recommandé/par défaut pour Rails 3 lors de sa livraison. Certaines de ses techniques et optimisations vont également être intégrées dans do_mysql de DataObjects pilote bientôt aussi.

Le pilote ActiveRecord devrait être assez solide pour le moment. Tout ce que vous avez à 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 pour proposer des correctifs si vous rencontrez des problèmes ;)