Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Ruby, Rails:mysql2 gem, benutzt jemand dieses gem? Ist es stabil?

mysql2 ist als modernerer Ersatz gedacht für das vorhandene mysql Juwel, das seit einiger Zeit veraltet ist. Ich habe auch gehört, dass der Autor es nicht mehr unterstützt und stattdessen jedem empfiehlt, seine reine Ruby-Version zu verwenden, da sie mit mehr Ruby-Implementierungen kompatibel ist (aber viel langsamer).

Das erste Problem mit mysql Gem ist, dass es in C keine Typumwandlung durchführt, es gibt Ihnen Ruby-Strings zurück, die Sie dann in richtige Ruby-Typen konvertieren müssen. Dies in reinem Rubin zu tun, ist extrem langsam und erzeugt Objekte auf dem Haufen, die gar nicht erst existieren mussten. Und wie wir alle wissen, ist Rubys GC der Hauptgrund für seine Langsamkeit. Also ist es am besten, es zu vermeiden und so viel wie möglich in reinem C zu machen.

Zweitens blockiert es gesamt ruby VM beim Verbinden, Senden von Abfragen und Warten auf Antworten und sogar Schließen der Verbindung. mysqlplus hilft definitiv bei diesem Problem, aber meines Wissens nur zum Senden von Anfragen.

mysql2 zielt darauf ab, diese Probleme zu lösen und gleichzeitig die API extrem einfach zu halten. Eric Wong (Autor von Unicorn) hat einige großartige Patches beigesteuert, die fast alles nicht-blockierend machen und/oder die GVL in Ruby freigeben. Das Mysql2::Result Klasse implementiert Enumerable. Wenn Sie also wissen, wie ein Array verwendet wird, wissen Sie, wie es verwendet wird.

Ich kenne nur wenige Leute, die es derzeit in der Produktion verwenden, aber es wird auch bei Twitter, WorkingPoint und UserVoice evaluiert.

Ich bin auch in Gesprächen mit Yehuda darüber, dass es die Empfehlung/Standardeinstellung für Rails 3 ist, wenn es ausgeliefert wird. Einige seiner Techniken und Optimierungen werden auch in do_mysql von DataObjects eingebracht Fahrer bald auch.

Der ActiveRecord-Treiber sollte im Moment ziemlich solide sein. Alles, was Sie tun müssen, ist, das Gem installiert zu haben und Ihren Adapternamen in database.yml in mysql2 zu ändern .

Wenn Sie daran interessiert sind, es zu verwenden, probieren Sie es aus. Ich bin schnell dabei, Korrekturen zu veröffentlichen, wenn Sie Probleme finden;)