![]() |
Importacion en una Tabla
Buenas a todos,
tengo una consulta para saber como voy: Resumiendo tengo un archivo *.txt que pesa 1.132,00 MB con 10.704.759,00 de lineas, cada linea tiene 15 campos separados por "|" en formato unix, en promedio 150 caracteres. Ahora voy leyendo linea por linea convirtiendola en formato windows y eliminando las impurezas signos de mas etc. empiezo a importar la linea en una tabla DBIsam, por el momento consigo importar una 1500 lineas por segundo, lo que me lleva a esperar casi dos horas hasta que esten los 10.7 Millones de lineas importadas. a mi consulta, son tiempos razonables o creen que podria ser mas rapida la importacion? |
El unico que tiene criterio es el usuario final
Ademas si es un proceso que se ejecuta una vez al mes yo te diria "no hay problema". Si lo tengo que hacer 3 veces por dia, me molestaria bastante Publica el codigo asi entre todos vemos que se puede mejorar |
Además falta muchísima información para poder ayudar/opinar.
No sabemos cómo lees las líneas, cómo las guardas, con qué componentes, estructura de la tabla, parámetros de configuración, etc. etc. etc. ... |
Hola a todos,
lo que pido es un valor referencial, si alguien me dice que importa 10 millones de registros en 10 minutos se que algo estoy haciendo mal :) Haber si optimizo el codigo mañana y lo pongo :) |
Es que una cosa es importar "copiar y pegar" y otra cosa es "leer un archivo, procesar x informacion, guardar"
|
Hola.
Las tablas DBIsam tienen la función ImportTable. ¿La has probado? Adolfo de Bonis. |
Es que no son cosas comparables, por eso te hemos respondido esto:
Cita:
Cita:
Cita:
|
Te puedo decir que yo exporto 20,000 registros de SQL Server a Oracle en 3 horas (Cada servidor con distinta locacion y conexión), viendo tus cifras realmente tu proceso no es lento, como dices tendria que aparecer alguien y decir que ese proceso lo ha conseguido correr en 10 min. , mientras no aparezca creo que vas por buen camino (y si aparece que nos diga como).
Saludos. |
Buenas con todos,
Cita:
Pero les comento de que 1500 por segundo son muy lentos, me puse a analizar proceso por proceso y midiendo paso por paso los tiempos de resultado, la parte lenta el desgloce del string en sus respectivos campos, usaba un stringlist con delimitador, ahora con un array es bastante mas rapido. Otros dos puntos que relentizaba el proceso era en contador de registros leidos y la barra de avance (aunque paresca una tontaria cuestan tiempo) en 10.000 registros hacen la diferencia de 1-3 segundos. Ahora estoy importando unos 14.000 registros por segundo, lo que tardaba importar 10.7 Millones de registros unas 3 horas, ahora tarda unos 15 min. bueno les dejo el spliter por si alguien le sirve, no soy el autor lo encontre buscando :
|
Aplausos para este compañero, es una pena que el SplitString sea tan lento, se me olvido mencionarte eso en el pos anterior, yo igual hice ese cambio y el tiempo de proceso disminuye bastante.
Una duda, como estas insertando los registros? uno por uno o por bloques? Saludos. |
Hola bitbow,
probe las dos variantes y por bloques en sql de 1000 en 1000 iba bastante mas lento que de uno en uno, ya que tengo los datos directos para insertar, en bloques los tengo que ir guardando en y volver a leer. Ahora escribiendo lo que no probe es usando el comando prepare, podria ser ayude, pero ya no voy a cambiar nada mas, al menos por el momento. Ahora descargando el archivo, descomprimir, leer linea por linea e importarla acabo en 15-20 min :) |
La franja horaria es GMT +2. Ahora son las 07:13:53. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi