[Perl] Pregunta #3

Salvador Ortiz Garcia sog@msg.com.mx
13 Mar 2002 00:49:42 -0600


On Tue, 2002-03-12 at 19:13, Alejandro G. Bedoya wrote:
> From: "Salvador Ortiz Garcia" <sog@msg.com.mx>
> >>     Hay algun l=EDmite para el manejo de archivos planos en PERL, es d=
ecir,
> el
> >> abrir un archivo inmensamente grande procesarlo y guardarlo???
> >No
>=20
>     Pero este l=EDmite tambien depende de la memoria virtual, no???

No, salvo si por "procesarlo" entiendes querer tenerlo todo en memoria.

El hecho de que perl sea capaz de comerse a memoria un archivo completo
no implica que sea la mejor opci=F3n.

En general ser=E1 mas eficiente y m=E1s rapido un:=20
   =20
   while(my $line =3D <FILE>) { ... }

que un

   @arch =3D <FILE>; for my $line (@arch) {     }

>=20
> >>     Hay algun l=EDmite para hacer arreglos y hashes respecto al tama=
=F1o de
> >> estos???
> >Si, la memoria virtual
>=20
>     Dependeria esto de la plataforma??? Es decir hacer un programita en
> Windows que en Linux???

Por supuesto.

> >>       Que tan grandes datos ustedes han manejado adecuadamente????
> >Unos 25 millones de registros.
>=20
>     En Base de datos o archivo plano??? Se han procesado esos 25 millones=
 de
> registros al momento?

Las herramientas m=E1s poderosas para menejo de archivos realmente grandes
son DB o GDBM.

Mira, perl es popular para hacer peque=F1os scripts, 'one-liners' o CGIs
que son programas de muy corta vida, a lo m=E1s unos cuantos segundos y
que bueno.

Pero eso no implica que no tenga todas las faciludades para hacer
programas en toda la forma, con cientos de modulos, y con lapsos de vida
de meses.

De ah=ED que para quienes lo usan para programitas (CGIs, por ejemplo), no
tiene mucha importancia si usan s=F3lo variables globales, con todo en
main::, se comen la memoria con glotoner=EDa y unos cuantos ciclos de
reloj aqu=ED y all=E1. Total, una fracci=F3n de segundo y todo desapareci=
=F3:

  "Memory Leaks? Qu=E9 es eso?"

Pero cuando tienes un sistema que desarrollan entre varios y/o que
deber=E1 vivir semanas atendiendo miles de solicitudes/transacciones/etc.
tiene uno que volverse mucho m=E1s cuidadoso con las recursos
Memoria/CPU/Ancho de Banda.

Por ejemplo la memoria usada en perl por el codigo de abajo jam=E1s ser=E1
devuelta al sistema operativo sino hasta que el programa termine.
 =20
    @big =3D (0..10_000_000); undef @big;

Si termina fraciones de segundo depues puede no ser grave, si la idea es
que no termine pronto, ser=E1 una piedra en la garganta de tu maquina.


Saludos.

Salvador Ortiz.