Временно сохранять результат от стороннего Web Service'a

Darooma

Мой сайт будет использовать некое api с другого сайта. Результат выполнения актуален примерно в течении 12-20 часов. Решение в лоб такое: как только пользователь запросил страницу, которая должна отображать результат этого стороннего сервиса, происходит запрос к нему (то есть на другой сайт) и отображается результат. И так для каждого пользователя.Это неэффективное, с точки зрения производительности, решение. Можно ли как-то сохранять результаты запроса? Куда лучше: в кэш или в базу?Если что, то платформа или asp.net mvc
8 ответов

Darooma

Можно ли как-то сохранять результаты запроса?
Можно
Куда лучше: в кэш или в базу?
Вам виднее, т.к. хз какой у вас там кэш (апликейшен, мемори, файловый и т.д.)Если именно в базе данные не нужны - то вряд-ли стоит их туда запихивать (особенно если данных мегабайты)
Мой сайт будет использовать некое api с другого сайта. Результат выполнения актуален примерно в течении 12-20 часов
Имеет смысл на Application_Start или Auto-Start такой запрос повесить, имхо


Darooma

>>Если именно в базе данные не нужны - то вряд-ли стоит их туда запихивать (особенно если данных мегабайты)Не понимаю. Задача - отобразить данные и сделать так, чтобы данные, будучи однажды запрощенными с другого сайта, сохранялись в базе на 12-20 часов. А потом признавались невалидными (устаревшими) и должны быть запрошены снова при заходе пользователя.>>Имеет смысл на Application_Start или Auto-Start такой запрос повесить, имхоНе вижу никакой связи между "12-20 часов" и Application_Start. Application_Start может быть вызвано, скажем, один раз в месяц, то есть при старте приложения после перезагрузки iis.


Darooma

Darooma,также я советовал посмотреть в сторону auto-startЧтобы пользователь не ждал забора данных из другого ресурса - предлагаю запрашивать их заранееЕсли нужно закэшить сам вывод, а не данные - OutputCache в помощь


Darooma

...Application_Start может быть вызвано, скажем, один раз в месяц, то есть при старте приложения после перезагрузки iis.
Насколько помню (поправьте, ежели), перезагрузка приложения зависит от настроек пула. Он, по дефолту, немного более суток. При этом, весьма не надежен. Можно найти с полдюжины причин, по которой он рецикленётся в любой момент.ИМХО если есть возможность использовать базу - оно.


Darooma

Darooma,также я советовал посмотреть в сторону auto-startЧтобы пользователь не ждал забора данных из другого ресурса - предлагаю запрашивать их заранееЕсли нужно закэшить сам вывод, а не данные - OutputCache в помощь
OutputCache не нужен, нужно кэшировать данные. Кэшировать вывод тоже можно, но ведь это мизерное увеличение производительности.>>ИМХО если есть возможность использовать базу - оно.Думаю, что я так и сделаю.>>также я советовал посмотреть в сторону auto-startПока не смотрел, первый раз слышу про него.


Darooma

Darooma, ну я же говорю - вам виднее, иногда довольно сложно дать однозначно верное решение не видя реализованной инфраструктуры


Darooma

Я пытаюсь оценить какие есть решения, потому что раньше не делал подобного.


Darooma

Я пытаюсь оценить какие есть решения, потому что раньше не делал подобного.
Раньше не кэшировал 0_о?хм.. в базу любой может записать, рекомендую посмотреть следующие ссылки:1. http://www.techdays.ru/videos/1190.html2. http://msdn.microsoft.com/ru-ru/library/xsbfdd8c.aspx