FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Lentitud Firebird
Hola amigos... les comento mi problema.
Hice una aplicacion en delphi 2006 y firebird 2.03 y utilize los componentes de lapaleta interbase (TIBQuery y TIBDataset). El programa puede comunicarse de 2 formas con las bases de datos LOCAL (Intranet) y REMOTA (PortFordward). El problema surge cuando tengo agregar o que hacer algun modificacion a los datos en forma remota... va muy lento, antes era peor porque utilizaba TIBTable para hacer esto y lo cambie por TIBDataset y mejoro bastante. Ahora bien que mas puedo hacer para mejorar la velocidad... - Cambiar de componentes? A cuales? - Mejorar el servidor? P4 con 1 GB en ram - Mejorar internet del cliente? ADSL 4 MB Espero me puedan guiar con este temita... A proposito la tabla en la cual tengo que hacer las modificacion tiene alrededor de unos 20.000 registros y deberia incrementarse en 10.000 registros por año. No se si este problema de lentitud sera por el tamaño de las tablas Buenos... muchas gracias por su tiempo... me han ayudado mucho |
#2
|
||||
|
||||
Hola
Para mi el problema de lentitud va relacionado mas que nada a la consulta. En Access por ejemplo se puede hacer una consulta (select * fron tabla), esto sera lo mismo que usar un table pues traera todo el contenido de la tabla, en este caso en access (que no es cliente servidor como firebird) lo soluciono con top (Select Top 20 Miscampos from mi tabla), como ves me enviara solo veinte registros incluso dependiendo de la consulta puede enviarme los que necesite acelerando el proceso mucho. Nunca he provado IB comparando la velocidad, lo he hecho con ADO y Zeos, Zeos es muy rapido via internet y es facil de usar. Saludos |
#3
|
|||
|
|||
Yo tuve problemas de lentitud al ingresar registros a FB, tardaba varias horas en procesar 15,000 registros, estuve analizando el proceso y descubri que cada vez que queria agregar un registro conectaba a la base, abria la tabla, agregaba el registro, cerraba la tabla y cerraba la conexion de la base de datos. Ahora lo que hago es al inicio del programa conecto la base de datos y abro mi tabla, inserto los 15,000 registros, cierro la tabla y cierro la conexion a la base de datos.
Con eso el proceso lo reduje a 6 minutos, parece increible pero asi fue. Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney |
#4
|
|||
|
|||
hola caral... osea me recomiendas cambiarme a zeos?
Que componente puedo utilizar para guardar registros en una tabla... y que sea lo mas rapido posible. Les dejo aqui el codigo que utizo ahora...
Que tal este codigo para ingresar datos... como puedo mejorarlo para aumentar la velocidad de la transaccion Saludos |
#5
|
||||
|
||||
Simple: Usa cualquier otro motor: Firebird, mySQL, PostGress...cualquiera es más rápido que Interbase.
__________________
AKA "El animalito" ||Cordobés a mucha honra|| |
#6
|
||||
|
||||
Cuándo se programa aplicaciones que se conectarán via Internet hay que tener cuidado sobre que correrá por el canal de comunicación, que es bastante estrecho.
Tu cliente puede tener un ADSL de 4Mb, pero ¿cuanto tiene el servidor? ¿cual es la velocidad real de comunicación entre ambos puntos? ¿hay horas pico u otros factores que afecten la velocidad de comunicación? (por ejemplo, que el mismo canal se use para enviar correos, ver videos o cualquier otra actividad típica de internet) También hay que saber en detalle que hace la aplicación y cómo funcionan los componentes que usas. En concreto, he realizado aplicaciones usando Firebird e IBX que van muy bien, incluso con canales mas estrechos, así que puedo garantizar que es posible. En tu caso concreto, ayudaría que nos contes en que instrucción en particular se produce la "lentitud". Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#7
|
|||
|
|||
Cita:
Cita:
Cita:
La lentitud en tu caso no tiene q ver con el motor ni con los componentes, tiene q ver con otras cosas, a falta de mas detalles es dificil adivinar.. |
#8
|
||||
|
||||
Cita:
Todo es relativo (ya lo dijo Einstein ) y depende de muchos factores, pero, en general, Firebird es más rápido que Interbase. Test comparativo Interbase 7.5 y Firebird 1.5 |
#9
|
||||
|
||||
Cita:
En cuanto al uso de controles db-aware, quizás no sea la mejor alternativa. En principio una transacción debe durar el mínimo tiempo posible, con controles db-aware la transacción empezará (supuestamente) cuando le das a editar, y termina al hacer el post (el usuario puede irse a tomar café mientras deja el registro en edición). Sin controles ad-aware, se prepara un botón que al hacer clic: - Empezar transacción - Enviar un sql con la sentencia de actualización/borrado/inserción - Finalizar transacción. Todo ocurre en .... ¿milisegundos? El problema que veo en este hilo es que se están discutiendo muchos factores al mismo tiempo, y eso puede volver loco a cualquiera. mjjj no te agobies , tomálo con filosofía. Saludos.
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#10
|
|||
|
|||
Ok... me han dado muchas ideas pero nada conciso...
Les cuento algo mas del programa... Antiguamente guardaba los datos con el componente TIBTable, pero ahi si que iva relamente lento... por sugerencia de otro hilo lo cambie e IBDataset... y mejoro notablemente, pero sigue siendo lento. Esto se pone lento cuando guardo en cierta tabla... la tabla tiene 40 campos y alrededor de 20 mil registros. Será que son muchos campos, es decir, envio mucha informacion via internet? Será bueno utilizar otros Componentes... CUALES? Utilizo Firebird 2.03, Delphi 2006 y Componentes (Interbase que vienen con Delphi) POrfavor guienme aer si puedo resolver esto Gracias |
#11
|
||||
|
||||
Hola
No me hagan mucho caso, ya saben que de estas cosas no se. Lo que me extraña mucho es: Dices que guardas en una tabla con 40 campos eso es normal, que la tabla tenga 20 mil registros que importa. Digo esto por que normalmente se guarda informacion de tres fromas. 1- Editando los campos, esto solo vera afectados a estos, osea una linea en la tabla. 2- Haciendo un cambio (upDate), esto tambien afectara solo a una linea. 3- Insertando un nuevo registro, esto tambien sera lo mismo, una linea. Entonces lo que se enviara de informacion o se recivira sera una linea del registro de la tabla. Esto sera lo mismo si se hace con varias tablas a la vez, seran solo unas lineas. Sigo con la misma idea, para mi es el procedimiento, la sentencia sql, no tanto los componentes, aunque Zeos sea rapido, cuanta informacion estas enviando y reciviendo, esa es la pregunta?. Esto es solo un comentario. Saludos |
#12
|
|||
|
|||
Gracias Lepe por tu consejo... estuve revisando lo de normalizacion de tablas y creo que puedo sacarle mayor provecho a mis tablas utlizando esas ideas.
Por otra parte... lo de cuanta infomacion estoi enviando un registro que se compone de 40 campos... no se si esto es mucho o no para trabajarlo cliente/servidor, porque si lo hago en forma local me funciona perfecto... casi instantaneo todo. Les explico algo del programa... este sirve para generar ordenes de compra. Dentro de la base de datos tengo 2 tablas... COMPRAS y DETCOMPRAS. En la primera se guardan datos como: numero de orden de compra (llave), numero cliente, tipo orden, monto orden, centro costos, etc. En la segunda (DETCOMPRAS), todo el detalle de items asociados a la orden. Problemas: Cuando presiono el boton para generar una nueva orden de compra utilizo el siguiente codigo para saber cual es la ultima orden y generar la nueva orden. La aplicacion maneja las orden para 2 empresas distintas
Esto demora unos 20 segundos mas o menos... esta bien?? Existe otra forma de hacer esto mismo, pero que vaya mas rapido. Bueno... muchas gracias.... again |
#13
|
||||
|
||||
Pregunto nuevamente... ¿cual es la línea de código que demora los 20 segundos?
Eso nos dará una idea mas clara. Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#14
|
|||
|
|||
hola en hacer el siguiente codigo demora 20 segundos.
Esta bien eso... o demora mucho?? |
#15
|
|||
|
|||
Porque no haces uso del componente TIBSQL (o TMDOSQL) y generas por codigo la SQL q se debe mandar, en este caso van a ser dos,
Como ha dicho Caral al tratarse de una linea debe ir rapido.. |
#16
|
||||
|
||||
Cita:
Desde luego, algo así debe tardar sólo milésimas de segundo. |
#17
|
|||
|
|||
Gracias por sus sugerencias.... cambie la forma de ingresar datos en las tablas, cambiando el componente TIBDataset por TIBSQL... mejora bastante la velocidad.
Otra pregunta... Navegando en la web, me entere que los mejores componentes para estas situaciones son los "ClientDataSet" Es eso verdad? Cuales son esos? .. en que paleta de componentes los encuentro? Muchas gracias... me han ayudado muchisimo |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Lentitud en la red. | Carlos Arevalo | Varios | 2 | 09-07-2007 19:04:08 |
Lentitud conexión SQL | amedina | Conexión con bases de datos | 8 | 04-08-2005 21:40:41 |
Lentitud en Cliente FireBird.... | AGAG4 | Firebird e Interbase | 7 | 29-03-2005 16:56:51 |
Lentitud de FireBird 1.03 en Windows 2003 | El_Perrito | Firebird e Interbase | 1 | 12-08-2004 09:21:25 |
Lentitud en la red | Ignacio | Conexión con bases de datos | 2 | 26-08-2003 14:09:39 |
|