У меня есть таблица, связывающая записи с использованием метода списка смежности (таблица A ), и другая таблица, относящаяся к тому же записи с использованием закрывающей таблицы (таблица B ). Они оба захватывают один и тот же график, поэтому их нужно синхронизировать.
Вопрос в том, как лучше всего обновить таблицу закрытия?
На мой взгляд, есть три альтернативы:
- Триггеры. При INSERT / UPDATE / DELETE в A запустите sproc, который вычисляет новые замыкания. Минусы: изменяется на A приводит к длительной синхронной (блокирующей?) Операции; возможные взаимоблокировки (?).
- Код приложения. Сузьте изменения в A , чтобы добавить / обновить / удалить методы (например, шаблон репозитория), и перегрузите их вызовами sproc, который вычисляет новые замыкания. Минусы: дополнительный обход базы данных; возможная проблема целостности, если другой thead изменяет A или B противоположным образом одновременно; возможная проблема целостности, если, скажем, другое приложение решает изменить A , а не B .
- Фоновое обновление. Напишите вторичный процесс, который постоянно ищет обновления в A и выполняет соответствующие обновления в таблице закрытия. Минусы: сложность (дополнительная услуга по написанию и управлению); окна без синхронизации.
Даже если нет "лучшего" варианта, любые мысли о компромиссах будут очень благодарны!
задан ladenedge 11 April 2011 в 16:02
поделиться