¿cuantas lineas como maximo en un csv/txt para paralelizar con big data?

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.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.