Gunnar Morling, Software engineer che dopo aver militato nelle fila di Red Hat è ora in forza presso Decodable, ha lanciato una sfida chiamata "The One Billion Row Challenge". Capiremo a breve perché. Si tratta nello specifico di una challenge dedicata agli sviluppatori Java che ha avuto inizio l'1 gennaio 2024 e che raggiungerà la sua deadline il 31 gennaio. Cerchiamo di capire di cosa si tratta.
Obbiettivi e regole della sfida
I partecipanti alla "The One Billion Row Challenge" hanno una missione: scrivere un programma in Java per recuperare i valori di misurazione della temperatura da un file di testo. Fatto questo dovranno calcolare la temperatura minima, media e massima per ciascuna stazione meteorologica. Con un solo, "piccolo", inconveniente: il file conta ben 1.000.000.000 di righe. Esso contiene i valori di temperatura per diverse stazioni meteorologiche. Ogni riga rappresenta una misurazione nel formato
, con il valore della misurazione che ha esattamente una cifra decimale. Ad esempio:
Cracow;12.6
Bridgetown;26.9
Istanbul;6.2
Il formato atteso per gli output è
con arrotondamento al primo decimale. Per quanto riguarda le regole la prima è naturalmente che il programma deve essere scritto in Java. Non è possibile utilizzare dipendenze esterne di alcun tipo ed è possibile sfruttare qualsiasi distribuzione disponibile su SDKMan o openjdk.net.
I risultati della sfida
Tutte le proposte dei partecipanti saranno valutate eseguendo il programma su un'istanza Hetzner Cloud CCX33 con 8 vCPU dedicate e 32 GB di memoria RAM. Per misurare i tempi di esecuzione viene utilizzato time
. In particolare vengono misurati i tempi end-to-end, quindi ogni proposta concorrente sarà eseguita per 5 volte di seguito. Le esecuzioni più lente e quelle più veloci verranno scartate. Il valore medio delle tre esecuzioni restanti sarà quello valido e tale risultato verrà aggiunto alla classifica.
Nel momento in cui viene scritto questo post troviamo al primo posto un programma basato sul JDK 21.0.1-graal con un tempo di esecuzione medio pari a 00:06.159 (m:s.ms). L'iniziativa ha suscitato talmente tanto interesse da creare una competizione parallela dove lo stesso programma è stato sviluppato in linguaggi differenti tra cui Rust, Go e C++. Non è previsto alcun premio per i vincitori se non l'onore della medaglia d'oro e (forse) una t-shirt.