Вставки пакета с отложенным заданием - PullRequest
5 голосов
/ 02 февраля 2011

Я нахожусь в процессе оптимизации моих запросов SQL на моем сервере heroku, чтобы я мог ускорить выполнение одного конкретного запроса.Сейчас я в основном стремлюсь сконцентрировать все запросы INSERT в наименьшее количество возможных запросов.

В какой-то момент в моем коде у меня есть это:

  jobs.each do |j|
    Delayed::Job.enqueue j
  end

Я обнаружил, что каждыйитерация отправляет в базу данных BEGIN, INSERT, COMMIT.Этот массив jobs может содержать от нескольких до нескольких сотен объектов.Я искал способ пакетной вставки отложенных заданий, но ничего не смог найти.Есть идеи, как этого добиться?

Ответы [ 2 ]

1 голос
/ 23 октября 2011

Я закончил ставить в очередь мой объект User, который имел атрибут jobs. Таким образом, 1 вставка вместо jobs.length вставок.

1 голос
/ 10 февраля 2011

Я давно использую AR-расширения для вставки больших объемов данных из моделей в базу данных.

Это было в Rails 2.3.x, однако, будьте осторожны, теперь есть разные версии в зависимости от версии Rails: http://www.continuousthinking.com/tags/arext

Я не уверен, как работает Delayed :: Job, но, исходя из вашего примера, я бы предположил, что он вставляет запись по заданию в таблицу, которая затем служит в качестве очереди. Вы можете расширить это, используя AR-Extensions, чтобы собрать все эти модели и вставить все задания сразу.

...