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