Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-02-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 26
guillotmarc Va por buen camino
Respecto a las aplicaciones de 3 capas, són aquellas en que las aplicaciones que utilizan los usuarios no se conectan directamente con la base de datos, sinó que pasan sus solicitudes a otra aplicación especial (a la que se suele llamar servidor de aplicaciones) que será la que se conectará a la base de datos, consultará los datos, los tratará si es necesario (hara los filtrados correspondientes, cruce de datos, cálculos, etc ....) y finalmente devolverá a la aplicación del usuario los datos solicitados, debidamente tratados para que no tenga que hacer ningún cálculo con ellos, solo mostrarlos.
De esta forma viajan menos datos por la red, ya que solo viajan los datos imprescindibles, en cambio los datos que solo se requieren para hacer cálculos, etc... pero que no están destinados a que los vea el usuario, no viajarán por la red, puesto que ya habrán sido tratados en el servidor de aplicaciones.

Como puedes ver, de esta forma también se disminuye el volumen de datos que viajan por la Red. Además esta opción es mejor que la del uso de procedimientos almacenados, puesto que muchos cálculos no se pueden realizar dentro de un procedimiento almacenado, pero si que se pueden hacer en una aplicación Delphi (mezcla de datos de dos bases de datos distintas, ....). De esta forma, al hacerse más cálculos en el Servidor (las famosas reglas de negocio), se reduce la cantidad de datos que hay que enviar a la aplicación de usuario.

Aunque como puedes adivinar, tiene el mismo problema que habiamos comentado con los procedimientos almacenados. Para hacer una inserción, tienen que viajar por la Red todos los datos a insertar, por lo que el rendimiento será parecido al de una consulta INSERT. Y si queremos cargar en una grid 1000 registros, el rendimiento también es el mismo puesto que tanto da bajar todos esos datos directamente de la base de datos, de un procedimiento almacenado, o de un servidor de aplicaciones.

Por lo que otra vez tienes que estar pensando en diseñar una aplicación que reduzca la cantidad de información que se debe mover (de la misma forma que habiamos comentado antes, limitando la cantidad de registros que se envian, así como la cantidad de campos).

Como puedes ver, en una aplicación sencillla practicamente no se obtiene ninguna mejora de utilizar procedimientos almacenados, o 3 capas. Pero cuento más complejas sean las reglas de negocio, mas ventajas obtendremos de aplicar estas técnicas. (Me refiero a casos, como que cada vez que se da de alta un producto, se debe crear automáticamente un registro de fecha y usuario de creación, un entrada de stock, ...)

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).

Última edición por guillotmarc fecha: 20-02-2004 a las 18:27:08.
Responder Con Cita
  #2  
Antiguo 23-02-2004
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 24
Giniromero Va por buen camino
Hola a todos,

Gracias por las aclaraciones.

En mi aplicación, efectivamente he tenido en cuenta que cuantos menos registros tramite cada vez, mejor. De hecho, tengo una tabla principal, que tiene a todos mis cliente, y que me muestra sólo uno por vez, siendo el primero de la tabla, por defecto el que me muestra al abrirse el programa.

Las demás tablas de mi aplicación me muestran sólo los registros que tienen que ver con ese usuario, lo cual, como puedes imajinar, es bastante más reducido que mostrar toda la tabla.

Mi mayor problema viene cuando, alguno de esos clientes, tienen en información económica muchos registros de asientos económicos. Me lo muestra bien en el Grid, pero tengo un procedimiento que se encarda de filtrar, de todos esos apuntes de ese cliente, cuales están pendientes de pago, y esos me los muestra en un grid de un nuevo form, en el que sólo se muestran esos registros.

Lo que me tarda es al abrir ese form, que por otro lado tiene campos calculados, tal como lo había montado, sin usar estos procedures de IB. Una de las cosas que le he programado en el procedure de IB es que directamente calcule esos campos calculados, lo cual, esperaba, al tramitarlo directamente el servidor, me implicase una mejora de rendimiento.

De hecho, he descubierto, que en algunos momentos, estos campos calculados, (de este procedimiento de la aplicación oo de cualquier otro de los que he tenido que poner en ella), que en la red local donde está el servidor no dan problemas, en la oficina cliente, algunas veces, no muestran la información. Como si no pudiesen calcular el valor que en ellos tiene que ir. Pero si cierras el programa y lo vuelves a abrir, te los vuelve a mostrar bien, otro rato, hasta que se vuelve a "cansar" de calcularlos.

Por cierto, me comentas que hay también posibilidad de pedirle a la aplicación que sólo me muestre X registros, en vez de todos los de la tabla, ¿esto como se hace en interbase? por que lo he estado mirando y me daban un código SQL que supuestamente sirbe para programar esto, pero no me ha funcionado.

Muchas gracias por la ayuda,

Saludos,

Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :)
Responder Con Cita
  #3  
Antiguo 23-02-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 26
guillotmarc Va por buen camino
Hola Virgina.

Para mostrar n registros, puedes utilizar la cláusula ROWS.

select NOMBRE, APELLIDOS from CLIENTES rows 25

Tiene bastantes posiblidades de utilización, por lo que lo deberías consultar en el manual.

Respecto a los campos calculados, nunca he tenido ese problema (no utilizo IBX) así que no se que decirte. Finalmente, respecto a la grid con asientos pendientes, quizá podrías hacer una nueva consulta que te los devuelva, en lugar de filtrar los datos de otra consulta. Aunque eso implique un nuevo traspaso de datos con el servidor, puede mejorar el rendimiento de la aplicación (si el filtrado en IBX es tan lento como parece indicar este problema).

Yo utilizo mucho los ClientDataset, quizá te interesaría también probarlos. Una vez cargados los datos en un ClientDataset, no hay ninguna comunicación posterior con el Servidor (ideal para conexiones lentas), excepto si se hacen modificaciones, que se pasarán todas de golpe al llamar al método ApplyUpdates. En los ClientDatasets nunca he tenido los problemas que has comentado con campos calculados y filtros.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #4  
Antiguo 24-02-2004
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 24
Giniromero Va por buen camino
Gracias por lo de ROW. Yo estaba usando TOP... y claro... pos' no funcionaba.

Voy a echarle un vistazo a lo que me comentas.

Garcias por todo.

Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :)
Responder Con Cita
  #5  
Antiguo 26-02-2004
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 23
rastafarey Va por buen camino
No estoy muy claro si esto te puede ayudar pero de todos modos te lo dire.

Si estoy equibacado me disculpan no lo recuerdo bien.

Segun lei si se pueden configurar los router con una direccion fija y un prefijo estos funcionarian como si encontraran en un red interna y creo que esto podria mejorar la velocidad.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 12:01:13.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi