Как лучше всего обновить таблицу замыкания?

У меня есть таблица, связывающая записи с использованием метода списка смежности (таблица A ), и другая таблица, относящаяся к тому же записи с использованием закрывающей таблицы (таблица B ). Они оба захватывают один и тот же график, поэтому их нужно синхронизировать.

Вопрос в том, как лучше всего обновить таблицу закрытия?

На мой взгляд, есть три альтернативы:

  1. Триггеры. При INSERT / UPDATE / DELETE в A запустите sproc, который вычисляет новые замыкания. Минусы: изменяется на A приводит к длительной синхронной (блокирующей?) Операции; возможные взаимоблокировки (?).
  2. Код приложения. Сузьте изменения в A , чтобы добавить / обновить / удалить методы (например, шаблон репозитория), и перегрузите их вызовами sproc, который вычисляет новые замыкания. Минусы: дополнительный обход базы данных; возможная проблема целостности, если другой thead изменяет A или B противоположным образом одновременно; возможная проблема целостности, если, скажем, другое приложение решает изменить A , а не B .
  3. Фоновое обновление. Напишите вторичный процесс, который постоянно ищет обновления в A и выполняет соответствующие обновления в таблице закрытия. Минусы: сложность (дополнительная услуга по написанию и управлению); окна без синхронизации.

Даже если нет "лучшего" варианта, любые мысли о компромиссах будут очень благодарны!

5
задан ladenedge 11 April 2011 в 16:02
поделиться