PiensoPienso: Diseño de grillas con Descripción.

Tengo las tablas

Table Movimientos (100.000 registros)
Table Structure
NameDescriptionTypeFormula
*ClaveAutonumber Clave AutonumberNumeric (8)
Fecha  FechaDateTime
Referencia ReferenciaNumeric (4)
ClaveDescripcion Clave DescripciónVarChar
Table Referencia (10.000 registros)
Table Structure
NameDescriptionTypeFormula
*ReferenciaReferenciaNumeric (4)

ReferenciaDescripcion  Referencia DescripciónVarChar

Tengo 2 Webpanels que muestran una grilla que tiene 20 renglones y deben mostrarse registros de la tabla de Movimientos. y se deben mostrar las mismas columnas en ambos webpanels   

ClaveAutonumber
ClaveDescripcion
Fecha
ReferenciaDescripcion (de la tabla Referencia)

Se tiene 2 implementaciones: 

Opcion 1) 
La grilla tiene el atributo ReferenciaDescripcion en la grilla

Opcion 2) 
Se pone el atributo Referencia con un dynamic combo box con 
para mostrar la descripción. 

Cual de los dos tiene mejor performance?.  Justifique su respuesta. 

Considerar accesos a la base de datos, html generado, trafico en la red, tiempo de respuesta.

RESPUESTA: 



Acceso a la base de datos. 
Opción 1) Hace un join entre las dos tablas y trae los resultados. 
Opción 2) Hacer un select de los registros que va a mostrar en la tabla, y para cada uno de ellos recorre un curso y trae todos los registros de la tabla Referencia. 

HTML Generado. 
Opción 1) Genera un renglón en la grilla por cada registro del JOIN.  (Tamaño del html 3.6 KB)

Opcion 2) Genera un renglón en la grilla, y ademas pone los 10000 valores por cada uno de los registros de la grilla.  Tamaño del HTML 698 KB)



Tiempo de Respuesta. 
Opcion 1) 0.485 segundos. 
Opcion 2) 4.83 segundos (la enorme mayoría del tiempo, parseando el html). 
Esta prueba es local, hacerlo a traves de la red, es mucho mas acentuada la diferencia, por la diferencia entre transferir 3K y 700K. 

Resumiendo. 
Suponiendo que se tienen 20 registros en la grilla

                                   Opcion 1             Opcion 2
Base de datos (Sentencias)                1                  21      (21 veces peor)
HTML  (KB)                              3.6                 698      (200 veces peor)
Tiempo Respuesta (seg)                 0.48                4.83      (10 veces peor)

Hay que tener cuidado cuando ponemos un atributo/variable con un combo box en una grilla. El resultado visible puede ser el mismo pero en performance, aunque las tablas no tengan muchos registros, pueden ser enormes. 

En este ejemplo un poco exagerado (no mucho!) se recarga tanto el servidor de base de datos, como la red y también el cliente (navegador). 

Comentarios

  1. Tal cual nos paso y tuvimos que sacar los combo box ya que la aplicación se arrastraba. Pero tu explicación es tal cual nos paso.

    ResponderBorrar
  2. A todos nos ha pasado !

    Estoy agregando un listado en KBdoctor, para encontrar estos casos, pues es bastante difícil de detectarlo.
    Es común tener el campo clave de las tablas como dynamic combobox, y luego heredarlo en varios programas.

    ResponderBorrar

Publicar un comentario

1) Lee el post
2) Poné tu opinión sobre el mismo.
Todos los comentarios serán leidos y la mayoría son publicados.

Entradas más populares de este blog

Aplicación monolítica o distribuida?

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.