Я работаю над процессом ETL для хранилища данных с использованием C #, который поддерживает как SQL Server, так и Oracle. Во время разработки я писал хранимые процедуры, которые синхронизируют данные из одной базы данных в другую. Код хранимых процедур довольно уродлив, потому что он использует динамический SQL. Ему необходимо построить строки SQL, поскольку у нас есть динамическое имя базы данных.
Мой руководитель группы хочет использовать код C # для выполнения ETL. У нас есть генерация кода, которая автоматически генерирует новые классы при изменении определения базы данных. Вот почему я решил не использовать Rhino ETL.
Вот плюсы и минусы:
Хранимая процедура:
Плюсы:
Минусы
Код C #:
Плюсы:
Минусы:
Я бы предпочел использовать код приложения для выполнения процесса ETL, но производительность была ужасной по сравнению с хранимыми процедурами. В одном тесте, когда я пытаюсь обновить 10 000 строк. Хранимые процедуры заняли всего 1 секунду, в то время как мой код ETL занял 70 секунд. Даже мне каким-то образом удается уменьшить накладные расходы, 20% из 70-х - это просто вызов оператора обновления из кода приложения.
Может ли кто-нибудь дать мне предложения или прокомментировать, как ускорить процесс ETL с помощью кода приложения?
Моя следующая идея - попытаться выполнить параллельный процесс ETL, открыв несколько соединений с базой данных и выполнив обновление и вставку.
Спасибо