Supongamos que tienes un archivo muy grande que es el lazo principal del programa y que dentro de este lazo haces chain a una tabla constantemente de la cual extraes información de un código que a su vez lo usas para actualizar el archivo grande.
El siguiente pseudo-código fuente como ejemplo para ilustrar de lo que se trata:
FArchivoGrande U K Disk
FTabla I K Disk
C Read Archivo Grande 99
C Dow not *in99
C Clave Chain Tabla 98
c*
c Eval Campog = campot
c update ArchivoGrander (la r al final: nombre de registro)
c*
c Read Archivo Grande 99
c Enddo
c Seton LR
c*
Si el "ArchivoGrande" tiene un total de 5.000.0000 de registros, esto
significa que en la ejecucion del programa se realizan un total de accesos
al disco relacionado como sigue:
Total lecturas:
Sobre el Archivo grande: 5.000.000
Sobre la tabla: 5.000.000
----------
10.000.000
Hay que añadir a esta cifra los accesos al disco que se hacen por cada update al archivo grande que son 5.000.000 puesto que se realiza un update por cada registro leído en el archivogrande.
En un ejercicio de imaginación supongamos que cada acceso a disco "cuesta" un milisegundo. Un milisegundo es 0,001 segundos. 15.000.000 accesos x 0,001 segundos
representa 15.000 segundos que traducidos a minutos son 250. Llevados a horas son 4,16 horas. (aproximandamente 4 horas, 9 minutos, 36 segundos)
Son 15.000.000 de acceso al disco lo cual representan 15.000.000 de operaciones de I/O.
La operaciones de I/O son las mas lentas que procesa cualquier sistema operativo.
Si queremos reducir el tiempo de respuesta es necesario reducir la cantidad de lecturas y grabaciones al disco.
Vamos a generar un código fuente mas efectivo en cuanto a tiempo de respuesta.
FArchivoGrande U K Disk
FTabla I K Disk
D*
DTclave 5 S dim(1000) *Arreglo que guarda clave de la tabla*
DTdata 10 A dim(1000) *Arreglo guarda la data de la tabla*
Dindice 4 S 0 *Indice de acceso al arreglo*
D*
c* Lectura de la tabla y se guarda en un arreglo.
C*
C Eval Indice = 1
C Read Tabla 01
c Dow not *in01
C eval Tclave(indice) = Clave
c eval Tdata(indice) = Campot
c Eval Indice = Indice + 1
c Read Tabla 01
c Enddo
C*
C Read Archivo Grande 99
C Dow not *in99
c Eval Indice = 1
C Clave Lookup,Indice Tclave 98
c*
c Eval Campog = Tdata(indice)
c update ArchivoGrander (la r al final: nombre de registro)
c*
c Read Archivo Grande 99
c Enddo
c Seton LR
c*
El uso de arreglos ( o matrices) reduce los tiempos de respuesta porque los accesos a un arreglo NO SON accesos al disco.
vamos a contabilizar el número de I/O que tenemos en esta versión:
Lecturas:
Sobre el ArchivoGrande: 5.000.000
Sobre la tabla : 1.000
---------
5.001.000
Updates:
Sobre el ArchivoGrande: 5.000.000
Un total de 10.001.000 accesos a disco. Esto representa: 10.001.000 x 0,001 segundos = 10001 segundos consumidos en acceso a disco que traducidos a minutos son: 166,683 y llevados a horas son: 2,77805 horas. (esto es aproximadamante 2 horas, 46 minutos, 41 segundos), reduciendose en un 33% el tiempo de respuesta. ¿Impresionante no?
Si te pareció interesante, reenvialo a un amigo haciendo click en el sobrecito que está al final del artículo. El conocimiento es valioso, compártelo.
Autor: Ing. Liliana Suárez
No comments:
Post a Comment