Какой лучший способ обновить таблицу закрытия? - PullRequest
5 голосов
/ 09 апреля 2011

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

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

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

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

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

1 Ответ

4 голосов
/ 09 апреля 2011

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

...