Portal    Foro    Buscar    FAQ    Registrarse    Conectarse

Optimizar Conexiones BBDD Mysql

Optimizar Conexiones BBDD Mysql
Artículo
Responder citando    Descargar mensaje  
Mensaje Optimizar Conexiones BBDD Mysql 
 
Hola, estoy programando con gambas 3 y conectando a una bbdd externa de mysql.

para conectar lo hago así:

    With cn
        .type = "mysql"
        .host = "www.miservidor.com"
        .login = "misusuario"
        .password = "mipasswd"
        .name = "mibbdd"
    end with

Hasta aqui todo bien, puedo hacer todo lo necesario, selects, inputs, de todo. El problema es que mi programa necesita muchos datos para hacer sus cálculos, y uso muchos results para coger info y actualizar en la BBDD. Cada result lo hago con cn.exec("select ... WHERE tal") o bien con cn.exec("update tabla set campo= etc") o con cn.exec("insert into...") etc.
Bien, funcionar funciona, pero, aqui viene mi pregunta, ¿cómo puedo hacer para que la cantidad de info q viaja por internet en cada result llegue más rápido? ¿hay manera de optimizar las conexiones o gestionarlas para que no tarde tanto? lo digo pq tengo tablas con 25.000 registros y claro, en local funciona perfecto, pero en remoto tarda un montón... ¿Debería cambiar algo en la bbdd? ¿o en la forma como uso los results?

Espero haberme explicado y que álguien pueda ayudarme

Muchas gracias



 
fua - Ver perfil del usuario Enviar mensaje privado  
fua [ Martes, 19 Noviembre 2013, 15:30 ]
 


Optimizar Conexiones BBDD Mysql
Comentarios
Responder citando    Descargar mensaje  
Mensaje Re: Optimizar Conexiones BBDD Mysql 
 
Hola fua:

No creo que sea un problema de gambas, o de como usas los result, puede que incluso el problema (o la forma de solucionarlo), sea la conexión contratada con la compañía que te dé el servicio de ADSL.

A lo mejor necesitas una linea "profesional", con más ancho de banda de "bajada".

Supongo que también incluye como tengas organizado la base de datos, con sus tablas y campos, pero eso seguramente será un problema de lo rápido que sea el ordenador "servidor", para resolver la consulta y  empezar a enviarte el resultado.

Otro detalle (supongo que lo tendrás en cuenta), es  que las consultas solo devuelvan los datos que realmente necesites y no registros completos.

Seguramente los compañeros del foro te podrán dar más pistas o soluciones.

Saludos



 
jsbsan - Ver perfil del usuario Enviar mensaje privado  
jsbsan [ Martes, 19 Noviembre 2013, 17:43 ]
Responder citando    Descargar mensaje  
Mensaje Re: Optimizar Conexiones BBDD Mysql 
 
Citar:
en local funciona perfecto, pero en remoto tarda un montón.


Eso es normal porque el mio lo ejecuto en red lan a traves de un wifi y a veces los datos consultados duran en cargarse, yo he mirado los sistemas bancarios cuando a uno le consultan los datos de cuenta y los mismos banqueros te dicen espera un momento y al rato el sistema muestra los datos, lo mismo suceden con los nuestros y fuera de eso depende de la conexion a internet.



 
jousseph - Ver perfil del usuario Enviar mensaje privado  
jousseph [ Martes, 19 Noviembre 2013, 17:47 ]
Responder citando    Descargar mensaje  
Mensaje Re: Optimizar Conexiones BBDD Mysql 
 
Una cosa que cambia drásticamente la velocidad, cuando se trata de bucles de actualizaciones es utilizar las transacciones BEGIN y COMMIT
Por ejemplo si quieres actualizar una tabla con las operaciones hechas sobre otra (en el ejemplo grabas en tabla dos el producto de dos campos de tabla1
sería algo así:

dim r as result
dim r2 as result2

r=miconexion.exec("select * from tabla_uno")
mocinexion.Begin
while r.available
    r2=miconexion update"tabla_dos", "indice",r!campo1)
    r2!campo1 = r!campo2 * r!campo3
    r2.update
    r.movenext
wend
miconexion.commit
 

O si tienes varias operaciones independientes, sería algo así:

         miconexion.Begin
         miconexion.exec("insert into mi_tabla select * from otra_tabla where mi_tabla.campo1=\"" & mitextbox1.Text & "\"")
         miconexion.exec("insert into mi_tabla2 select * from otra_tabla2 where mi_tabla2.campo1=\"" & mitextbox2.Text & "\"")
         miconexion.exec("insert into mi_tabla3 select * from otra_tabla3 where mi_tabla3.campo1=\"" & mitextbox3.Text & "\"")
         miconexion.Commit
 


Por último, aunque sólo funciona para añadir registros, hay una técnica que funciona de mil maravillas
Public sub subirdatos()
   'primero generas un fichero con extensión .csv  de los datos que quieres añadir. Más o menos así:
   dim af as result
   dim mifichero,misdatos as string
  
    mifichero=user.home &/ "datos.csv"
    'en el ejemplo selecciono registros de una tabla y genero el csv a partir de ellos. En realidad puedes hacer lo que quieras con tal de que al final tengas el fichero csv
    af = miconexion.exec("select * from tabla1")
    WHILE af.Available
         misdatos &= "\"\";\"" & af!campo1 & "\";\"" & af!campo2 & "\";\"" & mivariableprivada_o_lo_que_sea  & "\""  'el primer campo lo dejo vacío, que es lo que hay que hacer cuando tiene una clave primaria autonumérica
         af.movenext
    wend
    file.save(mifichero,misdatos)
    subeficheroFTP(flname, mifichero)  'Esta función te sube el fichero usando ftp al servidor
    cloaddata = "LOAD DATA INFILE '" & mifichero & "' INTO TABLE `tabladestino` FIELDS TERMINATED BY ';' ENCLOSED BY '\"' ESCAPED BY '\\\\' LINES TERMINATED BY '\n'"
    comun.condatos.consultar(cloaddata, TRUE)

 end

PUBLIC FUNCTION subefichero(origen AS String, destino AS String) AS Boolean
  
  DIM ftpc AS NEW FtpClient
  ftpc.URL = "192.168.0.100" &/ destino ' Es decir la ip de tu servidor más el nombre del archivo
  ftpc.User = "miusuarioftp"
  ftpc.Password = "miclavedeusuarioftp"
  ftpc.Async = FALSE
  ftpc.Put(origen)

END

 

Esta forma de añadir datos es tan rápida, que yo he llegado a veces a vaciar una tabla entera y volver a llenarla antes que embarcarme en una serie de updates e inserts en un bucle mucho más lentos.
En versiones antiguas de MySQL se admitía el comando LOAD DATA LOCAL INFILE etc. que subía el fichero local solito, pero en las versiones nuevas se le considera un hueco de seguridad y hay que ejecutar (o compilar no recuerdo bien) el server indicándole que la acepte. Mejor usar ftp.
Espero que te sirva de ayuda.
Saludos



 
última edición por shordi el Martes, 19 Noviembre 2013, 21:27; editado 3 veces 
shordi - Ver perfil del usuario Enviar mensaje privado  
shordi [ Martes, 19 Noviembre 2013, 21:23 ]
Responder citando    Descargar mensaje  
Mensaje Re: Optimizar Conexiones BBDD Mysql 
 
Muchas gracias, mi duda era por si estaba haciendo algo mal o que se podía mejorar desde el gambas en cuanto a los results. Ya veo que no, así que tendré q optar por optimizar al máximo cada conexión como dice shordi, buscando sistemas q tarden lo menos posible y mejorando en lo posible los selects q mando...

Saludos y resuelto



 
fua - Ver perfil del usuario Enviar mensaje privado  
fua [ Miercoles, 20 Noviembre 2013, 09:44 ]
Responder citando    Descargar mensaje  
Mensaje Re: Optimizar Conexiones BBDD Mysql 
 
fua escribió: [Ver mensaje]
Muchas gracias, mi duda era por si estaba haciendo algo mal o que se podía mejorar desde el gambas en cuanto a los results. Ya veo que no, así que tendré q optar por optimizar al máximo cada conexión como dice shordi, buscando sistemas q tarden lo menos posible y mejorando en lo posible los selects q mando...

Saludos y resuelto


Bienvenido, fua

Una cosa más, revisa las normas del Foro, no está permitido el uso de abreviaturas tipo SMS.

Gracias y saludos



 
jguardon - Ver perfil del usuario Enviar mensaje privado  
jguardon [ Miercoles, 20 Noviembre 2013, 15:47 ]
Mostrar mensajes anteriores:    
 
Publicar nuevo tema  Responder al tema  Página 1 de 1
 
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 



 

cron