Кэширование уровня базы данных, триггеры и аннулирование

#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.