MySQL - Guardar datos a mysql mediante un batch?

 
Vista:

Guardar datos a mysql mediante un batch?

Publicado por Rkl (3 intervenciones) el 07/07/2015 13:34:43
Muy buenas,
tengo un problema y no se si esta es la mejor forma de resolverlo. A ver si me podeis ayudar:

Estoy manejando un programa que te genera unos datos y por sistema te los pasa a un archivo .dat en formato ascii. La idea es pasar esos datos a una base de datos (mysql). Primero lo hice mediante un load data, pero cada vez que quiero actualizar los datos me recorre todo el archivo y me demora demasiado, además que no lo hace automaticamente cada vez que el programa crea nuevos datos.
Enredando en el programa vi un apartado que te deja guardar los datos mediante una "funcion de usuario", es decir un batch, despues de cada generación de datos. Tras enredar mucho por google sigo sin tener demasiada idea de como recoger esos datos y mandarlos a la base de datos, o si esa es la mejor opcion.

Cualquier ayuda/opinion será bienvenida.
Gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 796
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Guardar datos a mysql mediante un batch?

Publicado por xve (1151 intervenciones) el 07/07/2015 22:11:21
Hola Rkl, entiendo que haces algo como:
1
mysql dbTest -e "LOAD DATA INFILE './file' INTO TABLE tablename FIELDS TERMINATED BY ','"

la única manera que se me ocurre, es que cojas siempre la diferencia entre el nuevo archivo y una copia del viejo, para añadir únicamente los nuevos registros.

Cuando dices batch, te refieres a la terminal de linux?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de SuperIndio
Val: 102
Bronce
Ha aumentado 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

Guardar datos a mysql mediante un batch?

Publicado por SuperIndio (79 intervenciones) el 08/07/2015 17:27:02
Lo ideal es hacer un demonio, y mientras este vivo cada n segundos ( n parametrizable al lanzamiento y segun la rapidez de la acutlaizacion del TXT .dat) recuperar los ultimos n a traves de un tail -n (donde n es el numero de los n ultimos o mas actuales) y tratar de insertarlos o checkando si ya estan en la tabla de mysql.
Si usas Unix o Linux... es muy facil
saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de SuperIndio
Val: 102
Bronce
Ha aumentado 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

Guardar datos a mysql mediante un batch?

Publicado por SuperIndio (79 intervenciones) el 08/07/2015 18:08:06
Ahi va parte de un shell script que yo solia usar... lo cambie x uno en .c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
export InUser=$1           # Primer parametro por linea de comandos
export InPass=$2           # Segundo parametro por linea de comandos
 
export FILEDATA=/app/data/superindio/fic/ASK_ACT5600.txt
export EXTREMID=/app/data/superindio/fic/ASK_EXT5600.txt
export LOALUSQL=/app/data/superindio/fic/ASK_SQL5600.sql
export ERRORLOG=/app/data/superindio/log/LOG_SQL5600.log
 
export BASEIN=dbdesa       # NOMBRE DE LA BASE
export Vivir=1
 
while [[ $Vivir -le 5 ]]
; do
 
    rm -f $EXTREMID $LOALUSQL  $ERRORLOG
    tail -40 $FILEDATA > $EXTREMID
    indioparser            # parsear el archivo generando el sql INSERT
                           # con los datos de $EXTREMID
                           # en el script sql : $LOALUSQL
    if test -s $LOALUSQL   # Si el size de $LOALUSQL es distinto de 0
        then  mysql -u $InUser -p $InPass $BASEIN < $LOALUSQL
    else
       echo "RE-INICIAR EL CONECTOR, EL AUTORIZADOR Y EL RECEPTOR..." > $ERRORLOG
       mail -s "No estan entrando datos" "indio@saltacap.com.ar" < $ERRORLOG
    fi
    sleep 360              # Esperar 6 minutos
 
done
espero te sirva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar