0

У нас есть устаревшая система (MAS200, если вам нужно знать), и есть старый скрипт vbs, который извлекает данные из MAS и заполняет две промежуточные таблицы в нашей производственной базе данных SQL. И после некоторой обработки/очистки эти данные попадают в фактические таблицы.Импорт данных через хранимую процедуру или триггеры

Data flow : MAS200 --> Staging tables --> Production table 

Для упрощения рассмотрим родительскую таблицу «Заказ» и детскую таблицу «Элементы». Заказ может иметь несколько элементов, каждый элемент записи будет иметь FK OrderId. Таким образом, во время импорта сначала мы импортируем данные заказа и создаем запись в таблице «Заказ», а затем извлекаем записи «Элементы» и импортируем их.

Существующие TRIGGER подход, основанный - В настоящее время мы в два Триггеры - по одному на каждой промежуточной таблицы (Order & Items). Таким образом, каждая новая вставка используется, и после обработки данных в фактическую производственную таблицу вставляется новая запись. Моя единственная проблема заключается в том, что триггер выполняется для каждой записи Items вместо BULK insert. И это кажется менее управляемым.

SP Подход, основанный на - Если удалить оба Триггеры затем импортировать данные в таблицы промежуточного хранения и, наконец, выполнить SP, который будет импортировать данные Order, а затем выполнить BULK вставить в таблицу Items. Это может быть более эффективным/быстрым?

Это не сравнение на самом деле просто разностного дизайна. Я хотел бы знать, какой из них лучше, или если есть 3-й лучший подход к импорту из MAS в производственный SQL db.

EDIT 1: Спасибо. Как и многие другие, объем данных не является большим или слишком частым. Давайте скажем 10-12 заказов (с 20-30 предметами) каждый час. Также с TRIGGERs мы думали, что мы не получаем TRANSACTION, но достаточно только двух простых TRIGGER. Я считаю, что с SP требуется больше скриптов.

Цель: необходимо обеспечить ее простоту, чистоту и эффективность.

+0

Являются ли ваши промежуточные таблицы на том же сервере, что и производственные таблицы? –

+0

Да, обе таблицы стажа и prod находятся в одной и той же БД. Тем не менее, MAS и скрипт vbs находятся на сервере diff. Также, если предметы больше, мы сталкиваемся с задержкой. –

+0

Если бы я делал это, я бы использовал SP, так как это почти наверняка будет быстрее и позволит вам лучше контролировать свои транзакции. В зависимости от объема передаваемых данных я бы выбрал между BULK INSERT (после того, что предлагает @elirevach) для больших объемов данных, или с помощью обычного INSERT (или MERGE, если некоторые столбцы могут меняться) более умеренных размеров. –

ответ

1

Использование Триггеры:

  • Плюсы: синхронизации данных в реальном масштабе времени является. Когда вы создаете данные по вводу данных, объем данных не должен быть большим, поэтому наличие массовой вставки не улучшится. производительность с помощью триггера достаточно хороша
  • Против: Синхронизация данных не в режиме реального времени, и если соединение разрывается между MAS200 и производством, у вас будет большая проблема. Также (как вы упомянули) у вас не может быть транзакции, что является большой проблемой.

Я предлагаю вам использовать SP для передачи данных с интервалом времени (если вы можете терпеть задержку синхронизации).

+0

Хорошая точка. Чтобы добавить мои 2 цента - подход TRACTION также невозможен с помощью TRIGGER. FYI, объем данных - один заказ может иметь до 30-40 предметов. Так что вы скажете ? –

+0

хорошая точка на транзакции. сколько у вас заказов в минуту? вы можете легко перечислить несколько сотен тысяч записей менее чем за 10 секунд. Поэтому я думаю, что у вас не будет проблем с производительностью. Вы сможете легко синхронизировать каждую минуту без какого-либо влияния на производительность сервера. – FLICKER

+0

Я пересмотрел - PLS см. Редактировать 1 и дайте мне знать ваши мысли. Я не хочу делать это предвзятым. –

0

Если вы действительно хотите быстрый подход, вам необходимо:

1) отключить FK на столе ITEMS для продолжительности нагрузки

2) Затем загрузите ЗАКАЗЫ, а затем включить FK

Все это должно быть сделано с помощью SP, триггер подход является безопасным, но очень медленно, когда его пришли к большой нагрузке набухает

Я надеюсь, что вы найдете его полезным

Thanks

+0

Это постоянная настройка, и ордеры будут импортироваться часто - включение и выключение FK не является вариантом. Я пересмотрел - см. Редактировать 1. Thx –

+0

Много раз мы видим ситуации, когда FK применяется на обоих сайтах, в приложении и БД, если вы можете убедиться, что ваше приложение уже проверило этот FK (выберите, чтобы проверить, существует ли родитель до того, как данные будут вставлены в дочерние элементы), за много времени вы можете просто отключить его, это улучшит вашу производительность и упростит ваше решение. – elirevach

+0

Получил это, но нам нужно сохранить FK в БД. –

Смежные вопросы