sql >> Base de Datos >  >> RDS >> Mysql

Ruby, Rails:gema mysql2, ¿alguien usa esta gema? ¿Es estable?

mysql2 está pensado como un reemplazo más moderno para el mysql existente gema, que ha estado obsoleta por un tiempo ahora. También escuché que el autor ya no lo admite y, en cambio, recomienda que todos usen su versión de Ruby puro, ya que es compatible con más implementaciones de Ruby (pero es mucho más lento).

El primer problema con mysql joya es que no hace ningún tipo de conversión en C, le devuelve cadenas de rubí que luego debe convertir en tipos de rubí adecuados. Hacer eso en pure-ruby es extremadamente lento y crea objetos en el montón que nunca necesitaron existir en primer lugar. Y como todos sabemos, el GC de Ruby es la razón principal de su lentitud. Así que es mejor evitarlo y hacer todo lo que puedas en C puro.

La segunda es que bloquea el todo ruby VM mientras se conecta, envía consultas y espera respuestas, e incluso cierra la conexión. mysqlplus definitivamente ayuda con este problema, pero solo para enviar consultas hasta donde yo sé.

mysql2 tiene como objetivo resolver estos problemas manteniendo la API extremadamente simple. Eric Wong (autor de Unicorn) ha contribuido con algunos parches increíbles que hacen que casi todo no bloquee y/o liberan la GVL en Ruby. El Mysql2::Result La clase implementa Enumerable, por lo que si sabe cómo usar un Array, sabrá cómo usarlo.

Solo conozco a unas pocas personas que lo usan en producción en este momento, pero también se está evaluando en Twitter, WorkingPoint y UserVoice.

También estoy en conversaciones con Yehuda acerca de que es el recomendado/predeterminado para Rails 3 cuando se envía. Algunas de sus técnicas y optimizaciones también se incluirán en do_mysql de DataObjects. conductor pronto también.

El controlador ActiveRecord debería ser bastante sólido en este momento. Todo lo que debe hacer es tener la gema instalada y cambiar el nombre de su adaptador en base de datos.yml a mysql2 .

Si estás interesado en usarlo, pruébalo. Me apresuro a enviar soluciones si encuentra algún problema;)