Я пишу веб-приложение для отслеживания производственного процесса мебельной фабрики. Ему нужно обработать тысячи данных. Пока что я запускаю RoR на Mongrel + MySQL, и он очень медленный (2-4 минуты для некоторых просмотров). Когда я смотрю журналы RoR, кажется, что запросы к базе данных не медленные (0-10 мс).
Является ли RoR медленным при преобразовании данных базы данных в объект? Дворняга медлителен?
Изменить. Во-первых, я был в разработке. окр. В производственной среде самый медленный просмотр занимает 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 для тех методов, которые подходят, если только вы не запросите страницу первым.