CACHING CACHING ASP.NET

Я работаю над реализацией кэширования данных для обычно используемых объектов базы данных, и у меня есть некоторые трудности, решая лучшую стратегию кэширования следующего сценария:

У меня есть таблица, называемая кампаниями с 1423 записями. Кампания содержит все тексты и настройки, которые описывают посадочную страницу. Когда посадочная страница сгенерирована соответствующая кампания из базы данных. Некоторые посадочные страницы рассматриваются больше, чем другие.

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

Я громко размышляю:

a) Загрузите все кампании вперед в словаре, когда сервер запускается и помещает его в кэш.

Я рассчитал, что это займет около 3,8 МБ памяти серверов (ОК) и займет около 8 секунд (ОК) на первом представлении страницы с текущей суммой кампаний. Только проблема в том, что это не очень хорошо масштабируется. Завтра я мог бы иметь в 10 раз больше кампании. Также нам нужно ежедневно обновлять и добавлять новые кампании, и сбрасывая все кампании кэша каждый раз, когда каждый раз кажется немного переплетением.

Приятная часть этого состоит в том, что все кампании всегда кэшируются, так что не посещалось время запуска, которое не посещалось, доступа к нему доступа (например, поисковая система).

b) LazyLoading: кэшируйте каждую кампанию, непрерывно с помощью ключевых кампаний. [ID] «

Это сделало бы очень легко убить или добавлять любезные кампании, и я могу использовать функции кэширования, такие как SlowingExpiration для кампаний меньше используется. Только проблема заключается в том, что когда поисковая система посещает редко посещенную страницу, вот когда нагружена кампания. Другая проблема заключается в том, что кэш загромождается с нагрузками клавиш.

c) Лазиловая кабина в словаре одинаковые беннефины, что и B) и кэш не загромождаются с нагрузками клавиш, но не могут использовать функции кэша, и если память крепко, весь словарь сбрасывается.

Что вы думаете? Я склоняюсь к б).

Кроме того, у меня есть сценарий, где мне нужно получить кампании либо по ID, либо по коду (строку).

В следующем:

Campaigns campaign = //Get campaign from database:
Cache["Campaigns.Id."+campaign.Id.ToString()] = campaign; //Id is Guid
Cache["Campaigns.Code."+campaigns.Code] = campaign;

Это будет стоить мне вдвое память или только для другого ссылки на индекс?

5
задан Niels Bosma 7 September 2011 в 11:08
поделиться