MCPcopy Index your code
hub / github.com/gunnarmorling/1brc

github.com/gunnarmorling/1brc @main sqlite

repository ↗ · DeepWiki ↗
3,405 symbols 9,119 edges 178 files 200 documented · 6%
README

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!

1BRC

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 Levart Certificate
00:04.684 link 21.0.1-open Florin Blanaru uses Unsafe Certificate
00:04.701 link 21.0.1-open Dr Ian Preston Certificate
00:04.741 link 21.0.1-open Cliff Click uses Unsafe Certificate
00:04.800 link 21.0.1-open Parker Timmins Certificate
00:04.884 link 21.0.1-open Aleksey Shipilëv [Certificate](http:

Extension points exported contracts — how you extend this code

OpenConsumer (Interface)
(no doc) [7 implementers]
src/main/java/dev/morling/onebrc/CalculateAverage_justplainlaake.java
LineFinder (Interface)
To find the nearest newline byte position in a long. [2 implementers]
src/main/java/dev/morling/onebrc/CalculateAverage_C5H12O5.java
PartitionCalculator (Interface)
(no doc) [2 implementers]
src/main/java/dev/morling/onebrc/CalculateAverage_giovannicuccu.java
ResultConsumer (Interface)
(no doc) [2 implementers]
src/main/java/dev/morling/onebrc/CalculateAverage_iziamos.java
Consumer (Interface)
(no doc) [2 implementers]
src/main/java/dev/morling/onebrc/CalculateAverage_stephenvonworley.java

Core symbols most depended-on inside this repo

get
called by 817
src/main/java/dev/morling/onebrc/CalculateAverage_mattiz.java
min
called by 338
src/main/java/dev/morling/onebrc/CalculateAverage_mahadev_k.java
getLong
called by 306
src/main/java/dev/morling/onebrc/CalculateAverage_anitasv.java
append
called by 262
src/main/java/dev/morling/onebrc/CalculateAverage_lawrey.java
max
called by 260
src/main/java/dev/morling/onebrc/CalculateAverage_mahadev_k.java
map
called by 239
src/main/java/dev/morling/onebrc/CalculateAverage_3j5a.java
length
called by 203
src/main/java/dev/morling/onebrc/CalculateAverage_vaidhy.java
getByte
called by 180
src/main/java/dev/morling/onebrc/CalculateAverage_anitasv.java

Shape

Method 2,662
Class 699
Function 23
Interface 13
Enum 5
Struct 3

Languages

Java99%
Go1%
Python1%

Modules by API surface

src/main/java/dev/morling/onebrc/CalculateAverage_vemanaNonIdiomatic.java145 symbols
src/main/java/dev/morling/onebrc/CalculateAverage_vemana.java73 symbols
src/main/java/dev/morling/onebrc/CalculateAverage_mtopolnik.java46 symbols
src/main/java/dev/morling/onebrc/CalculateAverage_stephenvonworley.java45 symbols
src/main/java/dev/morling/onebrc/CalculateAverage_bytesfellow.java45 symbols
src/main/java/dev/morling/onebrc/CalculateAverage_vaidhy.java40 symbols
src/main/java/dev/morling/onebrc/CalculateAverage_serkan_ozal.java40 symbols
src/main/java/dev/morling/onebrc/CalculateAverage_raipc.java40 symbols
src/main/java/dev/morling/onebrc/CalculateAverage_melgenek.java37 symbols
src/main/java/dev/morling/onebrc/CalculateAverage_godofwharf.java37 symbols
src/main/java/dev/morling/onebrc/CalculateAverage_yavuztas.java36 symbols
src/main/java/dev/morling/onebrc/CalculateAverage_artsiomkorzun.java35 symbols

Dependencies from manifests, versioned

org.assertj:assertj-core3.21.0 · 1×
org.junit.jupiter:junit-jupiter
org.junit:junit-bom5.8.1 · 1×

For agents

$ claude mcp add 1brc \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact