Anmeldung Registrierung
Auto Hell Dunkel
Erweiterte Suche
  1. Startseite
  2. Podcasts
  3. Engineering Kiosk Podcast
  4. #265 One Billion Row Challenge: Java mit mmap, Unsafe & richtig vielen Bit-Tricks
Java und Performance in einem Satz? Für viele klingt das immer
noch wie ein Widerspruch. Dann kommt eine Challenge daher, bei
der eine Milliarde Zeilen Wetterdaten verarbeitet werden sollen,
und plötzlich wird aus Stammtischwissen ein echter
Engineering-Nerdfight. Genau darum geht es in dieser Episode. Wir
tauchen tief in die One Billion Row Challenge ein und schauen uns
an, wie eine vermeintlich einfache Aufgabe zum internationalen
Performance-Contest wurde.

Wir sprechen darüber, warum Gunnar Morling diese Challenge
gestartet hat, wie aus einer naiven Lösung mit fast fünf Minuten
Laufzeit optimierte Implementierungen mit rund 1,5 Sekunden
wurden und welche Rolle dabei Java, GraalVM, Memory Mapping,
Unsafe, SIMD, Branchless Coding, Hashmaps, Cache-Lines und
Integer-Arithmetik spielen. Außerdem schauen wir auf die Kritik
an der Challenge, etwa RAM-Disk, Dataset-Overfitting und
CPU-spezifische Optimierungen, und wir werfen einen Blick auf
alternative Umsetzungen in C, Go, PHP, SQL, DuckDB, ClickHouse,
AWK und sogar auf GPU-Ansätze.

Wenn du Performance-Optimierung nicht nur als Buzzword, sondern
als Mischung aus Hardware-Verständnis, Datenstrukturen,
Compiler-Wissen und Community-Lernen sehen willst, bist du hier
genau richtig. Und ganz nebenbei klären wir auch noch, ob Java
wirklich langsam ist oder ob dieser Mythos endlich in Rente darf.

Bonus: AWK schafft es in elf Zeilen. Nicht schnell, aber
stilvoll.

Unsere aktuellen Werbepartner findest du auf
https://engineeringkiosk.dev/partners

Das schnelle Feedback zur Episode:

(top)  (geht
so)

Anregungen, Gedanken, Themen und Wünsche

Dein Feedback zählt! Erreiche uns über einen der folgenden Kanäle
…

EngKiosk Community:
https://engineeringkiosk.dev/join-discord 

LinkedIn: https://www.linkedin.com/company/engineering-kiosk/

Email: stehtisch@engineeringkiosk.dev

Mastodon: https://podcasts.social/@engkiosk

Bluesky:
https://bsky.app/profile/engineeringkiosk.bsky.social

Instagram: https://www.instagram.com/engineeringkiosk/

Unterstütze den Engineering Kiosk

Wenn du uns etwas Gutes tun möchtest … Kaffee schmeckt uns
immer 

Buy us a coffee: https://engineeringkiosk.dev/kaffee

Links

Gunnar Morling: https://www.morling.dev/

Blog Post “The One Billion Row Challenge”:
https://www.morling.dev/blog/one-billion-row-challenge/

1brc Github Repository: https://github.com/gunnarmorling/1brc

The Software Development Kit Manager: https://sdkman.io/

1BRC Show and Tell:
https://github.com/gunnarmorling/1brc/discussions/categories/show-and-tell

JEP 471: Deprecate the Memory-Access Methods in
sun.misc.Unsafe for Removal: https://openjdk.org/jeps/471

GraalVM: https://www.graalvm.org/

Aleksey Shipilëv’s Submission mit 187 Zeilen Kommentar:
https://github.com/gunnarmorling/1brc/blob/main/src/main/java/dev/morling/onebrc/CalculateAverage_shipilev.java

Fastest known solution: 0.577s (8 core Zen2); C with heavy
AVX2: https://github.com/gunnarmorling/1brc/discussions/710

AWK-Lösungen:
https://github.com/gunnarmorling/1brc/discussions/171

AWK in 11 Zeilen:
https://github.com/emiruz/1brc/blob/main/1brc.awk

1BRC mit DuckDB:
https://rmoff.net/2024/01/03/1%EF%B8%8F%E2%83%A3%EF%B8%8F-1brc-in-sql-with-duckdb/

1BRC mit Clickhouse: https://ftisiot.net/posts/1brows/

One Trillion Row Challenge: https://github.com/coiled/1trc

The One Billion Row Challenge in Go: from 1m45s to 3.4s in
nine solutions: https://benhoyt.com/writings/go-1brc/

Processing One Billion Rows in PHP!:
https://dev.to/realflowcontrol/processing-one-billion-rows-in-php-3eg0/

1BRC in PHP FFI + Rust:
https://gianlucafabrizi.dev/blog/posts/1brc-php-ffi/

Dask (Parallel Python): https://www.dask.org/

1BRC–Nerd Sniping the Java Community:
https://www.infoq.com/presentations/1brc/

The Billion Row Challenge (1BRC) - Step-by-step from 71s to
1.7s:
https://questdb.com/blog/billion-row-challenge-step-by-step/

1BRC merykitty’s Magic SWAR: 8 Lines of Code Explained in
3,000 Words: https://questdb.com/blog/1brc-merykittys-magic-swar/

Path to the Fastest #1BRC Solution:
https://github.com/thomaswue/1brc-steps

1BRC - What a Journey:
https://www.esolutions.tech/1brc-what-a-journey

Gewinner der 1BRC Thomas Wuerthinger:
https://www.linkedin.com/in/thomaswue/

Zenbleed: https://lock.cmpxchg8b.com/zenbleed.html

Engineering Kiosk Episode #180 Skalierung, aber zu welchem
Preis? (Papers We Love):
https://engineeringkiosk.dev/podcast/episode/180-skalierung-aber-zu-welchem-preis-papers-we-love/

mmap: https://en.wikipedia.org/wiki/Mmap

Sprungmarken

(00:00:00) One Billion Row Challenge und der
Java-Performance-Mythos

(00:04:25) Info/Werbung

(00:05:25) One Billion Row Challenge und der
Java-Performance-Mythos

(00:07:07) Die Challenge: 1 Milliarde Wetterdaten und ein viraler
Benchmark

(00:13:00) Testsetup, Hetzner-Server und erste
Laufzeit-Schätzungen

(00:17:05) Von 4 Minuten auf 1,5 Sekunden: Gewinner, GraalVM und
Bonuslisten

(00:21:35) Kritik am Benchmark: RAM-Disk, Overfitting und
Realitätsbezug

(00:25:03) Erste Optimierungen: Parallelisierung, lokale Hashmaps
und Dateisplits

(00:26:59) Memory Mapping, Unsafe und Garbage Collection
vermeiden

(00:34:38) Custom Hashmaps, Cache Lines und Integer statt Float

(00:38:30) Temperatur-Parsing auf Bit-Ebene und ALU-Operationen

(00:42:02) SIMD, SWAR und Branchless Coding auf CPU-Ebene

(00:49:53) GraalVM als Performance-Hebel und ein kreativer
Prozess-Hack

(00:54:05) Andere Sprachen im Vergleich: C, Go, PHP, AWK und SQL

(00:59:20) Warum die GPU hier nicht automatisch gewinnt

(01:01:44) Was bringt das im Alltag? Kritik, Learnings und
Team-Challenges

Hosts

Wolfgang Gassler (https://gassler.dev) 

Andy Grunwald (https://andygrunwald.com/)

Community

Diskutiere mit uns und vielen anderen Tech-Spezialist⋅innen in
unserer Engineering Kiosk Community unter
https://engineeringkiosk.dev/join-discord
Episode melden

„#265 One Billion Row Challenge: Java mit mmap, Unsafe & richtig vielen Bit-Tricks“

Worum geht es? Danach fragen wir noch nach dem Grund.

Abonnenten

Teilen

Mein Archiv

Deine Privatkopie der Folgen, die du nicht verlieren willst.

Podcast-Folgen verschwinden. Feeds werden auf die letzten Episoden gekürzt, Hoster räumen alte Dateien ab, Formate wechseln den Anbieter und lassen ihr Archiv zurück. Mit „Mein Archiv“ sichert podcast.de die Folgen deiner Podcasts für dich — angefangen bei den ältesten, denn die sind zuerst weg.

  • Deine gesicherten Folgen bleiben hörbar, auch wenn das Original offline geht.
  • Auch Folgen, die im heutigen Feed gar nicht mehr stehen — podcast.de kennt sie noch.
  • Herunterladen bleibt möglich, solange die Folge beim Podcaster liegt. Der zählt seine Abrufe wie bisher.
Startet bald

Sei beim Start von Mein Archiv dabei

Mein Archiv ist fast fertig. Trag dich ein, dann bekommst du eine E-Mail, sobald es losgeht – und bist von Anfang an dabei. Wir schreiben dir nur zum Start, keine Werbung, keine Weitergabe deiner Daten.

Du bekommst zuerst eine Bestätigungsmail. Abmelden geht jederzeit. Datenschutz