mysql2
е замислен като по-модерен заместител за съществуващия mysql
скъпоценен камък, който е остарял от известно време. Също така чух, че авторът вече не го поддържа и вместо това препоръчва на всеки да използва неговата чисто ruby версия, тъй като е съвместима с повече реализации на Ruby (но е много по-бавно).
Първият проблем с mysql
gem е, че не прави никакви типове кастинг в C, той ви връща рубинови низове, които след това трябва да преобразувате в правилните типове рубин. Правенето на това в pure-ruby е изключително бавно и създава обекти в купчината, които никога не са имали нужда да съществуват на първо място. И както всички знаем, GC на Ruby е основната причина за неговата бавност. Затова е най-добре да го избягвате и да правите колкото можете повече в чист C.
Второто е, че блокира цялото ruby VM, докато се свързвате, изпращате заявки и чакате отговори и дори затваряте връзката. mysqlplus
определено помага с този проблем, но само за изпращане на заявки, доколкото знам.
mysql2
има за цел да реши тези проблеми, като същевременно поддържа API изключително прост. Eric Wong
(автор на Unicorn) е допринесъл с някои страхотни пачове, които правят почти всичко неблокиращо и/или освобождават GVL в Ruby. Mysql2::Result
класът прилага Enumerable, така че ако знаете как да използвате масив, вие знаете как да го използвате.
В момента знам само за няколко души, които го използват в производството, но се оценява и в Twitter, WorkingPoint и UserVoice.
Аз също преговарям с Yehuda
за това е препоръчителното/по подразбиране за Rails 3, когато се доставя. Някои от неговите техники и оптимизации също ще бъдат въведени в do_mysql
на DataObjects скоро и шофьор.
Драйверът ActiveRecord трябва да е доста солиден в момента. Всичко, което трябва да направите, е да инсталирате gem-а и да промените името на вашия адаптер в database.yml на mysql2
.
Ако проявявате интерес да го използвате, опитайте го. Бързо ще пусна корекции, ако откриете някакви проблеми;)