В настоящее время я использую Ruby 1.9.1 и "ruby-mysql", который, в отличие от "mysql", написан только в рубине. На самом деле это довольно медленно, так как кажется, что он вставляется со скоростью почти 1 секунду (SLOOOOOWWWWWW). И у меня есть много вложений, чтобы сделать тоже, это в значительной степени то, что этот script делает с умом. Я использую только 1 соединение (поскольку я использую только один поток). Я надеюсь ускорить процесс, создав волокно, которое будет
Я бы предположил, что запуск 20-50 из них значительно увеличит пропускную способность БД. Правильно ли я идти по этому маршруту? Я считаю, что это лучший вариант, в отличие от рефакторинга всего моего кода БД, поскольку синтаксис немного отличается для драйвера mysql по умолчанию: (
Поскольку вы используете ruby1.9.1, просто используйте Threads. Они больше не зеленые. Волокна не помогут, поскольку они слишком легки для нескольких одновременных соединений с БД.
Почему вы закрываете соединение после нескольких вставок? Ваш script должен быть:
Транзакции могут усложнить это.
Если вы делаете не транзакционные вставки, абсолютно используйте одно соединение и записывайте каждую запись по одному.
Если вы используете транзакции и записываете действительно огромный набор данных (т.е. миллионы строк), тогда вам, возможно, потребуется настроить вашу базу данных, чтобы иметь достаточно временного хранилища, чтобы справиться с этим.
В принципе, если одна вставка занимает секунду, она предлагает мне один или несколько из:
Теперь все, что сказано, наличие нескольких "рабочих", выполняющих вставки, может привести к полезному увеличению общей пропускной способности, но на 1 секунду на каждую вставку, это не ваша проблема. Вам нужно найти, в чем проблема.
С действительно огромными пакетными вставками может также стоить отключить контрольные ограничения, внешние ключи и индексы, делать все вставки и затем повторно активировать их.