У меня есть несколько связанных объектов, которые поддерживают каскадные обновления / удаления (пользователь, роли пользователя, разрешения пользователя и роли).
Сервер приложений использует его часто, и мне нужно реализовать быстрый доступ к нему.Для этого я собираюсь поместить его в кеш приложения.
Вопрос в том, как обеспечить синхронизацию между БД и кешем при выполнении каскадной операции над этими данными?Например, если я отбрасываю какую-то роль, мне также нужно отбросить все разрешения этой роли или если я отбрасываю пользователя, мне нужно отбросить все его роли и их разрешения.
Я вижу несколько способов поддержки фактических данных в моем кэше.но я также вижу некоторые недостатки .. Пожалуйста, скажите мне, какое решение лучше.
- Все каскадные операции выполняются в базе данных с использованием триггеров.Приложение получает уведомления через механизм
SqlCacheDependency
.Проблема: как насчет того, когда сервер сильно загружен?Будут ли уведомления задерживаться и будет ли слишком дорого обходиться серверу БД / приложения для многих точных зависимостей, таких как "select SomeField from DataTable where id = @x
"? - Все каскадные операции выполняются на бизнес-уровне приложения.За каждой операцией обновления / удаления БД следует операция аннулирования кэша.Проблема: удвоенная логика и большой сетевой трафик (много обновлений вместо одного)
- Каскадные операции в БД, каскадные аннулирования в кеше с использованием
CacheDependency
.Проблема: двойная логика.
Какое хорошее решение?Спасибо!