Ahora que los equipos tienen SSD y mucha memoria, el cuello de botella se vuelve a trasladar del disco a la cpu. Hay que extraer las lineas que nos pide el usuario, y si no tenemos indices y acceso directo no nos queda otra que buscar en los ficheros.
La orden grep en cierto modo nos marca el estado del arte: si su fichero esta ya cargado en memoria por el OS, puede hacer dos millones de lineas por segundo. Si todavia dependemos de un disco magnetico, puede bajar a 500000 o 800000.
Postgresql, v10, tambien es capaz de grepear (segun uses ilike o like, y se cachee o no la tabla) entre 500000 y cuatro millones de lineas por segundo.
Pero un grep desde python, que es lo mas elemental en cuanto a operacion de mapreduce que puedes tener, se va a quedar limitado a unas 300000 o 400000 lineas por segundo, aunque uses dos o tres hilos o una pool de procesos para separar la extraccion de fichero y su procesamiento. Hay que afinar mucho el recorrido del fichero, tirando de coroutinas, iterador de lineas, mmap, y hasta binary para que no haga conversiones redundantes. Si relajas la organizacion, facilmente pierdes un factor dos por aqui y otro por alla.
Asi que sigue siendo prudente considerar un maximo de unas 50000 lineas por fichero si hay que hacer operaciones sofisticadas, y quizas cien o doscientas mil lineas si uno cuenta que lo que va a hacer es una extraccion muy simple.
Deja una respuesta