Tengo una serie de scripts que actualmente se leen en una gran cantidad de datos de algunos archivos .CSV. Para mayor eficiencia, uso el módulo Text::CSV_XS para leerlos y luego crear un hash usando una de las columnas como índice. Sin embargo, tengo un lote de archivos y son bastante grandes. Y cada uno de los scripts necesita leer nuevamente los datos.¿Cómo puedo acceder a los datos en muchos archivos CSV grandes rápidamente desde Perl?
La pregunta es: ¿cómo puedo tener un almacenamiento persistente de estos hashes de Perl para que todos puedan leerse nuevamente con un mínimo de CPU?
La combinación de los scripts no es una opción. Me gustaría ...
me aplicó la segunda regla de optimización y perfiles utilizados para encontrar que la gran mayoría de la CPU (alrededor del 90%) fue en:
Text::CSV_XS::fields
Text::CSV_XS::Parse
Text::CSV_XS::parse
Por lo tanto, hice un script de prueba que de lectura en todos los archivos CSV (Texto :: CSV_XS), desechó utilizando el módulo almacenable, y luego fue atrás y leer de nuevo en el uso del módulo de almacenable. Me perfilado esto por lo que pude ver los tiempos de CPU:
$ c:/perl/bin/dprofpp.bat
Total Elapsed Time = 1809.397 Seconds
User+System Time = 950.5560 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c Name
25.6 243.6 243.66 126 1.9338 1.9338 Storable::pretrieve
20.5 194.9 194.92 893448 0.0002 0.0002 Text::CSV_XS::fields
9.49 90.19 90.198 893448 0.0001 0.0001 Text::CSV_XS::Parse
7.48 71.07 71.072 126 0.5641 0.5641 Storable::pstore
4.45 42.32 132.52 893448 0.0000 0.0001 Text::CSV_XS::parse
(the rest was in terms of 0.07% or less and can be ignored)
Por lo tanto, el uso de almacenable cuesta alrededor de 25,6% a cargar de nuevo en comparación con Texto :: CSV_XS a aproximadamente 35%. No hay muchos ahorros ...
¿Alguien ha recibido alguna sugerencia sobre cómo puedo leer estos datos de manera más eficiente?
Gracias por su ayuda.
Atentamente y friedo me quita el pulgar. – Axeman
@Axeman Gracias. –
Ese es el camino a seguir si no necesita acceso de escritura. –