Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Настройка производительности ruby 
:(
    Опции темы
ANTON_AL
Дата 20.12.2009, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 292
Регистрация: 27.1.2007

Репутация: нет
Всего: нет



Доброго дня!

Помогите, пожалуйста, в следующем вопросе:
Я выполняю миграцию данных, которая добавляет примерно 10000 записей в базу SQLite3
Данная операция выполняется вот уже около 5 минут. Я пишу это сообщение, а миграция всё идёт и идёт.

Во время миграции я для каждой записи случайным образом генерирую временной интервал (начальная и конечная дата). Может это даёт основную нагрузку ?
Код

def self.generate_random_dates
    
    # generate begin time
    y = 2009
    mo = 1 + rand( 11 )
    d = 1 + rand( 27 )
    h = rand( 23 )
    m = rand( 59 )
    s = rand( 59 )
    o = rand( 5 ) # UTC offset
    t1 = Time.utc( y, mo, d, h, m, s )    
        
    # generate end time
    h = rand(23)
    m = rand(59)
    s = rand(59)
    t2 = t1 + h*m*s
    
    d1 = DateTime.parse t1.to_s
    d2 = DateTime.parse t2.to_s
    return [d1, d2]
  end  


Смотрю в Process Monitor в Windows, вижу, что интерпретатор Ruby использует лишь 4 % процессорного времени.
Можно ли как-нибудь настроить ruby, чтобы он не стеснялся  smile и кушал столько, сколько потребуется ?

PS: Миграция закончилась
Код

==  AddTestData: migrating ====================================================
==  AddTestData: migrated (1106.2520s) ========================================

... слишком уж много времени для такой простой операции

Это сообщение отредактировал(а) ANTON_AL - 20.12.2009, 17:51
PM MAIL   Вверх
shine
Дата 20.12.2009, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 20.10.2006

Репутация: 2
Всего: 5



1) Выяснить действительное место кода которое тормозит расставив по коду миграции распечатки с выводом текущего времени.
2)Подозреваю что таким местом окажется не функция генерации случчайного числа а именно вставка в БД с коммитом после каждого микроинсерта. Обычно такое лечится инсертами в рамках одной большой транзакции или объединением нескольких инсертов на ввставку одной записи в один инсерт добавляющий несколько записей сразу. Для таких вещей есть специальные рельсовые плугины (гугл в помощь).  
--------------------
An investment in knowledge always pays the best interest. © Benjamin Franklin
PM MAIL   Вверх
source777
Дата 20.12.2009, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 12
Всего: 56



ANTON_AL
1) Почему используется SQLite3, а не MySQL?
2) Почему заполнение БД идёт из миграции? Миграции существуют для создания структуры БД и в случае необходимости могут выполнять обработку уже существующих данных.
3) Какова цель вызова: DateTime.parse t1.to_s ?
4) В принципе генерацию можно упростить до такого:
Код

def self.generate_random_dates
  t0 = Time.utc(2009, 1, 1)
  t1 = Time.at(t0.to_i + rand(31536000))
  t2 = Time.at(t1.to_i + rand(86400))
  [t1, t2]
end


Это сообщение отредактировал(а) source777 - 20.12.2009, 19:36


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
ANTON_AL
Дата 25.12.2009, 01:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 292
Регистрация: 27.1.2007

Репутация: нет
Всего: нет



1) Пока не определился с базой данных. Просто использую ту, которая настроена по умолчанию
2) Не вижу особых проблем с использованием миграций для добавления данных. Помоему, очень даже удобно, т.к. миграции можно отменить, почистив таблицы из метода self.down

В Ruby я пока не силён. Вижу, что коряво получилось генерить даты. В основном запара была с тем, что "Date object is immutable". Вот и приходилось танцевать с бубнами. А, оказывается, всё просто  smile 
Спасибо огромное за пример.

Это сообщение отредактировал(а) ANTON_AL - 25.12.2009, 01:58
PM MAIL   Вверх
source777
Дата 25.12.2009, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 12
Всего: 56



Цитата(ANTON_AL @  25.12.2009,  01:55 Найти цитируемый пост)
Пока не определился с базой данных. Просто использую ту, которая настроена по умолчанию

Вставка данных в SQLite дело не быстрое, поэтому тут должен стоять выбор или создавать 10000 записей или использовать SQLite, но не делать это одновременно, как сделал ты.

Цитата(ANTON_AL @  25.12.2009,  01:55 Найти цитируемый пост)
Не вижу особых проблем с использованием миграций для добавления данных.

Это не значит, что их нет.   smile 
Каждый инструмент должен использоваться для того, для чего предназначен. Загружать демо-данные через миграции это абсолютно тоже самое, что забивать гвозди микроскопом. Прочитай guide по миграциям, чтобы понять их предназначение.
Тем более, что с недавних пор в Rails даже не надо писать собственный rake-task для загрузки демо-данных, как это было принято раньше. См. seed-data



--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby on Rails"
source777
  • С чего начать? начинаем
  • Документацию смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby On Rails | Следующая тема »


 




[ Время генерации скрипта: 0.0839 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.