#c# #sql-server #caching #sql-server-2008-r2 #cache-invalidation
#c# #sql-сервер #кэширование #sql-server-2008-r2 #cache-аннулирование
Вопрос:
У меня есть DAL, который используется для сохранения большого количества измерений временных рядов в базе данных СУБД (MS SQL Server). Существует также веб-приложение, которое подключается к этой базе данных и отображает тенденции онлайн (обычно отображает данные за несколько месяцев, с, скажем, 5-минутными минимальными / максимальными / средними агрегатами для различных количеств и устройств IoT).
Из-за большого объема данных я хотел бы кэшировать агрегированные результаты в отдельной таблице, и было бы также неплохо, если бы у меня был дополнительный уровень кэширования в памяти. Однако устройства часто отправляют исторические данные с более старыми временными метками, что означает, что кэш часто необходимо аннулировать, и есть два приложения, которые обращаются к этим данным (служба, которая вставляет / обновляет и иногда считывает данные, и веб-приложение, которое считывает данные).
Я рассмотрел несколько вариантов, таких как триггеры SQL или просто аннулирование таблицы вручную, но я не уверен, как правильно распространить аннулирование кэша на веб-приложение.
Есть ли способ каким-то образом обнаружить события SQL в моем веб-приложении и аннулировать кеш? Или иметь отдельный процесс для кэша в памяти, который также может быть признан недействительным? Или, возможно, мне следует создать свою собственную третью службу, которая была бы прокси-сервером для всех операций с БД, предоставляя кэш данных в памяти (это, конечно, кажется излишним)?
Комментарии:
1. Если вы используете базу данных SQL Server, вы можете рассмотреть возможность использования хранимой процедуры.
2. @jdweng: не могли бы вы уточнить? Почему хранимые процедуры должны быть специфичны для SQL Server и как это связано с кэшированием?
3. Доступ к базе данных осуществляется несколькими приложениями, поэтому обновление таблицы не может быть выполнено ни в одном приложении. Вы можете создать представление (временную таблицу) в SQL в хранимой процедуре и добавить временную метку к представлению. Затем хранимая процедура обработает обновление представления. Приложения могут вызывать хранимую процедуру, которая позаботится об обновлении представления. Представление будет кешем.
4. Что вы подразумеваете под событиями SQL?
Ответ №1:
Я не верю, что веб-приложение может напрямую обнаруживать события sql server.