mysql2
è inteso come un più moderno sostituzione per il mysql
esistente gemma, che è stantio da un po 'di tempo. Ho anche sentito che l'autore non lo supporta più e invece consiglia a tutti di utilizzare la sua versione in puro rubino poiché è compatibile con più implementazioni di Ruby (ma è molto più lento).
Il primo problema con mysql
la gemma è che non esegue alcun casting di tipo in C, ti restituisce stringhe di rubino che devi quindi convertire in tipi di rubino appropriati. Farlo in puro rubino è estremamente lento e crea oggetti nell'heap che non hanno mai avuto bisogno di esistere in primo luogo. E come tutti sappiamo, il GC di Ruby è la ragione principale della sua lentezza. Quindi è meglio evitarlo e fare quanto più possibile in C puro.
Il secondo è che blocca l'intero ruby VM durante la connessione, l'invio di query e l'attesa di risposte e persino la chiusura della connessione. mysqlplus
aiuta sicuramente con questo problema, ma solo per l'invio di domande per quanto ne so.
mysql2
mira a risolvere questi problemi mantenendo l'API estremamente semplice. Eric Wong
(autore di Unicorn) ha contribuito con alcune fantastiche patch che rendono quasi tutto non bloccante e/o rilasciano il GVL in Ruby. Il Mysql2::Result
la classe implementa Enumerable quindi se sai come usare un Array, sai come usarlo.
Sono a conoscenza solo di poche persone che lo utilizzano in produzione in questo momento, ma è in fase di valutazione anche su Twitter, WorkingPoint e UserVoice.
Sono anche in trattative con Yehuda
sul fatto che sia raccomandato/predefinito per Rails 3 quando viene spedito. Alcune delle sue tecniche e ottimizzazioni verranno anche introdotte in do_mysql
di DataObjects presto anche l'autista.
Il driver ActiveRecord dovrebbe essere abbastanza solido al momento. Tutto quello che devi fare è avere la gem installata e cambiare il nome dell'adattatore in database.yml in mysql2
.
Se sei interessato ad usarlo, provalo. Sono pronto a inviare soluzioni se trovi problemi;)