Как получить достойную производительность драйвера MySQL в Ruby - PullRequest
2 голосов
/ 20 марта 2010

Я замечаю, что у меня очень низкая производительность при вставке или запросах. Сами запросы являются базовыми и могут выполняться без задержек непосредственно из mysql. Сценарий ruby, который я написал, имеет только 1 поток, поэтому используется только 1 соединение, и оно никогда не закрывается, если сценарий не завершен. Довольно простой, я просто пытаюсь вставить много строк. Существует один или два поиска, чтобы получить суррогатный ключ или проверить на наличие дубликатов, но сложность просто O (n). Кроме того, миллионы записей не похожи, поэтому опять же сами запросы не запускаются.

Я использую:

  • Рубин 1.9.1
  • Gem / драйвер: ruby-mysql 2.9.2
  • MySQL 5.1.37-1ubuntu5.1
  • ^ все 32-битные версии в 32-битном дистрибутиве Ubuntu

Я получаю около 1-2 вставок в секунду, довольно медленно. Я знаю, что многие люди предложат сменить драйвер, но это означает, что у меня есть некоторый рефакторинг и повторное тестирование. Поэтому я был бы очень признателен за любую помощь, но, пожалуйста, если вы порекомендуете, по крайней мере, скажите, почему вы это делаете ... Например, если вы уже использовали ruby-mysql xxx и обнаружили, что другой драйвер mysql лучше, чем обязательный, " сменить драйвер ».

Что бы я хотел знать:

  1. Как улучшить производительность с помощью ruby-mysql 2.9.2
  2. Если и только если я не могу сделать это с ruby-mysql 2.9.2, что мне делать?
  3. Если бы я заставил сценарий создавать новые потоки для вставки БД, я мог бы ускорить производительность ... это то, что мне нужно сделать?

1 Ответ

3 голосов
/ 02 апреля 2010

Не используйте чисто-рубиновый самоцвет mysql. Это печально известно для выполнения медленно. Используйте тот с скомпилированным клиентом.

$ gem install mysql

Вам понадобится рабочая среда сборки и библиотеки разработки ruby.

Я довольно уверен, что интерфейс / API такой же или очень похожий.

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