Как долго я должен кэшировать объект, который можно изменить в любое время? - PullRequest
1 голос
/ 23 июня 2011

Я нахожусь в процессе создания довольно сложного приложения. Ожидается, что он будет работать на нескольких веб-серверах, иначе это будет легко.

По сути, у нас есть набор записей о клиентах. Каждая запись клиента имеет столбец XML, который содержит все «реальные» данные, такие как имя клиента и другие поля, которые создаются динамически. Наши пользователи могут обновить запись клиента в любое время. Также у нас есть записи приложений. Каждое приложение привязано к нескольким клиентам. Каждое приложение обычно привязано к более чем 3 клиентам. XML-данные каждого клиента, как правило, превышают 5 КБ текста.

В некотором профилировании, которое я сделал, получение и десериализация этих данных XML является довольно дорогой операцией. В одной части нашего веб-приложения у нас должны быть очень низкие задержки ( related ). Итак, во время этой части наше веб-приложение представляет собой веб-сервис JSON. Когда к нему делается запрос, обычно требуется каждая запись клиента (полностью, из-за того, как она в данный момент кодируется). Я пытаюсь сделать как можно меньше обращений к базе данных в этой части.

Как долго я должен кэшировать XML-объекты записей клиента? Зная, что пользователь может изменить его в любое время, я не уверен, стоит ли вообще его кэшировать, но могут ли пользователи жить со слегка устаревшими данными?

Ответы [ 3 ]

2 голосов
/ 23 июня 2011

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

1 голос
/ 23 июня 2011

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

1 голос
/ 23 июня 2011

Вы можете сохранить хэш xml в базе данных, по которой клиенты проверяют свой кэшированный XML.

Затем, если он не совпадает, аннулируйте кэш и получите новый.

Когда XML обновится, обновите хеш с ним, и тогда ваши клиенты заметят и обновят свой кеш.

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