Как реализовать кэширование в выделенном сервисе кэширования в .net 3.5 / 4.0? - PullRequest
3 голосов
/ 14 октября 2010

Мне нужно разработать специальную службу кэширования (либо службу WCF, либо службу удаленного взаимодействия .Net, либо другую реализацию) для кэширования данных (данных мониторинга приложения для измерения задержки .net3.5) из базы данных (SQL Server 2005), котораязатем могут быть использованы 2-3 службами Windows (службы .net 3.5 WCf), поэтому им не нужно повторно вызывать БД.Таким образом, по сути, это дополнительный уровень сервисного уровня между этими сервисами и БД, чтобы уменьшить потери производительности при вызове БД. Данные в БД большие и очень динамичные (события непрерывно вставляются в БД в течение дня), которые мы хотим кэшировать.Каждый из обслуживающих окон сервисов зависит от другого (один сервис извлекает данные из одной таблицы в Db и агрегирует данные и помещает в другую таблицу в БД, которая затем будет использоваться другим сервисом).у нас есть следующие требования:

  1. Может иметь модель Push или Pull для передачи или извлечения данных в / из БД и Сервисов.
  2. Кэш должен уменьшить общее влияние на БДи загружать данные по дельте, а не перезагружать данные полностью
  3. Данные кэша должны обновляться, если изменились исходные данные в БД.Должна быть определена политика истечения срока действия Sql-кеша.
  4. Должны иметь асинхронные вызовы методов для извлечения данных из БД и обновления кеша для минимизации времени ожидания
  5. Кеш должен поддерживать параллельные запросы к одной БД
  6. Использование ЦП и памяти должно поддерживаться на оптимальном уровне, чтобы оно не оказывало негативного влияния на другие службы.

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

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

  1. .Net Framework Caching
  2. Кэширование когерентности
  3. Скорость
  4. Услуги на основе отдыха для WCF

Любые предложения и рекомендации будут очень неоценимы.

с уважением, KK

Ответы [ 2 ]

2 голосов
/ 14 октября 2010

Это звучит очень элегантно, но элегантность не обязательно хорошая вещь.Меня беспокоит не использование кеширования, а попытка решить внутреннюю проблему с базой данных вне базы данных - не каждая компания является Microsoft / Oracle / ... и обладает достаточными возможностями для создания великолепной базы данных.Я считаю, что у вас есть проблемы с производительностью базы данных, и в качестве решения было предложено кэширование.Но это не чистый кеш, он должен обрабатывать согласованность данных и изменения данных, а также простые операции чтения, и вы пытаетесь работать с данными, которые часто меняются и поэтому не являются подходящим кандидатом на кэш.ИМО, это призыв к катастрофе.Необходимость реализовать все функции базы данных перед другой базой данных просто не правильно.

Упростить базу данных и денормализовать.Если вам все еще нужно кэширование, используйте кэширование ASP.NET вне ASP.NET, просто ссылаясь на него в своем проекте;У него богатый API-интерфейс для удовлетворения практически любых потребностей.

0 голосов
/ 14 октября 2010

Если сервер приложений работает в Windows Server 2008, вы можете использовать AppFrabric для кэширования.

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