Mysql
 sql >> Database >  >> RDS >> Mysql

Ruby, Rails:mysql2 gem, qualcuno usa questa gem? È stabile?

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;)