Дизайн и производительность обработки ETL

Я работаю над процессом ETL для хранилища данных с использованием C #, который поддерживает как SQL Server, так и Oracle. Во время разработки я писал хранимые процедуры, которые синхронизируют данные из одной базы данных в другую. Код хранимых процедур довольно уродлив, потому что он использует динамический SQL. Ему необходимо построить строки SQL, поскольку у нас есть динамическое имя базы данных.

Мой руководитель группы хочет использовать код C # для выполнения ETL. У нас есть генерация кода, которая автоматически генерирует новые классы при изменении определения базы данных. Вот почему я решил не использовать Rhino ETL.

Вот плюсы и минусы:

Хранимая процедура:

Плюсы:

  • быстрый процесс загрузки, все обрабатывается базой данных
  • простое развертывание, компиляция не требуется

Минусы

  • плохая читаемость из-за динамического SQL
  • Необходимость поддержки сценариев T-SQL и PL / SQL при изменении определения базы данных
  • Медленная разработка из-за отсутствия intellisense при написании динамического SQL

Код C #:

Плюсы:

  • легче разработать процесс ETL, потому что мы получаем intellisense из нашего сгенерированного класса
  • , который легче поддерживать из-за сгенерированного класса
  • , лучшего ведения журнала и обработки ошибок

Минусы:

  • низкая производительность по сравнению с хранимой процедурой

Я бы предпочел использовать код приложения для выполнения процесса ETL, но производительность была ужасной по сравнению с хранимыми процедурами. В одном тесте, когда я пытаюсь обновить 10 000 строк. Хранимые процедуры заняли всего 1 секунду, в то время как мой код ETL занял 70 секунд. Даже мне каким-то образом удается уменьшить накладные расходы, 20% из 70-х - это просто вызов оператора обновления из кода приложения.

Может ли кто-нибудь дать мне предложения или прокомментировать, как ускорить процесс ETL с помощью кода приложения?

Моя следующая идея - попытаться выполнить параллельный процесс ETL, открыв несколько соединений с базой данных и выполнив обновление и вставку.

Спасибо

6
задан dsum 2 December 2010 в 07:35
поделиться