Данные кэша, возвращаемые хранимыми процедурами? - PullRequest
0 голосов
/ 12 августа 2011

У меня есть сайт Asp.Net MVC 3. Ниже приведен стек вызовов

Web page/jQuery: $(document).Ready(.... Ajax calls... render the page...)
=> MVC Control methods
=> Entity framework 4.1
=> mapped store procedures (SQL Server 2008)

Вопрос:

  1. Где лучше всего реализовать кеш?
  2. Как сообщить странице, что таблицы подчеркивания SQL-сервера обновлены?

Ответы [ 4 ]

0 голосов
/ 12 августа 2011

Одним из способов является кэширование визуализированных представлений в указанное время.

Допустим, у вас есть страница, которая обновляется не часто.Таким образом, вместо того, чтобы обращаться к базе данных при каждом посещении, вы можете сохранять визуализированный вид в кеше.Это достигается с помощью OutputCaching - http://www.asp.net/mvc/tutorials/improving-performance-with-output-caching-cs.

Другим способом может быть хранение данных.

Здесь снова Вы можете кэшировать его в течение некоторого указанного времени.В ASP.NET (MVC) это может быть достигнуто с помощью объекта Cache - http://msdn.microsoft.com/en-us/library/aa478965.aspx. Объект Cache позволяет указать, как долго должны кэшироваться данные, когда вы помещаете их в кэш.Например:

Cache.Insert("key",
   myTimeSensitiveData,
   null,
   DateTime.Now.AddMinutes(1),
   TimeSpan.Zero);

Или вы можете кэшировать, пока он не будет «недействителен».

Допустим, у вас есть методы GetCustomers и UpdateCustomer.В GetCustomers вы проверяете, находятся ли данные в Cache.Если нет, вы попадаете в базу данных, помещаете ее в кеш и возвращаете.Он находится в кеше, пока кто-нибудь не вызовет UpdateCustomer.В этом методе вы записываете измененного клиента в базу данных и аннулируете данные, хранящиеся в Cache.Вы можете просто удалить это.Таким образом, когда GetCustomers вызывается снова, он попадает в базу данных и снова заполняет Cache.Но помните, что Cache имеет глобальную область видимости и доступен для многих потоков одновременно.Вам понадобится некоторый код синхронизации для доступа к Cache.

0 голосов
/ 12 августа 2011

Попробуйте добавить кеширование как можно ближе к источнику. Таким образом, большая часть вашего приложения может получить выгоду от улучшенной скорости.

Если вы управляете кодом, который модифицирует базовые таблицы, вы можете оттуда сделать кеш недействительным. Вы также можете поместить короткий таймаут в свой кеш. Если интенсивно используется кэширование запросов, то только секунда может увеличить скорость во много раз. Обязательно проверьте увеличение производительности, чтобы можно было настроить таймауты.

0 голосов
/ 12 августа 2011

Для вопроса №2 вы можете посмотреть Уведомления о запросах . Настроить все немного сложно, но это позволит вам делать такие вещи, как кэширование, пока данные в вашей базе данных не будут обновлены.

0 голосов
/ 12 августа 2011

Не уверен насчет «лучшего» способа сделать это, но один из способов сделать это - иметь действие контроллера MVC, которое вызывает базу данных, чтобы проверить и проверить, обновлены ли данные.(Вы можете сделать это с помощью отметки времени.)

Полученная функция затем получит данные из кэша или с сервера.

http://davidwalsh.name/cache-ajax

Единственное интересноечто следует отметить, однако;в том, что вы должны убедиться, что вызов, чтобы сначала выяснить, можете ли вы использовать кэшированный контент, быстрее, чем вообще не кэшировать контент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...