Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-05-2016
rocksoft rocksoft is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 71
Poder: 8
rocksoft Va por buen camino
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?
Responder Con Cita
  #2  
Antiguo 17-05-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
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
Responder Con Cita
  #3  
Antiguo 18-05-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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. ...
Responder Con Cita
  #4  
Antiguo 18-05-2016
rocksoft rocksoft is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 71
Poder: 8
rocksoft Va por buen camino
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
Responder Con Cita
  #5  
Antiguo 18-05-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Es que una cosa es importar "copiar y pegar" y otra cosa es "leer un archivo, procesar x informacion, guardar"
Responder Con Cita
  #6  
Antiguo 18-05-2016
Avatar de adebonis
adebonis adebonis is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 145
Poder: 21
adebonis Va por buen camino
Hola.

Las tablas DBIsam tienen la función ImportTable. ¿La has probado?

Adolfo de Bonis.
Responder Con Cita
  #7  
Antiguo 18-05-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Es que no son cosas comparables, por eso te hemos respondido esto:
Cita:
Empezado por AgustinOrtu Ver Mensaje
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
Cita:
Empezado por Casimiro Notevi Ver Mensaje
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. ...
Cita:
Empezado por AgustinOrtu Ver Mensaje
Es que una cosa es importar "copiar y pegar" y otra cosa es "leer un archivo, procesar x informacion, guardar"
Responder Con Cita
  #8  
Antiguo 19-05-2016
bitbow bitbow is offline
Miembro
 
Registrado: jul 2006
Posts: 366
Poder: 18
bitbow Va camino a la fama
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.
__________________
¡Ni como ayudarte Niño!!
bitbow
Responder Con Cita
  #9  
Antiguo 20-05-2016
rocksoft rocksoft is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 71
Poder: 8
rocksoft Va por buen camino
Buenas con todos,

Cita:
Empezado por adebonis Ver Mensaje
Hola.
Las tablas DBIsam tienen la función ImportTable. ¿La has probado?
Adolfo de Bonis.
Si ya lo probe, pero no es una opcion ya que no valida la informacion y a la mas minima salta un error, ya que los datos a importar no son de fiar, de vez en cuando tienen un campo mas, o un delimitador doble etc..

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 :

Código Delphi [-]
function Split00(const Texto, Delimitador: string): TSarray;
var
  i: integer;
  Len: integer;
  PosStart: integer;
  PosDel: integer;
begin
  i := 0;
  SetLength(result, 1);
  Len := Length(Delimitador);
  PosStart := 1;
  PosDel := Pos(Delimitador, Texto);
  while PosDel > 0 do
  begin
    result[i] := Copy(Texto, PosStart, PosDel - PosStart);
    PosStart := PosDel + Len;
    PosDel := Pos(Delimitador, Texto, PosStart);
    Inc(i);
    SetLength(result, i + 1);
  end;
  result[i] := Copy(Texto, PosStart, Length(Texto));
end;
Responder Con Cita
  #10  
Antiguo 20-05-2016
bitbow bitbow is offline
Miembro
 
Registrado: jul 2006
Posts: 366
Poder: 18
bitbow Va camino a la fama
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.
__________________
¡Ni como ayudarte Niño!!
bitbow
Responder Con Cita
  #11  
Antiguo 21-05-2016
rocksoft rocksoft is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 71
Poder: 8
rocksoft Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Importacion desde Excel oscarac Varios 1 01-03-2011 17:23:12
ayuda con importacion de datos zanyodark Conexión con bases de datos 1 08-11-2007 09:45:23
Importacion de access por medio de dts mierda SQL 2 05-04-2007 09:24:32
importacion de datos a DB uper Firebird e Interbase 2 15-04-2005 23:41:06
error importación a oracle9 pablo666 Oracle 0 02-02-2005 11:47:50


La franja horaria es GMT +2. Ahora son las 15:56:16.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi