Mejorar conexión y uso de cursores con MySQL

70 views
Skip to first unread message

Irwin Rodriguez

unread,
Nov 23, 2015, 3:53:11 PM11/23/15
to publice...@googlegroups.com
Saludos Comunidad, a ver si me echan una ayudita con el siguiente problema que tengo:

1. Tengo una base de datos alojada en un servidor local
2. Para comunicarme con el servidor dispongo de una aplicacion hecha en VFP 9 SP2. (Sistema de servicio tecnico para celulares).
3. El número de conexiones REMOTAS diarias es alrededor de 40 (usuarios mysql)

4. Las 40 conexiones REMOTAS trabajan bien aqui en venezuela.

5. Estamos abriendo una sucursal en panamá y de allí vendrán como 10 conexiones más. (Aquí es donde está el problema)

Actualmente desde panamá no podemos entrar bien al sistema, se cuelga cuando se cargan las tablas desde la base de datos a los cursores, se cuelga unas 7 veces y luego pasa pero no dura mucho la conexión.

ENTORNO DE TRABAJO:

La mayoria de mis pantallas están conformadas por combos donde cargo y muestro el contenido de varias tablas (operadoras, origenes, modelos, marcas, lineas, etc) y una que otra tablas contienen bastantes registros.

Tengo una pantalla que tiene 17 combos, otras 10, 5, 7,6, etc. Y cada vez que se abre y cierra la pantalla entonces tengo que cargar en el load las tablas desde el servidor.

Sé que hay mejores formas de mejorar eso pero realmente he intentado y no logro mejorar la velocidad en transferencia de datos. El problema lo dan los combos porque tengo que traerme toda la tabla y mostrarla dentro del objeto por si se hace alguna actualizacion.

Cómo se podría mejorar este tema de conexiones y transmisiones de datos?


He pensado en traerme las tablas al levantar el sistema y trabajarlas locales pero si cambian algun registro entonces tendré inconsistencia de datos.

Alguna sugerencia?

Muchas gracias!

--
DISTRIBUIDORA IRSESU, C.A
J-29947174-7
Irwin Rodríguez
- Director
Analista Programador - Freelance
+584125210679

Barquisimeto - Venezuela
Desarrollos online dentro y fuera del país

Carlos Miguel FARIAS

unread,
Nov 23, 2015, 4:19:56 PM11/23/15
to Grupo Fox
Usa bases locales en las máquinas con problemas, además,  agrega algún sistema de marcas, para saber si las tablas, locales o las originales en Venezuela se modifican, entonces, solo transfieres datos modificados.
Una forma simple, agrega timestamp a los registros de tablas, estos se pueden configurar para que se modifiquen automáticamente (lo hace mysql), entonces, cada cierta cantidad de tiempo, recuperas los registros con timestamp superior al último control, y solo tienes que transferir esos registros.
Las aplicaciones acceden desde sus tablas locales, normalmente, y periodicamente, ejecutan una consulta sobre las tablas principales y actualizan las locales con los registros modificados.
De esa manera, el acceso desde locaciones remotas, es esporádico.
Tiene sus problemas si en forma local se accede en 2 o más puntos, y se pisen los datos, pero si la conexión es mala, no tienes otra solución.
En SQL Server, ya se preveía en la versión 6.5 publicadores y suscriptores, triggers especiales que automáticamente, transfieren las actualizaciones.
Saludos: Miguel, La Pampa (RA)

Larga Vida y Prosperidad
Que la Fuerza los acompañe

Antonio Meza

unread,
Nov 23, 2015, 4:54:25 PM11/23/15
to Comunidad de Visual Foxpro en Español
En mi caso he estado analizando como resolver ese problema pero como aun no se me ha presentado realmente, te comento lo siguiente.

En cada maquina donde instales el sistema de forma local que se va a conectar a Mysql, crea un carpeta temporal donde tengas almacenados en tablas DBF los catálogos del sistema pero los datos mas mínimos, por ejemplo

tabla Clientes (dbf local)
id   cliente
1   La casita de piedra
2   La gotita de miel

Y así todos tus catálogos, luego podrás llenar de forma rápida tus ComBox con los datos locales (DBF) 

Cuando el usuario selecciona en este caso un Cliente cuyo ID = 20, en ese momento te conectas al servidor y traes los datos reales que necesitas para el formulario y mostrar al usuario, de esta forma solo vas a traer pequeños datos del servidor.

Para asegurarse si algún catalogo fue agregado un registro o modificado de forma remota y por lo tanto de forma local ni por enterado, he pensado en otra tabla local DBF llamada CATALOGOS.DBF donde tenga un listado de todas las tablas locales y la fecha y hora (campo datetime) de la ultima actualización.

tabla local catalogos.dbf
id     tabla_dbf     ultima_actualización
1      clientes       20/11/2015 10:20:25

Ya teniendo esto al abrir un formulario que ocupo el catalogo de clientes verifico si algún registro de la tabla remota de clientes fue modificado posterior a la fecha local y actualizo de nuevo el catalogo local y la fecha de actualización.

Y las peticiones deben ser pequeñas por ejemplo:

if SqlExec(Cn, "Select id from clientes where modificado > ?catalogos.ultima_actualizacion","clientes_remoto") >= 1

endif

Antonio Meza

unread,
Nov 23, 2015, 4:59:12 PM11/23/15
to Comunidad de Visual Foxpro en Español
Se fue el mensaje incompleto, continuo...

Y las peticiones deben ser pequeñas por ejemplo:

if SqlExec(Cn, "Select id, cliente from clientes where modificado > ?catalogos.ultima_actualizacion","clientes_remoto") >= 1
     if reccount() >= 1
            * Actualizar cursor local, puedes limpiarlo y llenarlo de nuevo o solo modificar y agregar los registros necesarios
     endif
endif

Y sobre todo las sucursales te recomiendo que trabajen conectándose al servidor remotos solo cuando vayan a traer datos o a guardar, no mantengas la conexión abierta.

saludos
Antonio Meza
Reply all
Reply to author
Forward
0 new messages