Будьте в спящем режиме второй кэш уровня и НА УДАЛЯЕТ КАСКАД в схеме базы данных

Наше JAVA-приложение имеет приблизительно 100 классов, отображенных на базе данных (SQL Server или MySQL). Мы используем, в спящем режиме как наш ORM (с XML отображающиеся файлы).

Мы указываем FOREIGN KEY ограничения в нашей схеме базы данных. Большая часть из нашего FOREIGN KEY ограничения также указывают ON DELETE CASCADE.

Мы недавно начали включать, в спящем режиме 2-е кэширование уровня (для популярных объектов и наборов) для смягчения некоторых проблем производительности.

Производительность улучшилась, так как мы включили 2-й кэш уровня. Однако мы также начали встречаться с ObjectNotFoundExceptions.

Кажется, что ObjectNotFoundExceptions происходят, потому что база данных удаляет строки таблицы, внизу В спящем режиме. Например, когда мы удаляем a Parent с В спящем режиме, схема базы данных будет ON DELETE CASCADE любому Child объекты. Это, очевидно, происходит без, в спящем режиме знание, таким образом, это не получает шанс обновить 2-й кэш уровня (и удалить любого удаленного Child объекты).

Мы полагаем, что решение этой проблемы состоит в том, чтобы удалить ON DELETE CASCADE из нашей схемы базы данных (но сохраняют FOREIGN KEYs). Вместо этого мы должны настроить, в спящем режиме для удаления Child зависимости с нормальным удаляют SQL, который также сделает, в спящем режиме, обновляют 2-й кэш уровня. Некоторое ограниченное тестирование показало, что этот подход, кажется, работает.

Я хотел получить некоторую общественную обратную связь на этом. Существует ли альтернатива (лучше?) решения нашей проблемы? Как другие обрабатывают эту ситуацию? В целом, что является компромиссами, которые нужно рассмотреть при использовании ON DELETE CASCADE в схеме базы данных с В спящем режиме?

Спасибо.

6
задан Bat Fastard 21 June 2010 в 17:45
поделиться

1 ответ

Если вы всегда собираетесь удалять через свою программу, вы хотите снять ограничение с базы данных и сообщить hibernate для ON DELETE CASCADE, чтобы позаботиться о связанных ребятах.

С другой стороны, если вы собираетесь иногда удалять объекты в своем java-приложении, а иногда и на уровне вашей базы данных, вы получите странные зависшие данные. В этом случае вам может потребоваться более сложный подход. Вы не поняли, так ли это, поэтому не будем вдаваться в подробности здесь.

1
ответ дан 17 December 2019 в 20:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: