Hey gente avete sentito della
1 Billion Rows Challenge? Si tratta di scrivere un programma Java che processa un csv di 1 miliardo di righe in meno di 10 secondi.
Io ho partecipato ma ho un risultato abbastanza scarso intorno ai 29 secondi, sulla macchina che usano per valutare le submission :-/. Ho usato una memory map per leggere il file, l'ho diviso in N segmenti, uno per core e li processo in parallelo, e ho usato una macchina a stati per parsare il file nella maniera più efficiente che sono riuscito a immaginare. Ho scritto il programma in maniera uguale sia in Java che in Go, e ho gli stessi tempi.
Vedo che quelli che riescono a stare sotto i 3 secondi (!) usano Unsafe per leggere la memoria direttamente, e parsano il file un long alla volta invece che un byte alla volta come faccio io.
Mi chiedo se qualcuno in lista sta partecipando, e/o ci sono suggerimenti per attaccare il problema in maniera diversa