mysql2
ma być bardziej nowoczesnym zamiennikiem dla istniejącego mysql
klejnot, który już od jakiegoś czasu jest nieświeży. Słyszałem również, że autor już go nie wspiera i zamiast tego zaleca wszystkim korzystanie z jego wersji w czystym Ruby, ponieważ jest ona kompatybilna z większą liczbą implementacji Rubiego (ale jest dużo wolniej).
Pierwszy problem z mysql
gem jest to, że nie wykonuje żadnego rzutowania typów w C, daje ci z powrotem łańcuchy rubinowe, które następnie musisz przekonwertować na odpowiednie typy ruby. Robienie tego w przypadku czystego rubinu jest niezwykle powolne i tworzy na stosie obiekty, które nigdy nie musiały istnieć. Jak wszyscy wiemy, GC Ruby jest głównym powodem jego powolności. Najlepiej więc tego unikać i robić jak najwięcej w czystym C.
Po drugie, blokuje całość ruby VM podczas łączenia, wysyłania zapytań i oczekiwania na odpowiedzi, a nawet zamykania połączenia. mysqlplus
zdecydowanie pomaga w tym problemie, ale tylko do wysyłania zapytań, o ile wiem.
mysql2
ma na celu rozwiązanie tych problemów przy zachowaniu niezwykle prostego interfejsu API. Eric Wong
(autor Unicorn) dostarczył kilka niesamowitych łatek, które sprawiają, że prawie wszystko nie blokuje się i/lub udostępnia GVL w Ruby. Mysql2::Result
klasa implementuje Enumerable, więc jeśli wiesz, jak używać tablicy, wiesz, jak jej używać.
Wiem, że tylko kilka osób używa go teraz w produkcji, ale jest on również oceniany na Twitterze, WorkingPoint i UserVoice.
Rozmawiam też z Yehuda
o tym, że jest to zalecane/domyślne dla Rails 3, gdy jest dostarczane. Niektóre z jego technik i optymalizacji zostaną również wprowadzone do do_mysql
DataObjects wkrótce również kierowca.
Sterownik ActiveRecord powinien być w tej chwili całkiem solidny. Wszystko, co musisz zrobić, to zainstalować gem i zmienić nazwę adaptera w database.yml na mysql2
.
Jeśli chcesz go użyć, spróbuj. Szybko wprowadzam poprawki, jeśli znajdziesz jakieś problemy;)