У меня возникают проблемы с производительностью в проекте rails (работает на rails 2.0.5), например, на моих страницах администрирования пользователей.
моя модель пользователя имеет много отношений (детали, адреса, роли...), которые загружаются с активной загрузкой. Это создает действительно огромные SQL-запросы, в некоторых случаях для загрузки 30 пользователей требуется почти минута. С другой стороны, удаление активной загрузки создает сотни запросов, в конце концов у меня такая же проблема: загрузка страницы происходит медленно.
Я использовал для разработки на Java и Oracle, для таких больших запросов, которые я использовал для создания представлений, эти представления затем кэшировались для более быстрого рендеринга. Было очень скучно поддерживать, поскольку мне приходилось вручную обновлять поля базы данных в сценариях представлений и т.д.
НО у него действительно были фантастические выступления.... так что мне было интересно, если кто-нибудь когда-либо пытался реализовать что-то, чтобы воспользоваться преимуществами представлений Mysql в активной записи?
Я просто сделал некоторые базовые тесты, вот мой взгляд (всего несколько полей для примера, у меня есть стандартная таблица пользователей Restful Authentication и большая таблица "Детали" для личных данных):
CREATE VIEW users_vs AS SELECT
users.id ,
users.login ,
users.email ,
details.last_name ,
details.first_name ,
details.phone ,
details.fax ,
FROM `users` LEFT OUTER JOIN `details` ON details.user_id = users.id ;
Тогда модель:
class UsersV < ActiveRecord::Base
end
Пробовал несколько вещей в моей консоли:
u=UsersV.find(:first) # ok !
u=UsersV.find_by_last_name('smith') #=> ok !
us=UsersV.find_all_by_last_name('smith') #=> ok too !
глядя на журнал, простые запросы обрабатываются так же, как и любые табличные запросы
Конечно, эти поддельные модели будут просто использоваться для чтения данных.
Мне интересно:
-
Если кто-то уже пробовал это?
-
если это хорошая идея?
-
если я должен искать что-то вроде memcached, а не...