Служба данных WCF + Истекающие данные (Таймер?) - PullRequest
0 голосов
/ 22 сентября 2011

Я хотел бы предоставить несколько конечных точек через службу данных WCF (Singlton), которая будет поддерживать набор данных, используемых для ответа на отдельные запросы.

В идеале я хотел бы иметь возможность истечь (удалить) данные, хранящиеся в памяти для данного запроса после определенного периода времени.

Сохраненные данные будут использоваться для построения (только частично, поэтому из-за кеширования из коробки не нормально) набора результатов для возврата кклиент.Данные будут объектами из API и должны храниться в памяти, а не в хранилище.

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

Есть ли какие-либо мысли по этому вопросу?

Ответы [ 2 ]

0 голосов
/ 21 октября 2011

Закончено перепроектирование и размещение соответствующего компонента службы в службе Windows с системным таймером для очистки необходимых данных.

0 голосов
/ 22 сентября 2011

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

Один из вариантов - не делать процесс очистки не критичным, заставляя чтение фильтровать данные по истечении срока его службы. Например, вы можете использовать базу данных в памяти, такую ​​как SQL Compact Edition или Sqlite. Кэшированные данные могут иметь столбец отметки времени, а затем считывать в кеш, могут запрашивать и всегда фильтровать по отметке времени не старше X. Что делает, это делает не критичным для очистки, но вместо этого оптимизация для давления памяти, которое действительно должно произойти. Sql просто дает вам простые механизмы для фильтрации по отметке времени. Вы можете сделать то же самое со своими собственными структурами данных в памяти.

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

...