2010-06-08 11 views

Respuesta

66

mysql2 se entiende como un sistema más moderno reemplazo para el mysql joya existente, que ha sido viciado por un tiempo ahora. También escuché que el autor ya no lo soporta y recomienda que todos usen su versión de rubí puro, ya que es compatible con más implementaciones de Ruby (pero es mucho más más lento).

El primer problema con la gema mysql es que no hace ningún tipo de fundición en C, te devuelve cadenas de rubí que luego debes convertir en tipos de rubí adecuados. Hacer eso en puro rubí es extremadamente lento y crea objetos en el montón que nunca necesitaron existir en primer lugar. Y como todos sabemos, Ruby's GC es la razón principal de su lentitud. Por lo tanto, es mejor evitarlo y hacer tanto C puro como sea posible.

En segundo lugar, bloquea el entero 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 mientras mantiene la API extremadamente simple. Eric Wong (autor de Unicorn) ha contribuido con algunos parches impresionantes que hacen que casi todo no bloquee y/o libere el GVL en Ruby. La clase Mysql2::Result implementa Enumerable, por lo que si sabe cómo usar una matriz, ya sabe cómo usarla.

Solo estoy al tanto de que algunas personas lo están utilizando ahora mismo en producción, pero también está siendo evaluado en Twitter, WorkingPoint y UserVoice.

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

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

Si le interesa usarlo, pruébelo. Soy rápido para aplicar correcciones si encuentra algún problema;)

+0

Gracias por la respuesta completa! ¡Intentaré utilizar la gema mysql2 en producción! Suena muy bonito. :) P.S. He encontrado un problema: http://github.com/brianmario/mysql2/issues#issue/25. Se trata de un proyecto de rake db: drop in rails3 :) – petRUShka

+0

¿Podría publicar cómo fue su experiencia? ¿Funcionó como reemplazo de reemplazo? ¿Algún problema de rendimiento/estabilidad? –

5

Un poco tarde, pero estoy usando mysql2 en producción en un par de sitios, y lo he encontrado muy estable ya que algunos problemas con las conexiones se han cerrado resuelto hace unas semanas.

11

mysql2 es ahora el defecto en los carriles 3

0

FYI, al utilizar mysql2 (0.2.x) con rieles 3.0.11 he tenido que rebajar mi versión de RubyGems de 01/08/15 a 01/08/10. De lo contrario pasajero barfs ...

Cuestiones relacionadas