Estoy trabajando en un proceso ETL para un almacén de datos que utiliza C#, que admite SQL Server y Oracle. Durante el desarrollo, he estado escribiendo procedimientos almacenados que sincronizarían datos de una base de datos a otra. El código de procedimientos almacenados es bastante feo porque involucra SQL dinámico. Necesita construir cadenas de SQL ya que tenemos un nombre de base de datos dinámico.ETL Diseño y rendimiento del procesamiento
Mi jefe de equipo quiere utilizar el código C# para hacer el ETL. Tenemos generación de código que genera automáticamente nuevas clases cuando cambia la definición de la base de datos. Esa también es la razón por la que decidí no usar Rhino ETL.
Éstos son los pros y los contras:
procedimiento almacenado:
Pros:
- rápido proceso de carga, todo es manejado por la base de datos
- despliegue fácil, se necesita ninguna compilación
Contras
- sea difícil de leer debido a la dinámica de SQL
- necesidad de mantener tanto T-SQL y secuencias de comandos PL/SQL cuando definición de base de datos cambia
- Desarrollo lento porque hay intelisense al escribir SQL dinámico
C# Código :
Pros:
- más fácil de desarrollar el proceso de ETL porque tenemos intellisense de nuestra clase generada
- más fácil de mantener debido a la clase generada
- mejor registro y control de errores
Contras:
- rendimiento lento comparar con el procedimiento almacenado
Preferiría usar el código de la aplicación para hacer el proceso ETL, pero el perf ormance era horrible comparar con los procedimientos almacenados. En una prueba cuando intento actualizar 10.000 filas. Los procedimientos almacenados tomaron solo 1 segundo, mientras que mi código ETL tardó 70 segundos. Incluso de alguna manera logré reducir la sobrecarga, el 20% de los 70 están llamando puramente a la declaración de actualización desde el código de la aplicación.
¿Podría alguien darme sugerencias o comentar cómo acelerar el proceso de ETL utilizando el código de la aplicación?
Mi siguiente idea es intentar hacer un proceso ETL paralelo abriendo múltiples conexiones de bases de datos y realizar la actualización e inserción.
Gracias
De hecho, lo hemos considerado. Desafortunadamente hacemos la restricción de tiempo, decidimos dejar esta idea por ahora. Lo ideal es crear una plantilla de procedimiento de tienda y tener el código de generación de código para completar el nombre de las columnas y las uniones, ya que estas definiciones de columna cambian muy a menudo. – dsum
Bueno, dependiendo de qué tan elegante desee ser, podría usar el principio KISS y, por ejemplo, tomar 15 minutos, escribir esa plantilla, conectarse al esquema de la base de datos y seleccionar tablas y columnas con SQL, completar una tabla con esa lista de columnas y tablas, marque las tablas que realmente desea y recorra aquellas para llenar la plantilla y cree la secuencia de comandos que creará sus SP. Haga una copia de seguridad del esquema y luego ejecute el script. En caso de que tenga más de 100 tablas y no sepa cómo consultar el esquema, sí estoy de acuerdo en que tardarán más de dos horas. Cuando las cosas cambian, repite. – Unreason