Ruby: увеличит ли использование Fibers мою пропускную способность для вставки БД? - PullRequest
0 голосов
/ 25 апреля 2010

В настоящее время я использую Ruby 1.9.1 и гем 'ruby-mysql', который в отличие от камня 'mysql' написан только на ruby.На самом деле, это довольно медленно, так как кажется, что скорость его вставки составляет почти 1 в секунду (SLOOOOOWWWWWW).И у меня есть много вставок, чтобы сделать это, в значительной степени то, что этот скрипт делает ультамитно.Я использую только 1 соединение (так как я использую только один поток).Я надеюсь ускорить процесс создания волокна, которое

  1. создаст новое соединение с БД
  2. вставит 1-3 записи
  3. закроет соединение с БД

Я думаю, что запуск 20-50 из них значительно увеличит пропускную способность БД.Правильно ли я идти по этому маршруту?Я чувствую, что это лучший вариант, в отличие от рефакторинга всего моего кода БД, поскольку синтаксис для драйвера mysql по умолчанию немного отличается: (

Ответы [ 2 ]

0 голосов
/ 24 июня 2010

Поскольку вы используете ruby1.9.1, просто используйте Threads. Они больше не зеленые. Волокна не помогут, так как они слишком легкие для одновременных соединений с БД

0 голосов
/ 25 апреля 2010

Почему вы закрываете соединение после нескольких вставок? Ваш скрипт должен быть:

  1. Открыть соединение
  2. Напишите столько записей, сколько вам нужно
  3. Закрыть соединение

Транзакции могут усложнить это.

Если вы выполняете нетранзакционные вставки, обязательно используйте одно соединение и записывайте каждую запись по одной за раз.

Если вы используете транзакции и пишете действительно огромный набор данных (т. Е. Миллионы строк), то, возможно, потребуется настроить вашу базу данных, чтобы у нее было достаточно временного хранилища, чтобы справиться с этим.

В основном, если одна вставка занимает секунду, она предлагает мне один или несколько из:

  1. Ваши внешние ключи не проиндексированы, поэтому проверки ссылочной целостности на вставке крайне неэффективны; или
  2. Чрезмерное открытие и закрытие соединения.

Теперь, несмотря на все сказанное, наличие нескольких «рабочих», выполняющих вставки, может привести к полезному увеличению общей пропускной способности, но при 1 секунде на вставку - это не ваша проблема. Вам нужно выяснить, в чем ваша проблема.

При действительно огромных пакетных вставках может также стоить отключить проверочные ограничения, внешние ключи и индексы, выполнить все вставки и затем снова включить их.

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