Используя Rails3, у меня есть таблица downloads
со столбцами download_date
и credits
. То, что я хочу сгенерировать - это таблица типа:
Date Credits
2010-11-01 25
2010-11-01 27
*2010-11-01 52 <= Sum of previous 2 rows
2010-11-02 32
*2010-11-02 32 <= Sum of previous row
Это можно сделать, используя что-то вроде:
u.downloads.group_by(&:download_date).each do |date, downloads|
downloads.each do |d|
puts " %10s %3d" % [d.download_date, d.credits]
end
puts "*%10s %3d" % [date, downloads.sum(&:credits)]
end
Это решение, хотя и работает, не слишком похоже на Rails и приводит к довольно большому количеству запросов SQL. Предполагается, что 100 пользователей x 10 000 загрузок в год и количество запросов к концу года составляет порядка 1 000 000 для каждой из этих обслуживаемых страниц.
Любое решение, которое я придумаю, должно быть независимым от базы данных, если это вообще возможно. Я знаю, что буду использовать PostgreSQL на Heroku для развертывания, и моя версия для разработки, пусть и ошибочная, все еще работает на MySQL.
Я надеюсь, что предоставил достаточно информации о проблемной области и связанных с этим проблемах. Есть мнения или предложения?