Когда стоит использовать SQL Server в качестве механизма распределенного кэширования?

У меня 2 веб-сервера, и я столкнулся с проблемой, когда мне нужно преждевременно удалить (удалить) кешированный элемент. Поскольку в настоящее время я использую IMemoryCache, вызов Remove(key) удаляет кешированный элемент только с одного сервера. У меня нет возможности использовать Redis, Nache и т. Д., Но приложение уже использует SQL-сервер. Я могу легко настроить распределенное кеширование с помощью таблицы кеширования, но это кажется нелогичным, потому что то, что я кэширую, - это пользовательские данные, для которых я не хочу попадать в базу данных при каждом вызове (например, я кэширую 50 элементов пользователя данные каждые 5 минут, что сократило количество обращений к базе данных на 500). Есть ли что-то, чего мне не хватает, что сделало бы использование SQL-сервера в качестве серверной части распределенного кеша действительно полезным?


person Dinerdo    schedule 11.06.2019    source источник
comment
Какая версия SQL Server? SQL Server 2014 и более поздние версии содержат таблицы в памяти. В любом случае существует много видов кеширования. При кэшировании ответов сервер кэширует сгенерированный вывод HTML, поэтому ему не нужно создавать его снова. В этом случае имеет смысл использовать базу данных для кеширования. Это также имеет смысл для пользовательских данных, производство которых требует больших затрат.   -  person Panagiotis Kanavos    schedule 11.06.2019
comment
Доступ к данным кеша сильно отличается от доступа к данным приложения. С данными кеша вы просто ищите ключ и по частям читаете / записываете большой двоичный объект. Нет никаких блокировок для записей или таблиц, нет блокировок для соединений. Использование таблиц в памяти еще больше снижает конкуренцию, поскольку им не нужно устанавливать блокировки на уровне страницы или таблицы.   -  person Panagiotis Kanavos    schedule 11.06.2019
comment
Я использую SQL Server 2017. Я кэширую информацию о пользователях, например, кто в какой роли. В системе не так много ролей со специальным доступом, поэтому пользователей всего 50, и эти данные меняются только раз в месяц. Я хочу немедленно удалить ключ кеша при редактировании безопасности (что работает, но это происходит только на одном сервере). Использование распределенного кеша кажется лучшим способом сделать это, но с точки зрения производительности я этого не вижу ... Я исследую таблицы в памяти, поскольку это имеет для меня смысл.   -  person Dinerdo    schedule 11.06.2019
comment
@PanagiotisKanavos Я думаю, ваш комментарий должен быть ответом. Документация - важное примечание : Когда SQL Server используется в качестве резервного хранилища распределенного кэша, использование одной и той же базы данных для кэша и обычного хранения и извлечения данных приложения может отрицательно повлиять на производительность обоих. Мы рекомендуем использовать выделенный экземпляр SQL Server для резервного хранилища распределенного кэша.   -  person JDNickell    schedule 09.10.2019


Ответы (1)


Похоже, у вас типичная проблема аннулирования и истечения срока действия кеша. Вы можете использовать сеточный кеш для распределенного кеширования (например, Redis, Hazelcast), но это не решает проблему аннулирования. Вы можете рассмотреть таких поставщиков, как ScaleArc или Heimdall Data. Они обеспечивают логику кеширования. Вы выбираете предпочтительное хранилище (в памяти, Redis и т. Д.), И оно обрабатывает кеширование запросов и делает их недействительными. Об этом в блоге SQL Server: https://www.itprotoday.com/industry-perspectives/reduce-sql-server-costs-heimdall-data-caching

person Munchai    schedule 12.06.2019
comment
Это не ответ на мой вопрос, но я ценю эту ссылку! - person Dinerdo; 13.06.2019