mysql2
é um substituto mais moderno para o mysql
existente gem, que está obsoleta há algum tempo. Também ouvi dizer que o autor não está mais dando suporte a ele e, em vez disso, recomenda que todos usem sua versão de ruby puro, pois é compatível com mais implementações de Ruby (mas é muito Mais devagar). O primeiro problema com o
mysql
gem é que ele não faz nenhum tipo de conversão em C, ele retorna strings ruby que você precisa converter em tipos ruby apropriados. Fazer isso em pure-ruby é extremamente lento e cria objetos no heap que nunca precisaram existir em primeiro lugar. E como todos sabemos, o GC do Ruby é o principal motivo de sua lentidão. Portanto, é melhor evitá-lo e fazer o máximo possível em C puro. A segunda é que ele bloqueia todo ruby VM durante a conexão, enviando consultas e aguardando respostas e até mesmo fechando a conexão.
mysqlplus
definitivamente ajuda com esse problema, mas apenas para enviar consultas até onde eu sei. mysql2
visa resolver esses problemas mantendo a API extremamente simples. Eric Wong
(autor de Unicorn) contribuiu com alguns patches incríveis que tornam quase tudo não bloqueante e/ou liberam a GVL em Ruby. O Mysql2::Result
class implementa Enumerable, portanto, se você souber usar um Array, saberá como usá-lo. Estou ciente de apenas algumas pessoas usando-o em produção no momento, mas também está sendo avaliado no Twitter, WorkingPoint e UserVoice.
Também estou conversando com
Yehuda
sobre ser o recomendado/padrão para Rails 3 quando for lançado. Algumas de suas técnicas e otimizações também serão trazidas para o do_mysql
do DataObjects motorista em breve também. O driver ActiveRecord deve ser bastante sólido no momento. Tudo o que você precisa fazer é ter a gem instalada e alterar o nome do seu adaptador em database.yml para
mysql2
. Se você estiver interessado em usá-lo, experimente. Sou rápido em enviar correções se você encontrar algum problema;)