Я не думаю, что вам нужно использовать хранимую процедуру, команда может быть основана на операторе выбора, который непосредственно содержится в ней.
Лично я избегаю SqlCacheDependency, меня всегда беспокоит, что в запросе может быть что-то, с чем не справляется брокерская система, на которой он основан, и я не всегда могу вспомнить, что это такое. Это также кажется слишком сложным под капотом, поэтому я беспокоюсь, что он может быть хрупким.
Изменить
В конкретном случае, когда пользователь обновляет свой профиль, код, который обновляет профиль, удаляет кэшированную копию.
В более общем смысле я бы установил приемлемую задержку для получения актуальной информации и установил для нее абсолютный срок действия.
В случае дорогостоящих SQL-запросов я бы рассмотрел возможность размещения общих сводок в других таблицах и наличия кода, который обновляет эти данные (например, SP), корректирует или удаляет подготовленные данные.
Я не говорю, что никогда не буду использовать SqlCacheDepencency, но пока я не сталкивался со сценарием, в котором это был бы единственный разумный вариант, хотя я уверен, что они существуют. Я предполагаю, что такие сценарии могут возникнуть, когда вы не полностью контролируете весь код, который может изменить базу данных.
Что такое "актуальные"?
В веб-приложении последняя информация, которую пользователь может увидеть, — это информация, предоставленная в последнем ответе. Вот некоторые вещи, которые следует учитывать.
- Скажем, они что-то принесли, но их прерывает телефонный звонок на 5 минут. Насколько они осознают, что данные, на которые они возвращаются, были 5-минутной давности и теперь могут быть устаревшими?
- Пользователь извлекает что-то всего за несколько миллисекунд до отправки данных, что может изменить то, что он увидит. Насколько это проблематично?
- Кто-то вводит какие-то новые данные, но еще не отправил их, можно ли сказать, что текущие данные в базе данных сами по себе устарели?
Суть, к которой я веду, заключается в том, что независимо от того, насколько хитроумно мы вкладываем кэш в системы, задержка неизбежна, и мы принимаем такую задержку, не задумываясь о ней.
Имея это в виду, во многих ситуациях, когда мы можем чувствовать себя обязанными предоставлять самую последнюю информацию, такое обязательство на самом деле не оправдано. Хорошим примером этого является сам SO. Многие результаты запросов, которые мы видим здесь, на самом деле кэшированы, и можно увидеть данные, которые не совсем соответствуют изменениям, которые, как мы знаем, мы сделали. Однако другие люди не знают о наших изменениях, и не так важно, чтобы они увидели их в ту же секунду, когда мы их внесли.
person
AnthonyWJones
schedule
29.09.2009