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