Кэширование AppFabric - правильное использование DataCacheFactory и DataCache
Я ищу наиболее эффективный способ организации использования фабрики datacache и datacache для вызовов кэширования AppFabric, так как от 400 до 700 кешей получает на загрузку страницы (и почти ни одного пута). Кажется, что использование единственного статического DataCacheFactory (или, возможно, пары в циклической установке) - это путь.
Должен ли я вызывать GetCache ("cacheName") для каждого запроса объекта DataCache, или я делаю один статический в момент инициализации фабрики DataCache и использую его для всех вызовов?
Нужно ли обрабатывать исключения, проверять коды ошибок и повторять попытки?
Должен ли я учитывать конфликт, когда более одного потока пытается использовать хранилище кэша и хочет один и тот же элемент (по ключу)?
Есть ли какая-то документация, которая должным образом исследует дизайн и использование этого?
Некоторая информация, которую я собрал так далеко от форума:
http://social.msdn.microsoft.com/Forums/en-AU/velocity/thread/98d4f00d-3a1b-4d7c-88ba-384d3d5da915
«Создание фабрики включает в себя подключение к кластеру и может занять некоторое время. Но как только у вас есть фабричный объект и кеш, с которым вы хотите работать, вы можете просто повторно использовать эти объекты для размещения и попадания в кеш, и вам следует увидеть гораздо быстрее производительность. "
http://social.msdn.microsoft.com/Forums/en-US/velocity/thread/0c1d7ce2-4c1b-4c63-b525-5d8f98bb8a49
«Создание одного DataCacheFactory (singleton) более эффективно, чем создание нескольких DataCacheFactory. Вы не должны создавать DataCacheFactory для каждого вызова, это приведет к снижению производительности».
«Пожалуйста, попробуйте инкапсулировать алгоритм циклического перебора (имеющий 3/4/5 заводских экземпляров) в ваш синглтон и сравните результаты нагрузочного теста».
http://blogs.msdn.com/b/velocity/archive/2009/04/15/pushing-client-performance.aspx
«Вы можете увеличить количество клиентов, чтобы увеличить пропускную способность кэша. Но иногда, если вы хотите иметь меньший набор клиентов и увеличить пропускную способность, уловка заключается в использовании нескольких экземпляров DataCacheFactory. Экземпляр DataCacheFactory создает соединение с серверами (например, .g если есть 3 сервера, он создаст 3 соединения) и мультиплексирует все запросы от кэшей данных к этим соединениям. Поэтому, если объем ввода / вывода очень высок, эти соединения TCP могут быть узкими местами. Поэтому один из способов - создать несколько экземпляров DataCacheFactory, а затем использовать операции над ними. "
Вот что используется до сих пор ... свойство вызывается, и если возвращаемое значение не равно NULL, выполняется операция.
private static DataCache Cache
{
get
{
if (_cacheFactory == null)
{
lock (Sync)
{
if (_cacheFactory == null)
{
try
{
_cacheFactory = new DataCacheFactory();
}
catch (DataCacheException ex)
{
if (_logger != null)
{
_logger.LogError(ex.Message, ex);
}
}
}
}
}
DataCache cache = null;
if (_cacheFactory != null)
{
cache = _cacheFactory.GetCache(_cacheName);
}
return cache;
}
}
Посмотрите этот вопрос на форуме Microsoft AppFabric:http://social.msdn.microsoft.com/Forums/en-AU/velocity/thread/e0a0c6fb-df4e-499f-a023-ba16afb6614f