Я пишу веб-приложение для мониторинга производственного процесса на мебельной фабрике. Он имеет тысячи данных для обработки. Пока что я запускаю RoR на Mongrel + MySQL, и это действительно очень медленно (2-4 минуты для некоторых просмотров). Когда я смотрю журналы RoR, кажется, что запросы к базе данных не медленные (0-10 мс).
Замедлен ли RoR при преобразовании данных базы данных в объект? Дворняга медленный?
Редактировать : Первое: я был в dev. окр. В производственной среде самый медленный просмотр занимает 2 минуты (что на хорошем компьютере должно быть менее 1 минуты, моему 5 лет). Имея ruby-prof и немного здравого смысла, я выяснил, какие методы замедляют работу приложения. Проблема заключается в том, что одиночные SQL-запросы вызываются в циклах на больших наборах данных:
ofs = Ofkb.find_by_sql ["..some large sql query..."]
for of in ofs # About 700-1000 elements
ops = Operation.find(..the single query..)
etc.
end
Вот результаты ruby-prof по этим методам:
%self total self wait child calls name
32.19 97.91 97.91 0.00 0.00 55 IO#gets (ruby_runtime:0}
28.31 86.39 86.08 0.00 0.32 32128 Mysql#query (ruby_runtime:0}
6.14 18.66 18.66 0.00 0.00 12432 IO#write (ruby_runtime:0}
0.80 2.53 2.42 0.00 0.11 32122 Mysql::Result#each_hash (ruby_runtime:0}
Проблема в том, что я не могу избежать этих отдельных запросов. У меня есть тысяча событий, из которых я должен вычислить сложные данные. Прямо сейчас я использую memcached для этих методов, и это нормально, если только вы не первый запросите страницу.