У меня есть веб-приложение ASP.NET MVC 3/.NET, которое сильно зависит от данных, в основном вокруг концепции "Местоположения" (Нью-Йорк, Калифорния и т.д.).
В любом случае, у нас есть довольно загруженные запросы к базе данных, которые получают кешированные после их завершения.
например:
public ICollection<Location> FindXForX(string x)
{
var result = _cache.Get(x.ToKey()) as Locaiton; // try cache
if (result == null) {
result = _repo.Get(x.ToKey()); // call db
_cache.Add(x.ToKey(), result); // add to cache
}
return result;
}
Но я не хочу, чтобы первый неудачный первый пользователь ожидал этого вызова базы данных.
Вызов базы данных может занимать от 40 до 60 секунд, что значительно превышает тайм-аут по умолчанию для запроса ASP.NET.
Я хочу "предварительно нагревать" эти вызовы для определенных "популярных" местоположений (например, в Нью-Йорке, Калифорния), когда мое приложение запускается или вскоре после этого.
Я не хочу просто делать это в Глобальном asax (Application_Start), потому что для запуска приложения потребуется слишком много времени. (я планирую предварительно кэшировать около 15 местоположений, так что несколько минут работы).
Можно ли каким-то образом отключить эту логику асинхронно? Может быть, услуга на стороне - лучший вариант?
Единственная альтернатива, о которой я могу думать, - это страница администратора, у которой есть кнопки для этих действий. Таким образом, администратор (например, я) может запустить эти запросы после запуска приложения. Это было бы самым простым решением.
Любые советы?