Warum DuckDB

Warum DuckDB

Es gibt viele Datenbankmanagementsysteme (DBMS). Aber es gibt kein System, das für alle Zwecke gleich gut geeignet ist. Jedes trifft andere Kompromisse für bestimmte Einsatzszenarien. DuckDB ist da keine Ausnahme. Hier erklären wir, welche Ziele DuckDB verfolgt und wie wir sie technisch erreichen. DuckDB ist ein relationales (tabellenorientiertes) DBMS mit Unterstützung für die Structured Query Language (SQL).

Zentrale Eigenschaften von DuckDB

Einfach

SQLite ist das am weitesten verbreitete DBMS der Welt. Einfache Installation und der Betrieb im selben Prozess sind zentral für diesen Erfolg. DuckDB übernimmt Einfachheit und In-Process-Betrieb – ist aber später mit dem Quack-Protokoll über den reinen In-Process-Betrieb hinausgegangen.

DuckDB hat keine externen Abhängigkeiten, weder beim Kompilieren noch zur Laufzeit. Für Releases wird der gesamte Quellbaum in zwei Dateien kompiliert: eine Header- und eine Implementierungsdatei, eine sogenannte „Amalgamation“. Das vereinfacht Deployment und die Einbindung in andere Build-Prozesse erheblich. Zum Bauen von DuckDB reicht ein funktionierender C++11-Compiler (DuckDB v2.0 wechselt zu C++17).

Es gibt keine separate DBMS-Serversoftware, die installiert, aktualisiert und gewartet werden muss. DuckDB läuft nicht als eigener Prozess, sondern vollständig eingebettet im Host-Prozess. Für die analytischen Anwendungsfälle von DuckDB bedeutet das zusätzlich einen schnellen Datentransfer zur und von der Datenbank. In manchen Fällen kann DuckDB fremde Daten ohne Kopieren verarbeiten. Das DuckDB-Python-Paket kann zum Beispiel Abfragen direkt auf Pandas-Daten ausführen, ohne Daten zu importieren oder zu kopieren.

Portabel

Dank fehlender Abhängigkeiten ist DuckDB extrem portabel. Es lässt sich für alle wichtigen Betriebssysteme (Linux, macOS, Windows) und CPU-Architekturen (x86, ARM) kompilieren. Der Einsatz reicht von kleinen, ressourcenarmen Edge-Geräten bis zu großen Servern mit mehreren Terabyte Speicher und über 100 CPU-Kernen. Mit DuckDB-Wasm läuft DuckDB auch im Browser und auf Mobiltelefonen.

DuckDB bietet APIs für C, C++, Go, Python, R, Rust, Java, Node.js und weitere Sprachen.

Funktionsreich

DuckDB bietet ernsthafte Datenmanagement-Funktionen. Es gibt umfangreiche Unterstützung für komplexe SQL-Abfragen mit einer großen Funktionsbibliothek, Window-Funktionen usw. DuckDB liefert transaktionale Garantien (ACID) durch eine eigene, für große Änderungen optimierte Multi-Version Concurrency Control (MVCC). Daten können im nativen DuckDB-Format gespeichert werden, als Einzeldatei-Datenbank oder in einem der unterstützten Lakehouse-Formate. Das native Format unterstützt Sekundärindizes für gezielte Zugriffe, während Lakehouse-Formate einschließlich DuckLake bis in den Petabyte-Bereich skalieren.

DuckDB ist tief in Python und R integriert, damit interaktive Datenanalyse effizient bleibt.

Schnell

DuckDB ist für analytische Abfrage-Workloads ausgelegt, auch Online Analytical Processing (OLAP) genannt. Typisch sind komplexe, länger laufende Abfragen über große Teile der gespeicherten Daten, etwa Aggregationen über ganze Tabellen oder Joins zwischen mehreren großen Tabellen. Änderungen an den Daten sind oft ebenfalls umfangreich: viele neue Zeilen oder große Teile von Tabellen werden auf einmal ergänzt oder geändert.

Dafür müssen die CPU-Zyklen pro Wert möglichst gering bleiben. Der Stand der Technik sind vektorisierte oder Just-in-Time-Ausführungsengines. DuckDB verwendet eine spaltenorientiert-vektorisierte Query-Engine: Abfragen werden weiterhin interpretiert, aber große Wertemengen (ein „Vektor“) in einem Schritt verarbeitet. Das reduziert den Overhead traditioneller Systeme wie PostgreSQL, MySQL oder SQLite, die Zeile für Zeile arbeiten. Vektorisierte Ausführung führt bei OLAP-Abfragen zu deutlich besserer Leistung.

Erweiterbar

DuckDB bietet einen flexiblen Erweiterungsmechanismus für neue Datentypen, Funktionen, Dateiformate und SQL-Syntax. Viele Kernfunktionen wie Parquet, JSON, Zeitzonen sowie HTTP(S) und S3 sind selbst Erweiterungen. Erweiterungen funktionieren auch in DuckDB Wasm. Beiträge aus der Community gibt es als Community Extensions.

Kostenlos

Die Entwicklung von DuckDB begann, als die Hauptentwickler im öffentlichen Dienst der Niederlande arbeiteten. Wir sehen es als Verantwortung, die Ergebnisse frei zugänglich zu machen. Deshalb erscheint DuckDB unter der sehr permissiven MIT-Lizenz, und das geistige Eigentum liegt bei der DuckDB Foundation. Beiträge sind willkommen, sofern sie unserem Verhaltenskodex entsprechen.

Gründlich getestet

DuckDB entstand in einer Forschungsgruppe, war aber nie als Forschungsprototyp gedacht, sondern als stabiles Datenbanksystem. Deshalb wird DuckDB intensiv mit Continuous Integration getestet. Die Testsuite enthält Millionen von Abfragen, darunter adaptierte Tests aus SQLite, PostgreSQL und MonetDB. Tests laufen auf vielen Plattformen und Compilern. Jeder Pull Request wird gegen den vollen Testsatz geprüft und nur bei Erfolg gemerged.

Zusätzlich stressen wir DuckDB unter Last: Wir führen die Benchmarks TPC-H und TPC-DS aus und testen parallele Nutzung durch viele Clients.

Begutachtete Papers und Abschlussarbeiten

Projekte mit/für DuckDB

Projekte, die DuckDB nutzen, finden Sie im Awesome-DuckDB-Repository.

Auf den Schultern von Riesen

DuckDB nutzt Komponenten verschiedener Open-Source-Projekte und zieht Inspiration aus wissenschaftlichen Veröffentlichungen. Dafür sind wir dankbar. Ein Überblick: