1️⃣🐝🏎️ The One Billion Row Challenge
Status Feb 4: The final leaderboards have been published. Congrats to all the winners, and a big thank you to everyone participating in this challenge as well as to everyone helping to organize it!
Status Feb 3: All entries have been evaluated and I am in the process of finalizing the leaderboards.
Status Feb 1: The challenge has been closed for new submissions. No new pull requests for adding submissions are accepted at this time. Pending PRs will be evaluated over the next few days.
Status Jan 31: The challenge will close today at midnight UTC.
Status Jan 12: As there has been such a large number of entries to this challenge so far (100+), and this is becoming hard to manage, please only create new submissions if you expect them to run in 10 seconds or less on the evaluation machine.
Status Jan 1: This challenge is open for submissions!
Sponsorship
A big thank you to my employer Decodable for funding the evaluation environment and supporting this challenge!
The One Billion Row Challenge (1BRC) is a fun exploration of how far modern Java can be pushed for aggregating one billion rows from a text file. Grab all your (virtual) threads, reach out to SIMD, optimize your GC, or pull any other trick, and create the fastest implementation for solving this task!
The text file contains temperature values for a range of weather stations.
Each row is one measurement in the format <string: station name>;<double: measurement>
, with the measurement value having exactly one fractional digit.
The following shows ten rows as an example:
Hamburg;12.0
Bulawayo;8.9
Palembang;38.8
St. John's;15.2
Cracow;12.6
Bridgetown;26.9
Istanbul;6.2
Roseau;34.4
Conakry;31.2
Istanbul;23.0
The task is to write a Java program which reads the file, calculates the min, mean, and max temperature value per weather station, and emits the results on stdout like this
(i.e. sorted alphabetically by station name, and the result values per station in the format <min>/<mean>/<max>
, rounded to one fractional digit):
{Abha=-23.0/18.0/59.2, Abidjan=-16.2/26.0/67.3, Abéché=-10.0/29.4/69.0, Accra=-10.1/26.4/66.4, Addis Ababa=-23.7/16.0/67.0, Adelaide=-27.8/17.3/58.5, ...}
Submit your implementation by Jan 31 2024 and become part of the leaderboard!
Results
These are the results from running all entries into the challenge on eight cores of a Hetzner AX161 dedicated server (32 core AMD EPYC™ 7502P (Zen2), 128 GB RAM).
# | Result (m:s.ms) | Implementation | JDK | Submitter | Notes | Certificates |
---|---|---|---|---|---|---|
1 | 00:01.535 | link | 21.0.2-graal | Thomas Wuerthinger, Quan Anh Mai, Alfonso² Peterssen | GraalVM native binary, uses Unsafe | Certificate |
2 | 00:01.587 | link | 21.0.2-graal | Artsiom Korzun | GraalVM native binary, uses Unsafe | Certificate |
3 | 00:01.608 | link | 21.0.2-graal | Jaromir Hamala | GraalVM native binary, uses Unsafe | Certificate |
00:01.880 | link | 21.0.1-open | Serkan ÖZAL | uses Unsafe | Certificate | |
00:01.921 | link | 21.0.2-graal | Van Phu DO | GraalVM native binary, uses Unsafe | Certificate | |
00:02.018 | link | 21.0.2-graal | Stephen Von Worley | GraalVM native binary, uses Unsafe | Certificate | |
00:02.157 | link | 21.0.2-graal | Roy van Rijn | GraalVM native binary, uses Unsafe | Certificate | |
00:02.319 | link | 21.0.2-graal | Yavuz Tas | GraalVM native binary, uses Unsafe | Certificate | |
00:02.332 | link | 21.0.2-graal | Marko Topolnik | GraalVM native binary, uses Unsafe | Certificate | |
00:02.367 | link | 21.0.1-open | Quan Anh Mai | uses Unsafe | Certificate | |
00:02.507 | link | 21.0.1-open | gonix | uses Unsafe | Certificate | |
00:02.557 | link | 21.0.1-open | yourwass | uses Unsafe | Certificate | |
00:02.820 | link | 22.ea.32-open | Li Lin | uses Unsafe | Certificate | |
00:02.995 | link | 21.0.2-graal | tivrfoa | GraalVM native binary, uses Unsafe | Certificate | |
00:02.997 | link | 21.0.1-open | gonix | Certificate | ||
00:03.095 | link | 21.0.2-graal | Jamal Mulla | GraalVM native binary, uses Unsafe | Certificate | |
00:03.210 | link | 21.0.1-open | Quan Anh Mai | Certificate | ||
00:03.298 | link | 21.0.1-graal | Subrahmanyam | uses Unsafe | Certificate | |
00:03.431 | link | 21.0.1-graal | Roman Musin | GraalVM native binary, uses Unsafe | Certificate | |
00:03.469 | link | 21.0.2-graal | Elliot Barlas | GraalVM native binary, uses Unsafe | Certificate | |
00:03.698 | link | 21.0.1-graal | Jason Nochlin | Certificate | ||
00:03.785 | link | 21.0.2-graal | zerninv | GraalVM native binary, uses Unsafe | Certificate | |
00:03.820 | link | 21.0.2-graal | John Ziamos | GraalVM native binary, uses Unsafe | Certificate | |
00:03.902 | link | 21.0.1-open | Juan Parera | Certificate | ||
00:03.966 | link | 21.0.1-open | Jin Cong Ho | uses Unsafe | Certificate | |
00:03.991 | link | 21.0.1-graal | Vaidhy Mayilrangam | uses Unsafe | Certificate | |
00:04.066 | link | 21.0.1-open | JesseVanRooy | uses Unsafe | Certificate | |
00:04.101 | link | 21.0.2-graal | Jaime Polidura | GraalVM native binary, uses Unsafe | Certificate | |
00:04.209 | link | 21.0.1-open | Giovanni Cuccu | Certificate | ||
00:04.474 | link | 21.0.1-open | Roman Stoffel | Certificate | ||
00:04.676 | link | 21.0.2-tem | [Peter |