[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.