2025-01-17
TPC-H auf einem Raspberry Pi
Gábor Szárnyas
Update: Das hier beschriebene Setup kann alle TPC-H-Queries auf den Datensätzen SF100, SF300 und SF1.000 mit DuckDB v1.2.2 und neueren Versionen ausführen. Die Zeiten in diesem Blogbeitrag stammen vom Januar 2025 mit DuckDB v1.2-dev.
Einleitung
Der Raspberry Pi ist eine Initiative für günstige, leicht programmierbare Mikrocomputer-Boards. Das erste Modell 2012 hatte einen einzelnen CPU-Kern mit 0,7 GHz, 256 MB RAM und einen SD-Karten-Slot – eine tolle Bildungsplattform. Mit der Zeit hat die Raspberry Pi Foundation immer leistungsfähigere Modelle vorgestellt. Das aktuelle Modell, der Raspberry Pi 5, hat eine 2,4-GHz-Vierkern-CPU und kann – mit Extra-Anschlüssen – sogar NVMe-SSDs als Speicher nutzen.
Letzte Woche gab es ein weiteres Upgrade für den Pi 5: Er ist jetzt mit 16 GB RAM erhältlich. Das DuckDB-Team experimentiert gern mit DuckDB in ungewöhnlichen Setups, etwa Smartphones in Trockeneis, und wollte einen neuen Raspberry Pi 5 in die Finger bekommen. Immerhin entsprechen 16 GB Speicher der Median-Gaming-Maschine laut Steam-Umfrage vom Dezember 2024. Also sollte der Pi ein paar Dutzend GB Daten schaffen, oder? Wir wollten es herausfinden.
Setup
Unser Setup bestand aus folgenden Komponenten, insgesamt 300 $:
| Komponente | Preis (USD) |
|---|---|
| Raspberry Pi 5 mit 16 GB RAM | 120.00 |
| Raspberry-Pi-27-W-USB-C-Netzteil | 13.60 |
| Raspberry-Pi-microSD-Karte (128 GB) | 33.40 |
| Samsung 980 NVMe SSD (1 TB) | 84.00 |
| Argon ONE V3 Case | 49.00 |
| Gesamt | $300.00 |
Wir haben die Kühlkörper montiert, die SSD eingesetzt und das Gehäuse zusammengebaut. Hier ein Foto unserer Maschine:

Experimente
Was schafft diese kleine Box? Wir haben die TPC-H-Last genutzt, um das herauszufinden.
Zuerst haben wir Raspberry Pi OS (ein Fork von Debian Linux) auf die aktuelle Version 2024-11-19 aktualisiert.
Dann haben wir DuckDB Version 0024e5d4be nach den Raspberry-Pi-Build-Anweisungen gebaut.
Damit die Queries einfach laufen, haben wir die TPC-H-Erweiterung in den Build aufgenommen:
GEN=ninja BUILD_EXTENSIONS="tpch" makeDann haben wir DuckDB-Datenbankdateien mit den TPC-H-Datensätzen in verschiedenen Scale Factors (SF) heruntergeladen:
wget https://blobs.duckdb.org/data/tpch-sf100.dbwget https://blobs.duckdb.org/data/tpch-sf300.dbWir haben für beide Scale Factors zwei Speicheroptionen genutzt. Im ersten Lauf lagen die Datenbankdateien auf der microSD-Karte – dem Speicher, den die meisten Raspberry-Pi-Setups haben. Die Karte reicht für OS und Programme und kann auch DuckDB-Datenbanken speichern, ist aber eher langsam, besonders bei schreibintensiven Operationen, einschließlich Spill auf die Platte. Deshalb lagen die Datenbankdateien im zweiten Lauf auf der 1-TB-NVMe-SSD.
Für die Messungen haben wir unser Skript tpch-queries.sql genutzt, das einen Cold Run aller TPC-H-Queries von Q1 bis Q22 ausführt.
`tpch-queries.sql`
```sql PRAGMA version; SET enable_progress_bar = false; LOAD tpch; .timer on PRAGMA tpch(1); PRAGMA tpch(2); PRAGMA tpch(3); PRAGMA tpch(4); PRAGMA tpch(5); PRAGMA tpch(6); PRAGMA tpch(7); PRAGMA tpch(8); PRAGMA tpch(9); PRAGMA tpch(10); PRAGMA tpch(11); PRAGMA tpch(12); PRAGMA tpch(13); PRAGMA tpch(14); PRAGMA tpch(15); PRAGMA tpch(16); PRAGMA tpch(17); PRAGMA tpch(18); PRAGMA tpch(19); PRAGMA tpch(20); PRAGMA tpch(21); PRAGMA tpch(22); ```Das Skript haben wir so ausgeführt:
duckdb tpch-sf${SF}.db -f tpch-queries.sqlEs gab keine Abstürze, Fehler oder falschen Ergebnisse. Die folgende Tabelle enthält die aggregierten Laufzeiten:
| Scale Factor | Speicher | Geometrisches Mittel | Gesamtlaufzeit |
|---|---|---|---|
| SF100 | microSD-Karte | 23.8 s | 769.9 s |
| SF100 | NVMe-SSD | 11.7 s | 372.3 s |
| SF300 | microSD-Karte | 171.9 s | 4,866.5 s |
| SF300 | NVMe-SSD | 55.2 s | 1,561.8 s |
Aggregierte Laufzeiten
Für den SF100-Datensatz lagen die geometrischen Mittel bei 23,8 Sekunden mit der microSD-Karte und 11,7 Sekunden mit der NVMe-Platte. Letzteres ist nicht weit von den 7,5 Sekunden entfernt, die wir mit dem Samsung S24 Ultra erreicht haben – 8 CPU-Kerne, die meisten mit höherer Taktung als die Raspberry-Pi-Kerne.
Beim SF300-Datensatz musste DuckDB wegen des begrenzten Systemspeichers mehr auf die Platte spillen. Das führte zu relativ langsamen Queries auf der microSD-Karte mit einem geometrischen Mittel von 171,9 Sekunden. Der Wechsel auf die NVMe-Platte brachte eine 3-fache Verbesserung: das geometrische Mittel sank auf 55,2 Sekunden.
Einzelne Query-Laufzeiten
Die einzelnen Query-Laufzeiten finden Sie unten.
Query-Laufzeiten (in Sekunden)
| Query | SF100 / microSD | SF100 / NVMe | SF300 / microSD | SF300 / NVMe |
|---|---|---|---|---|
| Q1 | 81.1 | 15.6 | 242.0 | 55.1 |
| Q2 | 7.9 | 2.4 | 27.8 | 7.9 |
| Q3 | 31.5 | 11.8 | 218.9 | 52.7 |
| Q4 | 40.2 | 11.4 | 157.5 | 40.9 |
| Q5 | 32.2 | 12.3 | 215.9 | 54.1 |
| Q6 | 1.6 | 1.4 | 155.9 | 32.7 |
| Q7 | 12.1 | 12.3 | 255.2 | 69.6 |
| Q8 | 25.0 | 19.2 | 298.0 | 77.8 |
| Q9 | 74.0 | 50.1 | 337.2 | 147.7 |
| Q10 | 54.7 | 24.3 | 234.9 | 82.6 |
| Q11 | 7.8 | 2.3 | 34.0 | 14.9 |
| Q12 | 43.1 | 13.6 | 202.9 | 50.5 |
| Q13 | 59.2 | 51.7 | 207.4 | 177.2 |
| Q14 | 33.0 | 9.7 | 269.7 | 59.0 |
| Q15 | 11.1 | 7.1 | 157.2 | 39.6 |
| Q16 | 8.7 | 8.7 | 33.4 | 27.1 |
| Q17 | 8.3 | 7.6 | 249.4 | 66.2 |
| Q18 | 73.9 | 40.9 | 374.7 | 177.1 |
| Q19 | 66.0 | 17.8 | 317.9 | 73.8 |
| Q20 | 22.4 | 8.4 | 273.1 | 56.0 |
| Q21 | 66.9 | 35.2 | 569.5 | 172.5 |
| Q22 | 9.2 | 8.4 | 34.1 | 26.7 |
| Geomean | 23.8 | 11.7 | 171.9 | 55.2 |
| Total | 769.9 | 372.3 | 4,866.5 | 1,561.8 |
Einordnung
Um die Ergebnisse einzuordnen, haben wir historische TPC-H-Ergebnisse angesehen: Mehrere Enterprise-Lösungen von vor 20 Jahren hatten ähnliche Query-Performance und meldeten oft über 60 Sekunden als geometrisches Mittel ihrer Query-Laufzeiten. Damals kosteten diese Systeme – inklusive Softwarelizenz und Wartung – rund 300.000 $! Das heißt: Ignoriert man die Wartung, hat sich die „Bang for your Buck“-Kennzahl (Preis-Leistungs-Verhältnis) für TPC-Lesequeries in den letzten 20 Jahren um etwa den Faktor 1.000 verbessert. Ein schönes Beispiel dafür, was kontinuierliche Innovation in Hardware und Software in modernen Systemen ermöglicht.
Hinweis: Die hier gezeigten Ergebnisse sind keine offiziellen TPC-H-Ergebnisse und umfassen nur die Lesequeries von TPC-H.
Zusammenfassung
Wir haben gezeigt, dass Sie DuckDB in einem Raspberry-Pi-Setup für 300 $ nutzen können, das alle Queries auf dem TPC-H-SF300-Datensatz in unter 30 Minuten ausführt.
Wir hoffen, der Beitrag hat Ihnen gefallen. Wenn Sie ein interessantes DuckDB-Setup haben, teilen Sie es mit uns!
Haben Sie ein cooles DuckDB-Setup? Wir würden gern davon hören! Schreiben Sie darüber in den sozialen Medien oder mailen Sie Gábor Szárnyas.