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

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

vor 1 Tag
1 Stunde 11 Minuten
0
0 0

Beschreibung

vor 1 Tag

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
15
15
Close