Кэширование связанных данных - PullRequest
0 голосов
/ 15 августа 2011

У меня есть несколько связанных объектов, которые поддерживают каскадные обновления / удаления (пользователь, роли пользователя, разрешения пользователя и роли).
Сервер приложений использует его часто, и мне нужно реализовать быстрый доступ к нему.Для этого я собираюсь поместить его в кеш приложения.
Вопрос в том, как обеспечить синхронизацию между БД и кешем при выполнении каскадной операции над этими данными?Например, если я отбрасываю какую-то роль, мне также нужно отбросить все разрешения этой роли или если я отбрасываю пользователя, мне нужно отбросить все его роли и их разрешения.
Я вижу несколько способов поддержки фактических данных в моем кэше.но я также вижу некоторые недостатки .. Пожалуйста, скажите мне, какое решение лучше.

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

Какое хорошее решение?Спасибо!

1 Ответ

0 голосов
/ 15 августа 2011

как насчет использования ORM?
лично я использую nHibernate , который поставляется с кэшированием и встроенным каскадированием, так что вам даже не нужно беспокоиться об этом(+ конечно, много других функций, которые сделают вашу жизнь намного проще).

в противном случае, я бы определенно НЕ пошел с опцией № 1 или № 3, поскольку они вводят логику приложения в ваш уровень хранения.
умная реализация опции № 2 - приложение, отправляющее команды удаления в БД, не должномешать вашей работе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...