Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Optimizar Conexiones BBDD Mysql
Autor Mensaje
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 usuarioEnviar mensaje privado 
Volver arribaPágina inferior
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
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
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 usuarioEnviar mensaje privadoVer la galería personal del usuario 
Volver arribaPágina inferior
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 usuarioEnviar mensaje privado 
Volver arribaPágina inferior
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 usuarioEnviar mensaje privado 
Volver arribaPágina inferior
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
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Problema con Réplica BBDD [solucionado] jsoto61 Bases de Datos 11 Martes, 03 Noviembre 2009, 00:18 Ver último mensaje
shordi
No hay nuevos mensajes Convocatoria A Programadores Que Estén In... matiaspar General 2 Viernes, 08 Abril 2011, 17:42 Ver último mensaje
matiaspar
No hay nuevos mensajes Optimizar Una Consulta En Mysql santijav Bases de Datos 1 Lunes, 23 Enero 2012, 21:12 Ver último mensaje
santijav
No hay nuevos mensajes Como Optimizar Estas Lineas? v3ctor General 2 Jueves, 02 Julio 2015, 23:01 Ver último mensaje
PabloGener
 

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


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron