2009-05-26 4 views
2

В настоящее время я думаю о стратегиях кэширования и, что более важно, избегать дублирования данных в кеше. Мой запрос - это не язык, а агностик, но очень связанный с программированием.Кэширование стратегий с выгружаемыми/отфильтрованными данными

Мой вопрос касается эффективного кэширования выгружаемых или отфильтрованных данных, но более того, распределенного кэширования. Последнее я решил пойти с memcached и, более конкретно, с ним. Я видел другой коммерческий вариант в виде NCache, но memcached кажется мне совершенно приемлемым и, по-видимому, используется на facebook, myspace и т. Д.

Мой запрос - это стратегия, в которой вы можете содержать объекты в кеше и также ссылка на них с постраничными данными. Если у меня есть 100 элементов, и я их создаю, я могу кэшировать идентификаторы продукта 1-10 в кеше и кэшировать каждый продукт отдельно. Если мне нужно сортировать элементы по убыванию, то элементы 1-10 будут разными продуктами, поэтому я бы не захотел хранить фактические объекты каждый раз, когда постраничные данные/сортировка/фильтрация изменились, а вместо этого сохранили идентификаторы объектов, чтобы я мог тогда выполните поиск trabsactional в базе данных, если некоторые из них еще не существуют в кеше или являются недопустимыми.

Моя первоначальная идея была для ключа кеша.

paged_<pageNumber><pageSize><sort><sortDirection>[<filter>] 

Я бы тогда перебирать ключи кэш и удалите все, которые начинаются с «paged_» Мой вопрос, в конечном счете, если какой-либо один знает, каких-либо моделей или представлений о straties относительно кэширования таких моделей данных, таких как страничных данных а также убедиться, что объекты не кэшируются более одного раза.

memcached является родным кодом и не будет иметь проблемы с очисткой кэша, как я уже говорил выше, но очевидно, что чем больше элементов в кеше, тем больше времени потребуется. Меня интересует, знает ли кто-нибудь о каком-либо решении или теории для этого типа проблемы, который в настоящее время используется. Я уверен, что будет. Спасибо за ваше время

ТИА

Эндрю

+0

Являются ли страницы динамическими, постоянно ли изменяются данные на каждой странице или они основаны на пользовательском запросе? Является ли приложение уже написанным и слишком медленным, поэтому требуется использование кеша? «Преждевременная оптимизация - это корень всего зла» – Gandalf

+0

Данные изменяются по предварительному набору параметров, а не кэшируются в запросе пользователей. Приложение создается. Это не преждевременная оптимизация, а просто планирование, так как «Невозможно запланировать планирование неудачно ;-)» –

+1

Планирование в порядке, но я бы написал приложение (сохраняя кеширование в глубине вашего разума), а затем протестировал его. Если это не достаточно быстро, добавьте некоторое кэширование через нечто вроде Spring AOP, а не встраивание логики кэширования в код вашего приложения. Это также упростит ответ на этот вопрос, поскольку мы можем увидеть фактический код [или случай использования] и предложить, где кеширование было бы наиболее выгодным. – Gandalf

ответ

0

Я однажды попробовал, что я думаю, подобная стратегия кэширования и нашел его громоздким. В конечном итоге я просто кешировал объекты, составляющие страницы, и генерировал страницы для каждого запроса. 10 попыток кэширования для построения страницы будут (надеюсь) временем второго ответа, в значительной степени мгновенным для пользователей вашего сервиса.

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

Смежные вопросы