AppFabric Cache «Дизайн» — кэширование отдельных элементов или коллекций?

Мы находимся в процессе масштабирования одного из наших веб-приложений с одного сервера на веб-ферму. В настоящее время приложение использует кеш времени выполнения Http для кэширования эталонных данных для приложения. Данные «похожи» на каталог товаров:

  • категории (т.е. список)
  • продукты (т.е. список)

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

  • ProductsByCategory (т.е. Словарь)

Коллекции в настоящее время кэшируются как целые объекты... т.е. весь список/словарь загружается и помещается. Коллекции обычно используются, так как мне обычно нужно заполнять раскрывающиеся списки/списки/и т. д.

Эталонные данные должны синхронизироваться между серверами в ферме. Введите AppFabric...

  1. Подходит ли наша вышеприведенная модель кэширования для кэширования AppFabric? Примеры, с которыми я столкнулся, по-видимому, помещают в кеш отдельные элементы, а не целые коллекции (с «регионами», используемыми для массовых операций получения)

  2. Каков наилучший способ, если это вообще возможно, обновлять справочные данные «вместе»... т. е. если категории обновляются, мне нужно, чтобы продукты обновлялись, чтобы отражать последние категории.


person Robert    schedule 17.11.2010    source источник


Ответы (2)


Поддержка операции типа «оптовая продажа» немного ограничена на данный момент (читай: не существует). Но небольшое размышление предполагает, что это, вероятно, правильно — если вы бросите коллекцию объектов в кеш, он не будет знать, как дать им значимые ключи или теги (подробнее об этом чуть позже). Вы могли подделать его с помощью метода расширения, который принимал набор объектов и просматривал, возможно, свойство Name или Id для каждого объекта, чтобы поместить объекты в кеш, но под прикрытием это все равно кипело бы вплоть до помещения объектов в кеш по одному.

Однако для получения набора объектов из кеша есть еще один вариант метода GetObjectsInRegion(regionname). Если в момент, когда объект вставляется в кеш, вы добавляете к нему тег, например. для продукта пометьте его категорией, позже вы можете вернуть все объекты для определенного тега с помощью метода GetObjectsByTag. Самое замечательное (я думаю) в использовании тегов заключается в том, что вы можете поместить любое их количество на объект в кеше, например. для продукта вы можете пометить его категорией, а также поставщиком и, скажем, ценовым диапазоном. Это дает вам гораздо больше гибкости в том, как вы можете запрашивать свои кэшированные элементы — вы можете запрашивать любой отдельный тег или выполнять запросы И/ИЛИ с помощью методов GetObjectsByAllTags/GetObjectsByAnyTag.

person PhilPursglove    schedule 21.11.2010
comment
Хотя полезно иметь включенные теги, что делать, если вам нужны более сложные поиски, такие как › ‹ и т. д. Было бы хорошо, если бы коллекцию можно было добавить в AppFabric, и вы могли бы легко добавлять/удалять/искать с помощью LINQ. - person Jason Jong; 24.01.2011

Сам столкнулся с этой же проблемой. Используйте локальный кеш, используйте отдельные объекты в регионе и используйте обратные вызовы уведомлений на уровне региона.

person andrewbadera    schedule 27.04.2011