Ruby, Rails: gem mysql2, кто-нибудь использует этот камень? Это стабильно? - PullRequest
35 голосов
/ 09 июня 2010

Я нашел mysql2 gem . Работает нормально с кодировкой ruby ​​1.9 и utf8 (в отличие от mysql gem)

Но у меня есть сомнения. Кто-нибудь использует этот драгоценный камень в производстве? Как насчет теста производительности? Это быстрее, чем MySQL Gem? Это стабильно?

Ответы [ 6 ]

66 голосов
/ 09 июня 2010

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.

Если вы заинтересованы в его использовании, попробуйте. Я быстро добавлю исправления, если вы обнаружите какие-либо проблемы;)

11 голосов
/ 21 мая 2011

mysql2 теперь по умолчанию в рельсах 3

5 голосов
/ 23 августа 2010

Немного поздно - но я использую mysql2 в производстве на нескольких сайтах и ​​считаю его очень стабильным, поскольку некоторые проблемы с закрытием соединений были решены несколько недель назад.

2 голосов
/ 16 сентября 2010

Если кто-то хочет использовать гем mysql вместо камня mysql2 в Rails 3.0.0 для Windows, я написал небольшую статью, в которой объясняется , как настроить генератор приложений rails .

1 голос
/ 31 мая 2012

Убедитесь, что вы преобразовали свои символы 'latin1' в 'utf8', следуя ответу здесь:

UTF8 Проблемы MySQL на Rails - проблемы с кодированием с utf8_general_ci

0 голосов
/ 30 января 2012

FYI, при использовании mysql2 (0.2.x) с Rails 3.0.11 мне пришлось понизить версию RubyGems с 1.8.15 до 1.8.10. В противном случае Пассажирский барфс ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...