Ente gut, alles gut? DuckDB ist eine besondere Datenbank

DuckDB ist in Version 1.0 erschienen. Was hat es mit dieser Datenbank auf sich, die einiges anders macht als andere Datenbanken?

In Pocket speichern vorlesen Druckansicht 12 Kommentare lesen

(Bild: iX / generiert mit ChatGPT)

Lesezeit: 10 Min.
Von
  • Golo Roden
Inhaltsverzeichnis

Vor kurzem bin ich auf eine Software gestoßen, bei der ich mir gewünscht hätte, ich hätte sie schon viel früher kennengelernt. Aber, wie es so schön heißt: besser spät als nie. Bei dieser Software handelt es sich um eine etwas ausgefallene Datenbank, die ein paar Dinge anders macht als die üblichen Verdächtigen. Die Rede ist, und das lässt sich am Titel dieses Blogposts bereits erahnen, natürlich von DuckDB, deren finale Version 1.0 am Montag vor einer Woche veröffentlicht wurde. Das ist ein Grund mehr, einmal einen Blick auf diese Datenbank zu werfen.

the next big thing – Golo Roden

Golo Roden ist Gründer und CTO von the native web GmbH. Er beschäftigt sich mit der Konzeption und Entwicklung von Web- und Cloud-Anwendungen sowie -APIs, mit einem Schwerpunkt auf Event-getriebenen und Service-basierten verteilten Architekturen. Sein Leitsatz lautet, dass Softwareentwicklung kein Selbstzweck ist, sondern immer einer zugrundeliegenden Fachlichkeit folgen muss.

DuckDB stammt aus den Niederlanden und war ursprünglich ein Uniprojekt. Entwickelt wird die Datenbank seit 2018, also seit inzwischen sechs Jahren. Nun ist es nicht so, als ob es nicht grundsätzlich schon mehr als genug Datenbanken auf dem Markt gäbe, aber bei DuckDB gibt es einige nennenswerte Besonderheiten. Das fängt damit an, dass DuckDB im Vergleich zu vielen anderen Datenbanken (wie PostgreSQL, MariaDB, SQL Server oder Oracle) nicht als Client-Server-System angelegt ist, sondern die Datenbank läuft Embedded und In-Process.

Das heißt, sie lässt sich nahtlos in eine eigene Anwendung integrieren, sodass die Anwendung die Datenbank-Engine nachher mitbringt: Startet man die Anwendung, ist die Datenbank da. Beendet man die Anwendung, wird auch die Datenbank beendet. Vielleicht erinnert Sie das ein wenig an eine andere In-Process-Datenbank, nämlich an SQLite. Diese extrem verbreitete Datenbank funktioniert grundsätzlich genauso, aber es gibt einen ganz gravierenden Unterschied zwischen den beiden. Dazu aber später mehr.

Empfohlener redaktioneller Inhalt

Mit Ihrer Zustimmmung wird hier ein externes YouTube-Video (Google Ireland Limited) geladen.

Ich bin damit einverstanden, dass mir externe Inhalte angezeigt werden. Damit können personenbezogene Daten an Drittplattformen (Google Ireland Limited) übermittelt werden. Mehr dazu in unserer Datenschutzerklärung.

DuckDB, und das ist ebenfalls eine Besonderheit, läuft dabei aber nicht nur In-Process mit der eigentlichen Anwendung, sondern sie kennt auch noch zwei Betriebsmodi: Sie kann die Daten nämlich entweder ganz klassisch auf Disk persistieren oder, und das ist ungewöhnlich, sie kann komplett In-Memory ausgeführt werden, also komplett ohne Persistenz. Das klingt vielleicht im ersten Augenblick etwas widersinnig, aber in einigen Szenarien ist das unglaublich praktisch und hilfreich. Und (das ist natürlich auch noch ein ganz gravierender Punkt) im Fall dieses In-Memory-Betriebs ist DuckDB rasend schnell.

Und damit kommen wir nun zur eigentlichen Spezialität von DuckDB, die sie auch als eingebettete In-Process-Datenbank von zum Beispiel SQLite abhebt: SQLite ist nämlich grundsätzlich eine SQL-basierte, relationale Datenbank, die Tabellen kennt, und in diesen Tabellen die Daten zeilenweise speichert. Für viele Anwendungsfälle ist das praktisch, denn häufig werden Daten auch entsprechend Datensatz für Datensatz gelesen und verarbeitet. Aber: Das muss nicht so sein.

Es gibt nämlich auch Anwendungsfälle, in denen es deutlich praktischer wäre, wenn man effizient die Spalten statt der Zeilen lesen (beziehungsweise schreiben) könnte. Das ist immer dann der Fall, wenn es um die Aggregation von Daten geht, also zum Beispiel bei Statistiken, Analysen, Reports und so weiter. Also im Prinzip bei allem, was eher in den Bereich OLAP statt OLTP fällt.

Hier wird es spannend: DuckDB ist nämlich eine spaltenorientierte Datenbank, das heißt, sie ist nicht so sehr auf das tagtägliche operative Geschäft ausgelegt, sondern sie adressiert den Datenanalyse-Bereich. Mit anderen Worten: Mit DuckDB hat man eine In-Process- und, wenn man das möchte, auch eine In-Memory-Engine, die sich mit SQL ansteuern lässt, und die auf Datenanalyse und OLAP ausgelegt ist. Also im Prinzip so etwas wie Apache Spark, nur halt in klein, schnuckelig, leichtgewichtig und gefühlt zigmal einfacher.

Und das ist tatsächlich ein ziemliches Alleinstellungsmerkmal. So eine Datenbank gibt (oder besser gesagt: gab) es zumindest meines Wissens nach bisher noch nicht.

Vor einigen Tagen habe ich mich mit einem Freund unterhalten, der in ebendiesem Bereich tätig ist, und wir kamen durch Zufall auf Spark zu sprechen. Ich fragte, ob sie denn wirklich derart umfangreiche Datenmengen hätten, dass sich der Aufwand für ein Spark-Cluster lohnen würde. Und seine ganz klare Antwort war Nein, das ließe sich auch problemlos auf einem einzelnen Server komplett im RAM bewerkstelligen. Das bedeutet natürlich nicht, dass es keinen Anwendungsfall für Spark gäbe, aber allzu oft wird Spark mangels Alternativen auch ohne Notwendigkeit genutzt.

Viele denken nun vielleicht, dass sich das alles in der Theorie ganz nett anhört, aber in der Realität ging es um mehr, wie beispielsweise die Integration mit diversen anderen Datenquellen. Schlagwörter wie Apache Arrow, Parquet-Files, CSV, JSON, Excel und S3 stehen vielleicht im Raum. Das Schöne ist: DuckDB kann das alles. DuckDB versteht Parquet-Dateien ebenso wie CSV, JSON und Excel. DuckDB kann sogar andere Datenbanken als Datenquelle integrieren. Das heißt, mit DuckDB lässt sich etwa direkt eine PostgreSQL oder eine MariaDB anbinden, ohne dafür einen gesonderten Adapter zu benötigen.

Die Liste der interessanten Features geht jedoch noch deutlich weiter: DuckDB unterstützt wie gesagt SQL, und zwar nicht (wie so oft) nur eine Schmalspurvariante, sondern vollumfänglich nahezu alles, was SQL heutzutage zu bieten hat: von Indizes über Transaktionen, Common Table Expressions, Snapshot-Isolation, CUBE-Funktionen, As-Of-Joins und vieles mehr. Als ich das alles nach und nach herausgefunden habe, war ich doch sehr beeindruckt.

Und weil DuckDB in C++ geschrieben ist, kann man die Datenbank zum einen auf so ziemlich jeder gängigen Plattform (macOS, Linux, Windows) und Architektur (x86, ARM) nutzen. Zum anderen lässt sich DuckDB auch in nahezu jede beliebige andere Technologie integrieren. Es gibt von Haus aus schon eine ganze Reihe von Adaptern, unter anderem für Go, Node.js, Python, R, Rust, Java, Julia, Swift und noch einige mehr. Es gibt sogar einen WebAssembly-Build, sodass man DuckDB komplett im Browser laufen lassen kann! Und das alles mit mehr oder weniger ein paar Zeilen Code, denn die Installation und auch die Anbindung sind wirklich simpel.

Apropos Installation: Wer einfach mal so ein bisschen mit DuckDB experimentieren und dafür nicht direkt eine Anwendung erstellen möchte, kann DuckDB auch über die Paketverwaltung des jeweiligen Betriebssystems installieren und als eigenständiges Werkzeug über ein CLI starten. Gleichzeitig heißt das übrigens auch, dass jede Anwendung natürlich ihre eigene lokale Version von DuckDB haben kann, weil es keine systemweite Installation als Server gibt, die sich alle teilen müssten. Im Prinzip ist das einfach nur eine ganz normale weitere Abhängigkeit, die man zu der eigenen Codebase dazu installiert.

Ich habe geschrieben, dass vergangene Woche die Version 1.0 erschienen ist. Diese trägt den Codenamen "Snow Duck". Tatsächlich ist das eine Anspielung an macOS 10.6 "Snow Leopard", was Apple damals mit dem Slogan "Zero Features" beworben hat, weil Snow Leopard den Fokus ausschließlich auf Stabilität gelegt hat. Genau das ist laut den Entwicklerinnen und Entwicklern von DuckDB auch das Hauptziel der 1.0 gewesen: Einen wirklich stabilen Unterbau zu liefern. Wer DuckDB schon ein bisschen länger verfolgt, weiß, dass es im Laufe der Zeit den einen oder anderen Breaking Change im Dateiformat gab. Aber auch das ist jetzt behoben und final festgelegt. Die Entwicklerinnen und Entwickler geben an, dass DuckDB 1.0 nun wirklich als stabile Version anzusehen sei.

Apropos Entwicklerinnen und Entwickler: Ich habe auch erwähnt, dass DuckDB ursprünglich ein Uniprojekt war. Die Entwicklung obliegt inzwischen aber einem Unternehmen, das sich daraus gebildet hat, nämlich DuckDB Labs. Dieses wiederum hängt nicht von externen Investoren ab, sondern ist komplett selbst gebootstrappt. Das finde ich persönlich immer ein sehr gutes Zeichen, weil das bedeutet, dass ein Unternehmen technologisch sinnvolle Entscheidungen treffen kann und nicht zahlengetrieben Irgendetwas machen muss, um Investoren zufriedenzustellen. Von daher gehe ich persönlich davon aus, dass DuckDB eine gute Zukunft bevorsteht.

Apropos Zukunft: Falls das alles an Argumenten noch nicht genügt, um mal einen Blick auf DuckDB zu werfen, sei noch erwähnt, dass es auch eine ganze Reihe von Extensions gibt, mit denen man den Funktionsumfang erweitern kann – zum Beispiel für eine Volltextsuche oder für den Umgang mit Geo-Spatial-Daten.

Denjenigen, die neugierig geworden sind, kann ich abschließend noch ein Buch empfehlen, das zwar noch nicht final erschienen ist (das wird voraussichtlich noch zwei Monate dauern), aber das man trotzdem vorab schon lesen kann, und zwar: "DuckDB in Action" von Manning Publishing. Der Vorab-Zugriff ist über deren MEAP-Programm (das "Manning Early Access Program" möglich). Ich habe das, was von dem Buch bislang zur Verfügung steht (und das ist zugegebenermaßen bereits fast alles), schon gelesen, und wie gesagt: Ich kann es wärmstens empfehlen! Mehr zu dem Buch finden Sie in der Buchbesprechung von Thorben Janssen.

Am Ende stellt sich trotz allem natürlich die Frage nach der passenden Anwendung. DuckDB ist auf Datenanalyse ausgelegt. Das heißt, wer eher eine klassische SQL-Datenbank sucht, wird mit DuckDB wahrscheinlich nicht übermäßig glücklich werden. Für diejenigen, die sich aber ohnehin mit OLAP & Co. beschäftigen und für die Spark & Co. zu groß und zu komplex sind, ist DuckDB sicherlich mehr als nur einen Blick wert. (rme)